{"id":15417004,"url":"https://github.com/blueandi/droidcontrolship","last_synced_at":"2025-06-17T05:04:21.464Z","repository":{"id":167571461,"uuid":"638666411","full_name":"BlueAndi/DroidControlShip","owner":"BlueAndi","description":"Robot platooning, sensor fusion of odometry and inertial unit and more ...","archived":false,"fork":false,"pushed_at":"2024-11-22T08:45:06.000Z","size":3844,"stargazers_count":4,"open_issues_count":11,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-17T05:04:16.111Z","etag":null,"topics":["convoy","cpp11","esp32","kalman-filter","platooning","robotics","sensor-fusion","webots"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BlueAndi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-09T20:57:55.000Z","updated_at":"2024-09-25T17:30:58.000Z","dependencies_parsed_at":"2023-09-22T19:50:54.688Z","dependency_job_id":"43a2a53a-b37e-4b72-afbf-d469bf3e55aa","html_url":"https://github.com/BlueAndi/DroidControlShip","commit_stats":{"total_commits":628,"total_committers":7,"mean_commits":89.71428571428571,"dds":0.6098726114649682,"last_synced_commit":"8e5238f018190473b57662ba02225386d95303c7"},"previous_names":["blueandi/droidcontrolship"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BlueAndi/DroidControlShip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueAndi%2FDroidControlShip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueAndi%2FDroidControlShip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueAndi%2FDroidControlShip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueAndi%2FDroidControlShip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlueAndi","download_url":"https://codeload.github.com/BlueAndi/DroidControlShip/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueAndi%2FDroidControlShip/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260294455,"owners_count":22987622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["convoy","cpp11","esp32","kalman-filter","platooning","robotics","sensor-fusion","webots"],"created_at":"2024-10-01T17:14:22.784Z","updated_at":"2025-06-17T05:04:21.439Z","avatar_url":"https://github.com/BlueAndi.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Droid Control Ship - Firmware for ZumoComSystem \u003c!-- omit in toc --\u003e\r\n\r\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://choosealicense.com/licenses/mit/)\r\n[![Repo Status](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)\r\n[![Release](https://img.shields.io/github/release/BlueAndi/DroidControlShip.svg)](https://github.com/BlueAndi/DroidControlShip/releases)\r\n[![Build Status](https://github.com/BlueAndi/DroidControlShip/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/BlueAndi/DroidControlShip/actions/workflows/main.yml)\r\n\r\nThe Droid Control Ship is the firmware running on the [ZumoComSystem](https://github.com/NewTec-GmbH/ZumoComSystem) hardware, which is a shield for the [Pololu 32U4 Zumo](https://www.pololu.com/product/2510) robot.\r\n\r\nIt provides different kind of exclusive applications, used for educational purposes:\r\n\r\n* Convoy Leader Robot - Based on odometry information, it leads the followers to follow like a lemming trail.\r\n* Convoy Follower Robot - It follows the leader by mainly reacting on the received information.\r\n* Remote Control - Receives commands and motor speeds from an external source through MQTT.\r\n\r\n## Table of content\r\n\r\n* [The ZumoComSystem Shield](#the-zumocomsystem-shield)\r\n* [The simulation](#the-simulation)\r\n  * [Installation](#installation)\r\n  * [How to start?](#how-to-start)\r\n* [The target](#the-target)\r\n  * [Installation](#installation-1)\r\n  * [Build and flash procedure](#build-and-flash-procedure)\r\n* [The Applications](#the-applications)\r\n* [Documentation](#documentation)\r\n* [Used Libraries](#used-libraries)\r\n  * [Issues, Ideas And Bugs](#issues-ideas-and-bugs)\r\n  * [License](#license)\r\n  * [Contribution](#contribution)\r\n\r\n# The ZumoComSystem Shield\r\n\r\n![RobotWithZumoComSystem](doc/images/RobotWithZumoComSystem.jpg)\r\n\r\nIt supports running in the [Webots simulation](https://www.cyberbotics.com/) too.\r\n\r\nThe Droid Control Ship communicates with the [Radon Ulzer](https://github.com/BlueAndi/RadonUlzer), which is the firmware running on the Pololu Zumo32U4 robot.\r\n\r\n# The simulation\r\n\r\nThe simulation is based on the open source robot simulator *Webots*. The application and the services are equal to the target firmware. Only the HAL is different in the simulation.\r\n\r\n* Website: \u003chttps://cyberbotics.com/#cyberbotics\u003e\r\n* Github: \u003chttps://github.com/cyberbotics/webots\u003e\r\n\r\n![simulation-deployment](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.githubusercontent.com/BlueAndi/DroidControlShip/main/doc/architecture/uml/PhysicalView/SimulationDeployment.plantuml)\r\n\r\n## Installation\r\n\r\n1. Install the native compiler toolchain:\r\n    * Linux\r\n        * Install the gcc toolchain, depended on your distribution.\r\n    * Windows\r\n        * Install the [MSYS2](https://www.msys2.org) toolchain.\r\n        * Open MSYS2 shell.\r\n            * Update package database: ```pacman -Sy pacman```\r\n            * Install GCC: ```pacman -Sy mingw-w64-ucrt-x86_64-gcc```\r\n            * Install Mosquitto: ```pacman -Sy mingw-w64-ucrt-x86_64-mosquitto```\r\n            * Install OpenSSL: ```pacman -S mingw-w64-ucrt-x86_64-openssl```\r\n\r\n## How to start?\r\n\r\nAfter you built the application, you will find in in ```.pio/build/\u003cAPPLICATION-NAME\u003e/program.exe```. It provides several command line arguments to configure certain features. Use -h or --help to get a short user friendly overview about them.\r\n\r\nThe applications are using a configuration file in JSON format to retrieve certain settings. In the very first run, such a configuration file will be automatically be created. If there exists already one, it will be loaded without modifications (regardless of any other program arguments).\r\n\r\nThe DroidControlShip will always try to connect to the RadonUlzer, therefore its important to have the RadonUlzer executable started first! And because the RadonUlzer executable will always connect to the Webots simulation, it shall run as well having a corresponding world loaded.\r\n\r\nSome applications require to have an MQTT server running, but it may depend on the kind of application you choose.\r\n\r\nA complete deployment, including MQTT server, would be started in the following way:\r\n\r\nMQTT Broker --\u003e Webots World --\u003e RadonUlzer --\u003e DroidControlShip\r\n\r\nIn order to simplify this process, the [Launcher](https://github.com/gabryelreyes/Launcher) project is under active development.\r\n\r\n# The target\r\nThe main target of the firmware is the [ZumoComSystem](https://github.com/NewTec-GmbH/ZumoComSystem) from NewTec GmbH, which is a shield for the [Pololu 32U4 Zumo](https://www.pololu.com/product/2510) robot.\r\n\r\nTogether with [Radon Ulzer](https://github.com/BlueAndi/RadonUlzer) it can be run in the [Webots simulation](https://www.cyberbotics.com/) too.\r\n\r\n![target-deployment](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.githubusercontent.com/BlueAndi/DroidControlShip/main/doc/architecture/uml/PhysicalView/TargetDeployment.plantuml)\r\n\r\n## Installation\r\n1. Make sure that the hardware version of your [ZumoComSystem](https://github.com/NewTec-GmbH/ZumoComSystem) is supported. Currently, only v1.1 and v1.2 are supported.\r\n2. Install the [drivers](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads) for the CP2102 USB-UART converter if required. The \"CP210x Universal Windows Driver\" is recommended, as it enables the automatic bootloader mode.\r\n\r\n## Build and flash procedure\r\n1. Build the firmware using the ```Build``` task in the \"PlatformIO Project Tasks\"\r\n    * For the target use only the applications with \"Target\" as postfix, e.g. LineFollowerTarget.\r\n2. Upload the firmware to the ZumoComSystem using the ```Upload``` task in the \"PlatformIO Project Tasks\" tab, or the arrow on the bottom task bar.\r\n3. After succesfully uploading the firmware, the configuration has to be uploaded to the filesystem. Make sure that the information in ```data/config/config.json``` matches your setup. Upload the configuration using the ```Upload Filesystem Image``` task in the \"PlatformIO Project Tasks\" tab.\r\n\r\nNote that the robotName can be left empty in case you want the MAC address of the hardware to be used as the name. In case you prefer to give the robot a more descriptive name, can set the name. Beware, if you use multiple robots, you will have to give each a different name manually.\r\n\r\nIn a similar way, not providing a WiFi configuration will force the target into going into Access Point Mode. In a future update it will be possible to update the WiFi credentials using this mode and an on-board web server.\r\n\r\n# The Applications\r\n\r\n| Application | Standalone | Zumo32U4 Robot Required | RadonUlzer Application | MQTT Broker Required |\r\n| - | - | - | - | - |\r\n| ConvoyLeader | No | Yes | ConvoyLeader | Yes |\r\n| ConvoyFollower | No | Yes | RemoteControl | Yes |\r\n| RemoteControl | No | Yes | RemoteControl | Yes |\r\n| SensorFusion | No | Yes | SensorFusion | Yes |\r\n| Test | Yes | No | N/A | No |\r\n\r\n# Documentation\r\n\r\n* [SW Architecture](./doc/architecture/README.md)\r\n* [SW Configuration](./doc/configuration/README.md)\r\n\r\n# Used Libraries\r\n\r\n| Library                                                                                        | Description                                                                                                                                    | License    |\r\n| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |\r\n| [Arduino](https://github.com/platformio/platform-espressif32)                                  | ESP32 Arduino framework                                                                                                                        | Apache-2.0 |\r\n| [Arduino client for MQTT](https://github.com/knolleary/pubsubclient)                           | This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT.                                  | MIT        |\r\n| [ArduinoJson](https://arduinojson.org/)                                                        | JSON handling                                                                                                                                  | MIT        |\r\n| [SerialMuxProt](https://github.com/gabryelreyes/SerialMuxProt)                                 | Multiplexing Communication Protocol                                                                                                            | MIT        |\r\n| [USB_Host_Shield_2.0](https://github.com/NewTec-GmbH/USB_Host_Shield_2.0/tree/3_Endpoints_ACM) | Maxim USB-Host IC driver. Using fork of the [original](https://github.com/felis/USB_Host_Shield_2.0) library that solves issue with endpoints. | GPLv2      |\r\n\r\n## Issues, Ideas And Bugs\r\n\r\nIf you have further ideas or you found some bugs, great! Create a [issue](https://github.com/BlueAndi/DroidControlShip/issues) or if you are able and willing to fix it by yourself, clone the repository and create a pull request.\r\n\r\n## License\r\n\r\nThe whole source code is published under the [MIT license](http://choosealicense.com/licenses/mit/).\r\nConsider the different licenses of the used third party libraries too!\r\n\r\n## Contribution\r\n\r\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any\r\nadditional terms or conditions.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblueandi%2Fdroidcontrolship","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblueandi%2Fdroidcontrolship","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblueandi%2Fdroidcontrolship/lists"}