The Mote Book
Mote is a low cost, high confidence mobile robot for hands on robotics education.
Highlights
Quick(est) Start
Contributing
Mote is an open-source project hosted by Cornell University’s EmPRISE Lab. Thoughful contributions are welcome and appreciated.
First time contributors are recommended to read through the documentation, then check out the open issues.
Project Structure
mote-core contains the core libraries required for Mote to function. It includes the following components:
mote-firmware- Embedded firmware for the RP2350 MCU
mote-api- Defines message types and serialization protocols for communicating with Mote
mote-ffi- Foreign Function Interface (FFI)
- Wraps
mote-apiin Python, C++, and Typescript libraries, allowing popular application languages to communicate with Mote
mote-configuration- Webpage used to configure / debug Mote
- Uses the
mote-ffiTypescript library to read / write configuration values, connect the robot to the network, and display errors
mote-hardware- KiCAD circuit board design files
mote-book- You’re reading it!
- Documentation and tutorials
Extension repositories use libraries from mote-ffi to implement bridges to other frameworks.
mote-ros, for example, wraps mote-ffi’s C++ library to implement a Robot Operating System (ROS) node for the robot.
Development Environment
DevContainer
DevContainer support coming in #13. DevContainers do not support USB passthrough (outside of Linux), so you’ll need to follow the local install directions if you wish to develop firmware.
Local Install
Linux and MacOS are officially supported development platforms. See the Windows section for tips on attempting to develop using Windows.
Install the following tools:
| Tool | Purpose | Installation Method |
|---|---|---|
| rust | cargo (package manager), rustc (compiler), rust-analyzer (language server) | https://rustup.rs/ |
| just | task runner | https://just.systems/man/en/introduction.html |
| uv | python package and project manager | https://docs.astral.sh/uv/getting-started/installation/ |
| node | build / run configuration webpage via typescript, vite, and svelte | https://nodejs.org/en/download |
| probe-rs | flash and debug embedded systems | https://probe.rs/docs/getting-started/installation/ |
| wasm-pack | used for TS - rust interop | cargo install wasm-pack |
| md-book | documentation generator | https://rust-lang.github.io/mdBook/guide/installation.html |
Windows
The easiest way to develop on Windows is to install a Linux partition and dual boot. Check out of one the many guides online.
You can develop without dual booting using WSL2. WSL2 cannot directly communicate with USB devices, so check out this guide for a work around.
Building, Testing, Running, and Releasing
Setup
Follow the instructions in Development Environment to setup the required tools.
Make a clone of the repository:
git clone git@github.com:empriselab/mote-core.git
or
git clone https://github.com/empriselab/mote-core.git
Build
Compile source and generate executable artifacts.
# Build Mote's firmware
just firmware::build
# Build the configuration webpage
just config::build
# Build the book
just book::build
Test
Run unit tests.
# Run api test cases
just api::test
# Run ffi test cases
just ffi::test
# Test code examples in the book
just book::test
Run
Run a target.
Running firmware requires connecting to Mote using a SWD debug probe.
# Deploy firmware to Mote (first time doing so)
just firmware::provision
# Deploy firmware to Mote (any time after)
just firmware::deploy
# Serve the configuration page
just config::run-dev
# Serve / open the book
just book::open
Release
Release artifacts are built and uploaded automatically via continuous integration.
mote-firmware- Released on any tag to
mote-cotematching the patternmote-firmware-vX.X.X, wherevX.X.Xmatches the semantic version of themote-firmwarecrate. - Automated via this GitHub Action.
- Released on any tag to
mote-ffi- Released on any tag to
mote-cotematching the patternmote-ffi-vX.X.X, wherevX.X.Xmatches the semantic version of themote-firmwarecrate. - C++ library released via the GitHub Action
- Python library released via the GitHub Action
- Released on any tag to
mote-bookandmote-configuration- Deployed to GitHub pages via the GitHub Action.
Contributing to mote-hardware
mote-hardware contains the KiCAD v9.0 project files for the Mote circuit board.
Pending #16 there is no test or release infrastructure for the board design.
FAQ
This page will be updated as soon as people ask questions :)
If you have a question, please file an issue.