A pure-Python communication library, alternative SDK, and application for the Cozmo robot.
PyCozmo is a pure-Python communication library, alternative SDK, and application for the
Cozmo robot . It allows controlling a Cozmo robot directly, without
having to go through a mobile device, running the Cozmo app.
This project is a tool for exploring the hardware and software of the Digital Dream Labs (originally Anki) Cozmo robot. It is unstable and heavily under development.
import time import pycozmo with pycozmo.connect() as cli: cli.set_head_angle(angle=0.6) time.sleep(1)
import pycozmo cli = pycozmo.Client() cli.start() cli.connect() cli.wait_for_robot() cli.drive_wheels(lwheel_speed=50.0, rwheel_speed=50.0, duration=2.0) cli.disconnect() cli.stop()
- Cliff sensor
- Battery voltage
- Cube battery voltage
- Cube accelerometers
- Backpack button (v1.5 hardware and newer)
- Wheel motors
- Head motor
- Lift motor
- OLED display
- Backpack LEDs
- IR LED
- Cube LEDs
- Platform LEDs (when available)
On-board functions (see docs/functions.md for details:
- Wi-Fi AP
- Bluetooth LE
- Path tracking
- NV RAM storage
- Over-the-air (OTA) firmware updates
Off-board functions (see docs/offboard_functions.md for details:
- Procedural face generation
- Cozmo animations from FlatBuffers .bin files
- Personality engine - work in progress
- Cozmo behaviors - work in progress
- Motion detection
- Object (cube and platform) detection
- Cube marker recognition
- Face detection
- Face recognition
- Facial expression estimation
- Pet detection
- Camera calibration
- Navigation map building
Extra off-board functions:
- Vector animations from FlatBuffers .bin files
- Vector behaviors
- ArUco marker recognition
- Cozmo and Vector robot detection
- Drivable area estimation
- Voice commands
If you have ideas for other functionality share them via GitHub.
- pycozmo_app.py - an alternative Cozmo application, implementing off-board functions (video).
- pycozmo_dump.py - a command-line application that can read and annotate Cozmo communication from pcap files or capture it live using pypcap.
- pycozmo_replay.py - a basic command-line application that can replay .pcap files back to Cozmo.
- pycozmo_anim.py - a tool for examining and manipulating animation files.
- pycozmo_update.py - a tool for over-the-air (OTA) updates of Cozmo's firmware.
- pycozmo_protocol_generator.py - a tool for generating Cozmo protocol encoder code.
Note: PyCozmo and
pycozmo_protocol_generator.py in particular could be used as a base for creating a Cozmo protocol
encoder code generator for languages other than Python (C/C++, Java, etc.).
- minimal.py - minimal code to communicate with Cozmo, using PyCozmo
- extremes.py - demonstrates Cozmo lift and head control
- backpack_lights.py - demonstrates Cozmo backpack LED control
- display_image.py - demonstrates visualization of image files on Cozmo's display
- events.py - demonstrates event handling
- camera.py - demonstrates capturing a camera image
- go_to_pose.py - demonstrates moving to a specific pose (position and orientation)
- path.py - demonstrates following a predefined path
- display_lines.py - demonstrates 2D graphics, using PIL.ImageDraw on Cozmo's display (video)
- rc.py - turns Cozmo into an RC tank that can be driven with an XBox 360 Wireless controller or Logitech Gamepad F310
- video.py - demonstrates visualizing video captured from the camera back on display
- cube_lights.py - demonstrates cube connection and LED control
- cube_light_animation.py - demonstrates cube LED animation control
- charger_lights.py - demonstrates Cozmo charging platform LED control
- audio.py - demonstrates 22 kHz, 16-bit, mono WAVE file playback through Cozmo's speaker
- nvram.py - demonstrates reading data from Cozmo's NVRAM (non-volatile memory)
- procedural_face.py - demonstrates drawing a procedural face on Cozmo's display
- procedural_face_show.py - demonstrates generating a procedural face
- procedural_face_expressions.py - demonstrates displaying various facial expressions (video)
- anim.py - demonstrates animating Cozmo
PyCozmo In The Wild
- Expressive Eyes - rendering various facial expressions using PyCozmo's procedural_face module
- an application that recognizes ArUco markers, using OpenCV
- a ROS2 driver
- another ROS2 driver
Connecting to Cozmo over Wi-Fi
A Wi-Fi connection needs to be established with Cozmo before using PyCozmo applications.
- Wake up Cozmo by placing it on the charging platform
- Make Cozmo display it's Wi-Fi PSK by rising and lowering its lift
- Scan for Cozmo's Wi-Fi SSID (depends on the OS)
- Connect using Cozmo's Wi-Fi PSK (depends on the OS)
This video summarizes the connection process.
PyCozmo vs. the Cozmo SDK
A Cozmo SDK application (aka "game") acts as a client to the Cozmo app (aka "engine") that runs on a mobile device.
The low-level communication happens over USB and is handled by the
In contrast, an application using PyCozmo basically replaces the Cozmo app and acts as the "engine". PyCozmo handles the low-level UDP communication with Cozmo.
+------------------+ +------------------+ +------------------+ | SDK app | Cozmo SDK | Cozmo app | Cozmo | Cozmo | | "game" | cozmoclad | "engine" | protocol | "robot" | | | ----------------> | Wi-Fi client | ----------------> | Wi-Fi AP | | | USB | UDP client | UDP/Wi-Fi | UDP Server | +------------------+ +------------------+ +------------------+
- Python 3.6.0 or newer
- Pillow 6.0.0 - Python image library
- FlatBuffers - serialization library
- dpkt - TCP/IP packet parsing library
pip install --user pycozmo pycozmo_resources.py download
git clone https://github.com/zayfod/pycozmo.git cd pycozmo python setup.py install --user pycozmo_resources.py download
From source, for development:
git clone email@example.com:zayfod/pycozmo.git cd pycozmo python setup.py develop --user pip install --user -r requirements-dev.txt pycozmo_resources.py download
Bug reports and changes should be sent via GitHub:
DDL Robot Discord server, channel #development-cozmo:
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.