Skip to main content

A pure-Python communication library, alternative SDK, and application for the Cozmo robot.

Project description

PyCozmo

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.

The library is loosely based on the Anki Cozmo Python SDK and the cozmoclad ("C-Like Abstract Data") library.

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.

Usage

Basic:

import time
import pycozmo

with pycozmo.connect() as cli:
    cli.set_head_angle(angle=0.6)
    time.sleep(1)

Advanced:

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()

Documentation

https://pycozmo.readthedocs.io/

Robot Support

Sensors:

  • Camera
  • Cliff sensor
  • Accelerometers
  • Gyro
  • Battery voltage
  • Cube battery voltage
  • Cube accelerometers
  • Backpack button (v1.5 hardware and newer)

Actuators:

  • Wheel motors
  • Head motor
  • Lift motor
  • OLED display
  • Speaker
  • Backpack LEDs
  • IR LED
  • Cube LEDs
  • Platform LEDs (when available)

On-board functions (see docs/functions.md for details:

  • Wi-Fi AP
  • Bluetooth LE
  • Localization
  • 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
  • Text-to-speech
  • Songs

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.

Tools

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.).

Examples

Basic:

  • 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

Advanced:

PyCozmo In The Wild

Connecting to Cozmo over Wi-Fi

A Wi-Fi connection needs to be established with Cozmo before using PyCozmo applications.

  1. Wake up Cozmo by placing it on the charging platform
  2. Make Cozmo display it's Wi-Fi PSK by rising and lowering its lift
  3. Scan for Cozmo's Wi-Fi SSID (depends on the OS)
  4. 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 cozmoclad library.

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    |
+------------------+                   +------------------+                   +------------------+

Requirements

Installation

Using pip:

pip install --user pycozmo

pycozmo_resources.py download

From source:

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 git@github.com:zayfod/pycozmo.git
cd pycozmo
python setup.py develop --user
pip install --user -r requirements-dev.txt

pycozmo_resources.py download

Support

Bug reports and changes should be sent via GitHub:

https://github.com/zayfod/pycozmo

DDL Robot Discord server, channel #development-cozmo:

https://discord.gg/ew92haS

Disclaimer

This project is not affiliated with Digital Dream Labs or Anki.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycozmo-0.8.0.tar.gz (122.8 kB view details)

Uploaded Source

Built Distribution

pycozmo-0.8.0-py3-none-any.whl (145.6 kB view details)

Uploaded Python 3

File details

Details for the file pycozmo-0.8.0.tar.gz.

File metadata

  • Download URL: pycozmo-0.8.0.tar.gz
  • Upload date:
  • Size: 122.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.3

File hashes

Hashes for pycozmo-0.8.0.tar.gz
Algorithm Hash digest
SHA256 50a7cd0815435dad78351f9936f17c51ddbf29e068197a159cf5a55e2725ed42
MD5 0004490c7c039283e3976a52fa7efd43
BLAKE2b-256 ed4db5c0bd0446aa525bbe8a779079d10f9dadf9f80f79a2d8736ba7484073f8

See more details on using hashes here.

File details

Details for the file pycozmo-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: pycozmo-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 145.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.3

File hashes

Hashes for pycozmo-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 891b880263c0eba27ca2a2e954a60834352b282ed69fc08c4d7a472555885fa1
MD5 408de319ba41d773f21291d7c902d18b
BLAKE2b-256 dfa83f4fc8e43d59aba538550e86196a86c630beae62347fe6e3fb41b13bab24

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page