{ "info": { "author": "Kaloyan Tenchov", "author_email": "zayfod@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "PyCozmo\n=======\n\n`PyCozmo` is a pure-Python [Anki Cozmo](https://anki.com/en-us/cozmo.html) communication library. It allows controlling\na Cozmo robot directly, without having to go through a mobile device, running the Cozmo app.\n\nThe library is loosely based on the [Anki Cozmo Python SDK](https://github.com/anki/cozmo-python-sdk) and the\n[cozmoclad](https://pypi.org/project/cozmoclad/) (\"C-Like Abstract Data\") library.\n\nThis project is a tool for exploring the hardware and software of Anki Cozmo. It is unstable and heavily under\ndevelopment.\n\n\nUsage\n-----\n\nBasic mode:\n```python\nimport time\nimport pycozmo\n\ndef pycozmo_program(cli):\n pkt = pycozmo.protocol_encoder.SetHeadAngle(angle_rad=0.6)\n cli.conn.send(pkt)\n time.sleep(1)\n\npycozmo.run_program(pycozmo_program)\n```\n\nAdvanced mode:\n```python\nimport time\nimport pycozmo\n\ncli = pycozmo.Client()\ncli.start()\ncli.connect()\ncli.wait_for_robot()\n\npkt = pycozmo.protocol_encoder.DriveWheels(lwheel_speed_mmps=50.0, rwheel_speed_mmps=50.0) \ncli.conn.send(pkt)\ntime.sleep(2.0)\npkt = pycozmo.protocol_encoder.StopAllMotors()\ncli.conn.send(pkt)\n\ncli.disconnect()\ncli.stop()\n```\n\n\nDocumentation\n-------------\n\n- [Cozmo protocol](docs/protocol.md) description\n- [Cozmo function](docs/functions.md) description\n- [Capturing Cozmo communication](docs/capturing.md)\n- API documentation: http://pycozmo.readthedocs.io/\n\n\nExamples\n--------\n\n- [rc.py](examples/rc.py) - turns Cozmo into an RC tank that can be driven with an XBox 360 Wireless controller or \n Logitech Gamepad F310\n- [extremes.py](examples/extremes.py) - demonstrates Cozmo lift and head control\n- [backpack_lights.py](examples/backpack_lights.py) - demonstrates Cozmo backpack LED control\n- [cube_lights.py](examples/cube_lights.py) - demonstrates cube connection and LED control\n- [cube_light_animation.py](examples/cube_light_animation.py) - demonstrates cube LED animation control\n- [charger_lights.py](examples/charger_lights.py) - demonstrates Cozmo charging platform LED control\n- [display_image.py](examples/display_image.py) - demonstrates visualization of image files on Cozmo's display\n- [display_lines.py](examples/display_lines.py) - demonstrates 2D graphics, using\n [PIL.ImageDraw](https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html) on Cozmo's display\n- [audio.py](examples/audio.py) - demonstrates 22 kHz, 8-bit, mono WAVE file playback through Cozmo's speaker \n- [events.py](examples/events.py) - demonstrates event handling\n- [camera.py](examples/camera.py) - demonstrates capturing a camera image \n\n\nTools\n-----\n\n- [pycozmo_dump.py](tools/pycozmo_dump.py) - a command-line application that can read and annotate Cozmo communication\n from [pcap files](https://en.wikipedia.org/wiki/Pcap) or capture it live using\n [pypcap](https://github.com/pynetwork/pypcap).\n- [pycozmo_replay.py](tools/pycozmo_replay.py) - a basic command-line application that can replay .pcap files back to\n Cozmo.\n\n\nRobot Support\n-------------\n\nSensors:\n- Camera - supported\n- Cliff sensor - supported\n- Accelerometers - supported\n- Gyro - supported\n- Battery voltage - supported\n- Cube battery voltage - supported\n- Cube accelerometers - supported\n\nActuators:\n- Wheel motors - supported\n- Head motor - supported\n- Lift motor - supported\n- Backpack LEDs - supported\n- IR LED - supported\n- OLED display - work in progress\n- Speaker - work in progress\n- Cube LEDs - supported\n\nCommunication:\n- Wi-Fi AP - supported\n- Bluetooth LE - supported\n\nStorage:\n- NVRAM - supported\n- Firmware update - supported\n\nOther:\n- Animations - work in progress\n\n\nConnecting to Cozmo over Wi-Fi\n------------------------------\n\nA Wi-Fi connection needs to be established with Cozmo before using PyCozmo applications.\n\n1. Wake up Cozmo by placing it on the charging platform\n2. Make Cozmo display it's Wi-Fi PSK by rising and lowering its lift\n3. Scan for Cozmo's Wi-Fi SSID (depends on the OS)\n4. Connect using Cozmo's Wi-Fi PSK (depends on the OS)\n\n\nPyCozmo vs. the Cozmo SDK\n-------------------------\n\nA Cozmo SDK application (aka \"game\") acts as a client to the Cozmo app (aka \"engine\") that runs on a mobile device.\nThe low-level communication happens over USB and is handled by the `cozmoclad` library.\n\nIn contrast, an application using PyCozmo basically replaces the Cozmo app and acts as the \"engine\". PyCozmo handles\nthe low-level UDP communication with Cozmo.\n\n```\n+------------------+ +------------------+ +------------------+\n| SDK app | Cozmo SDK | Cozmo app | PyCozmo | Cozmo |\n| \"game\" | cozmoclad | \"engine\" | | \"robot\" |\n| | ------------------> | Wi-Fi client | ------------------> | Wi-Fi AP |\n| | USB | UDP client | UDP/Wi-Fi | UDP Server |\n+------------------+ +------------------+ +------------------+\n```\n\n\nLimitations\n-----------\n\n- some high-level Cozmo SDK features are implemented in the Cozmo app and have no equivalent in PyCozmo, today:\n - personality engine\n - behaviors\n - motion detection\n - face detection\n - facial expression estimation\n - text-to-speech\n - songs\n- there is no Wi-Fi control. The library assumes a Wi-Fi connection to Cozmo, established in advance.\n- frame retransmission is not implemented\n- transmission of multiple packets in a single frame is not implemented\n\n\nRequirements\n------------\n\n- Python 3.5.4\n- [Pillow](https://github.com/python-pillow/Pillow) 6.0.0 - Python image library\n- [FlatBuffers](https://github.com/google/flatbuffers) - serialization library\n- [dpkt](https://github.com/kbandla/dpkt) - TCP/IP packet parsing library \n\n\nInstallation\n------------\n\nUsing pip:\n\n```\npip install pycozmo\n```\n\nFrom source:\n\n```\ngit clone https://github.com/zayfod/pycozmo.git\ncd pycozmo\npython setup.py install\n```\n\n\nSupport\n-------\n\nBug reports and patches should be sent via GitHub:\n\nhttps://github.com/zayfod/pycozmo\n\nAnki Robot Discord server, channel #cozmo:\n\nhttps://discord.gg/ew92haS\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zayfod/pycozmo/", "keywords": "anki,cozmo,robot,robotics", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pycozmo", "package_url": "https://pypi.org/project/pycozmo/", "platform": "", "project_url": "https://pypi.org/project/pycozmo/", "project_urls": { "Homepage": "https://github.com/zayfod/pycozmo/" }, "release_url": "https://pypi.org/project/pycozmo/0.5.0/", "requires_dist": [ "dpkt", "numpy", "Pillow (>=6.0.0)", "flatbuffers" ], "requires_python": ">=3.5.4", "summary": "A pure-Python Anki Cozmo communication library.", "version": "0.5.0" }, "last_serial": 5964870, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "744dd4e6fb2ecd56723cf8951a2dea3d", "sha256": "289b8f0caa4626fa831e8f1b50a9d2fe5697e8138e69637696aeb6fa5fbf1033" }, "downloads": -1, "filename": "pycozmo-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "744dd4e6fb2ecd56723cf8951a2dea3d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 19772, "upload_time": "2019-08-15T12:35:57", "url": "https://files.pythonhosted.org/packages/f4/dc/1296bd90d70e6d8a065cb7b2451e829982c4f4a5a9638f699e68590bdf39/pycozmo-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9555468f4831e7173144ed7122f05892", "sha256": "28361ce895a28c85f6599466eff07d87c9f3ab223da78128ce94133bf373d691" }, "downloads": -1, "filename": "pycozmo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9555468f4831e7173144ed7122f05892", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 15568, "upload_time": "2019-08-15T12:36:00", "url": "https://files.pythonhosted.org/packages/d0/8f/62d9921aa3102ab71c4ec7602943bde29c9836e6cf6e8cfc7771c45400e0/pycozmo-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2c778672e70a77bd9905bb61abb89523", "sha256": "2f7fa5b2329bb2af7c2d88746c03210a782e9e68b330f310a3c0f66a5e5c19aa" }, "downloads": -1, "filename": "pycozmo-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c778672e70a77bd9905bb61abb89523", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 28292, "upload_time": "2019-08-25T19:08:53", "url": "https://files.pythonhosted.org/packages/d2/85/378b3581cbffe019b1cecf7ec8485582166719136840ebeefa977a0b1700/pycozmo-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6f8f925a33c59ddad04dbf7b4c2a1b4", "sha256": "84c6cc9660da4756e1e5df7b8717a2e8e71845af67de3062c1a1f733eed865b2" }, "downloads": -1, "filename": "pycozmo-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e6f8f925a33c59ddad04dbf7b4c2a1b4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 24605, "upload_time": "2019-08-25T19:08:54", "url": "https://files.pythonhosted.org/packages/0b/1c/6b9044900cbf09df66724795db93c1eb27d79dab0f0d099c1df17800f7a8/pycozmo-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "005248608e25639df6d5bb824b18ef99", "sha256": "a64698c49446300d61415825c50188e5919b944ff174e65eace4418f0166891c" }, "downloads": -1, "filename": "pycozmo-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "005248608e25639df6d5bb824b18ef99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 36311, "upload_time": "2019-09-01T21:29:16", "url": "https://files.pythonhosted.org/packages/b1/b3/1023901c9e1d5a13e5251ad65228e0e1e26e0ec5de44ffb814c0fbe8b429/pycozmo-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "619cddf770f1e74326b2ec27cf57e3b5", "sha256": "94b76c041d5b7cfa9d8e00aadacc0265c136838ad18112ee7a4c105495a501e2" }, "downloads": -1, "filename": "pycozmo-0.3.0.tar.gz", "has_sig": false, "md5_digest": "619cddf770f1e74326b2ec27cf57e3b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 32487, "upload_time": "2019-09-01T21:29:18", "url": "https://files.pythonhosted.org/packages/4e/3f/28aa568ab33385f4178c26c0837d01f1e6be415d4f5d9995f06154f54158/pycozmo-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "ced25046e7343642fbd32e6ccbe61c35", "sha256": "aab277331ae2c7b453960995d00da20e07496876dacae826841101d8160ba262" }, "downloads": -1, "filename": "pycozmo-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ced25046e7343642fbd32e6ccbe61c35", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.4", "size": 53415, "upload_time": "2019-09-13T09:32:24", "url": "https://files.pythonhosted.org/packages/44/11/e51d0d5b47ee44f1c66bb9848a6ccb5aad526c5cebc184cd06940f38e5c8/pycozmo-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bb30256b63ae70938599a415f43f10f", "sha256": "8a42972af073ddf6b4ae926a6614c21c2b318809860b0559e141b86aec3b16aa" }, "downloads": -1, "filename": "pycozmo-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6bb30256b63ae70938599a415f43f10f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.4", "size": 48561, "upload_time": "2019-09-13T09:32:27", "url": "https://files.pythonhosted.org/packages/69/99/57b826da93c1d27c9857e1940ab220d951c04342aa1d896893a257efa54e/pycozmo-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ee4a3267a5f569477deb1ab6f44ddd6e", "sha256": "a83fabccd44637105f2f6c251e5845028450e8ebd2ec5d69fda75897c3d1adb0" }, "downloads": -1, "filename": "pycozmo-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee4a3267a5f569477deb1ab6f44ddd6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.4", "size": 81187, "upload_time": "2019-10-12T17:08:49", "url": "https://files.pythonhosted.org/packages/bf/f0/12f505030dcd9405986f6d448c1e4a406f0ddcb78c490ecfe175f54d5fba/pycozmo-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b4ee80a622d618f37fa1f61fa2fb8b5", "sha256": "1d612ffcf5926dfb9133b9ce265944bcb8e6ed4e980c4f2483a3e11705970164" }, "downloads": -1, "filename": "pycozmo-0.5.0.tar.gz", "has_sig": false, "md5_digest": "2b4ee80a622d618f37fa1f61fa2fb8b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.4", "size": 65614, "upload_time": "2019-10-12T17:08:52", "url": "https://files.pythonhosted.org/packages/48/0a/0d3c58b8f8ac4bcbe0668eafaaf807529e938ea2fe4994e823e07ba2bb01/pycozmo-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ee4a3267a5f569477deb1ab6f44ddd6e", "sha256": "a83fabccd44637105f2f6c251e5845028450e8ebd2ec5d69fda75897c3d1adb0" }, "downloads": -1, "filename": "pycozmo-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ee4a3267a5f569477deb1ab6f44ddd6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.4", "size": 81187, "upload_time": "2019-10-12T17:08:49", "url": "https://files.pythonhosted.org/packages/bf/f0/12f505030dcd9405986f6d448c1e4a406f0ddcb78c490ecfe175f54d5fba/pycozmo-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b4ee80a622d618f37fa1f61fa2fb8b5", "sha256": "1d612ffcf5926dfb9133b9ce265944bcb8e6ed4e980c4f2483a3e11705970164" }, "downloads": -1, "filename": "pycozmo-0.5.0.tar.gz", "has_sig": false, "md5_digest": "2b4ee80a622d618f37fa1f61fa2fb8b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.4", "size": 65614, "upload_time": "2019-10-12T17:08:52", "url": "https://files.pythonhosted.org/packages/48/0a/0d3c58b8f8ac4bcbe0668eafaaf807529e938ea2fe4994e823e07ba2bb01/pycozmo-0.5.0.tar.gz" } ] }