Skip to main content

Package to easily control your DotBots and SailBots.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

CI PyPI version Documentation Coverage License

PyDotBot

The control plane for the DotBot - a small wireless wheeled robot built to operate in large swarms, for research and education.

PyDotBot allows you to flash a robot and control a whole fleet over the air, from one bot to a thousand.

▶️ Click to see a DotBot swarm in action

┌───────────┐           ┌────────────┐               ┌─────────┐
│  web UI / │           │            │               │         │
│   CLI /   │──REST/WS─▶│ controller │──serial/MQTT─▶│ gateway │──radio─▶ 🤖🤖🤖 DotBot swarm
│ your code │           │            │               │         │
└───────────┘           └────────────┘               └─────────┘
  ╰─────────── PyDotBot ───────────╯

What you can do

  • 🕹️ Drive one bot or a whole fleet from a web UI (live map + joystick) or your own Python code
  • 📡 Flash the swarm over the air - one command, hundreds of bots at once
  • 🛰️ Get real-world (x, y) positions with Lighthouse 2 localization
  • 🧪 Try it all with zero hardware using the built-in simulator
  • 🛠️ One dotbot CLI takes you from build → flash → run

Install

PyDotBot is available on PyPi, install it with:

pip install --pre pydotbot

Then, check your installation with dotbot --version and learn what's possible with dotbot --help.

Every command and flag is documented in the CLI reference.

Try the simulator

See the whole thing run with nothing but Python!

The command below will run a simulated swarm, which you can observe in a web UI at http://localhost:8000/PyDotBot/ :

dotbot run simulator -w

Drive the simulated bots from the UI, or run a bundled demo in a second terminal:

dotbot run demo circle   # drive one bot in a circle (the simplest demo)

Learn how to script the swarm from your own code, run the richer examples, and more - all with no hardware - in the simulator guide.

Deploy a real swarm

The DotBot is made to operate as a swarm, here is how you can deploy it on real robots.

Prerequisites

Minimal hardware setup:

  • DotBot v3, as well as a USB-C cable and a barrel-jack charger (2.5 mm, 6–18 V, 5/10 A)
  • nRF5340-DK to use as gateway, as well as a micro-USB cable

Software to install (as needed):

  • Python ≥ 3.11 - ensure you also have pip available in your PATH
  • nRF Command Line Tools (nrfjprog), for commands such as dotbot device flash

Setup

To operate as a swarm, set your swarm connection config:

dotbot config init --conn mqtts://argus.paris.inria.fr:8883 --swarm-id 1234

argus.paris.inria.fr is our Inria Paris broker and 1234 our swarm - pass your own --conn and --swarm-id (your testbed admin provides these). This writes ./dotbot.toml; commands run from this directory pick it up, so you don't repeat the flags. Full schema: the configuration reference.

The swarm mode also requires a special "sandbox" firmware in each dotbot. We also need a more powerful gateway firmware. Let's flash both - the network id comes from your config:

dotbot fw fetch  # pull the pinned pre-compiled firmwares (swarmit + dotbot-firmware)
dotbot device flash-mari-gateway -s 10  # flash the gateway
dotbot device flash-swarmit-sandbox -s 77  # the sandbox firmware - do this on each dotbot

(device flash-mari-gateway / flash-swarmit-sandbox auto-fetch the firmware into ~/.dotbot/artifacts/ if it isn't already there.)

Now, run the gateway (the broker comes from your config):

dotbot run gateway -p /dev/cu.usbmodem0010500324491

Deploy and control

You can flash as many dotbots as you want, all at once! First, how about making them spinnnn 🔄 🔄

dotbot swarm flash ~/.dotbot/artifacts/dotbot-firmware-1.22.0rc1/spin-sandbox-dotbot-v3.bin -ys  # flash the whole fleet with a simple spinning app

(dotbot swarm reads the same dotbot.toml as the rest - pass --conn / --swarm-id to override it for one run. That path is the dotbot-firmware release dotbot fw fetch cached - run dotbot fw list to see the exact paths and versions on your machine.)

Then, flash another experiment:

dotbot swarm stop  # ensure all robots are in bootloader
dotbot swarm flash ~/.dotbot/artifacts/dotbot-firmware-1.22.0rc1/dotbot-sandbox-dotbot-v3.bin -ys  # this firmware allows bots to be remote-controlled

Observe and control your swarm from a web interface:

dotbot run controller -w  # will open a webpage at http://localhost:8000/PyDotBot/

Full walkthrough of fleet operations - status, OTA flash, start/stop, monitor - is in the swarm reference.

Calibrate positions (optional)

Give the bots real-world (x, y) with Lighthouse 2 - capture once from any bot over the air, then push the result to the whole fleet (needs the [calibrate] extra, below):

dotbot swarm stop                                              # bots must be idle to capture
dotbot swarm lh2-calibration collect --device <addr> -d 500   # capture + solve + save
dotbot swarm lh2-calibration push ~/.dotbot/calibration-<UTC>.toml  # apply to every bot

-d is your reference square's side, in mm (one bot's capture calibrates the whole arena). Full walkthrough - arena sizing and the cabled alternative - is in the LH2 calibration guide.

Going further

  • Drive a single bot end to end - build, flash, and control one DotBot: the one-bot guide.
  • Position tracking with Lighthouse 2 - give the fleet real-world (x, y), calibrated over the air: the LH2 calibration guide (a cabled alternative is covered there too).
  • The controller + web UI - drive and visualize a swarm from the browser: the controller guide.
  • Build firmware from source instead of dotbot fw fetch - needs SEGGER Embedded Studio and a DotBot-firmware checkout:
    git clone --recurse-submodules --branch develop https://github.com/DotBots/DotBot-firmware.git
    export DOTBOT_FIRMWARE_REPO=$(pwd)/DotBot-firmware
    
    then dotbot fw build / dotbot fw artifacts (see fw).
  • Everything else - the full dotbot CLI (fw / device / swarm / run
    • config), the REST/WS and MQTT surfaces, and hardware notes: the documentation.

Most of dotbot is in the base install; only LH2 calibration needs an extra:

pip install --pre 'pydotbot[calibrate]'   # opencv (the LH2 homography solve)

Hitting a snag (e.g. the web UI not loading in Firefox)? See Troubleshooting.

Tests

To run the tests, run tox:

tox

License

See LICENSE in each component repository.

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

dotbot_sdk-0.1.0.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dotbot_sdk-0.1.0-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file dotbot_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: dotbot_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for dotbot_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6c5ae5e2057c8abbfba7207833d62ef1766673b5629dae68dcf74957ad512d8c
MD5 8eaedc0ed49fd00f6b9b7942601a5b0b
BLAKE2b-256 770685a82cc4d8f727a12008916fb1db7df2f505d0a51680a5c35b86bd281bb9

See more details on using hashes here.

File details

Details for the file dotbot_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dotbot_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for dotbot_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2682438f2cb6bc96f879eb55f944d571675c76c7ef3195c769ecc5691947e743
MD5 c84bfd22776b172f92921b808dc50cbe
BLAKE2b-256 42b6bb5c13bafeadced089d8dea4ead40fdca55eb8910a2986725cc9b2e68963

See more details on using hashes here.

Supported by

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