Mote
A low cost and high confidence mobile robot for hands on robotics education.
Highlights
- High rate LiDAR, IMU, and actuator position data
- Polished interfaces for ROS, ROS2, Python and Rust
- Wide cross platform support
- Completely open source, forever
- Assemble for just ~$100
Mote is supported by Cornell University’s EmPRISE Lab.
Get Started
Want to build your own Mote? Check out the hardware sourcing guide.
Have a Mote? Get started by assembling your kit.
Kit Assembly
Configuration
Hello World
Methods of Acquiring a Mote
Mote uses a custom circuit board that must be manufactured and assembled at a factory. While PCBA has become remarkably affordable in recent years, setup fees make the cost per unit high for low scale runs (1 - 10 units).
If you would like to order a small number of robots please take a look on the issue tracker and see if a group buy is being coordinated. If you don’t see a group buy posted, reach out to a member of the Mote team and we can help you start one.
If you would like to build many Motes you can start your own manufacturing run. Checkout Ordering Circuit Boards for a step by step guide on the process. It’s much easier than it sounds.
All other (non-3D printed) parts are commercially available through standard channels. See the Bill of Materials page for details.
The rest of the robot is 3D printed. The 3D Printed Parts page provides guidance for producing these parts.
Bill of Materials
Ordering Circuit Boards
3D Printed Parts
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 RP2354 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.
Hardware changes are tested on pull request in CI.
Manufacturing files are released on any tag to mote-core matching the pattern mote-hardware-vX.X.X.
ECAD files are difficult to source control. If you would like to make a contribution to mote-hardware please annouce your intention and timeline via the issue tracker.
This helps prevent simultaneous branches that are impossible to merge.