Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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-api in Python, C++, and Typescript libraries, allowing popular application languages to communicate with Mote
  • mote-configuration
    • Webpage used to configure / debug Mote
    • Uses the mote-ffi Typescript 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:

ToolPurposeInstallation Method
rustcargo (package manager), rustc (compiler), rust-analyzer (language server)https://rustup.rs/
justtask runnerhttps://just.systems/man/en/introduction.html
uvpython package and project managerhttps://docs.astral.sh/uv/getting-started/installation/
nodebuild / run configuration webpage via typescript, vite, and sveltehttps://nodejs.org/en/download
probe-rsflash and debug embedded systemshttps://probe.rs/docs/getting-started/installation/
wasm-packused for TS - rust interopcargo install wasm-pack
md-bookdocumentation generatorhttps://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-cote matching the pattern mote-firmware-vX.X.X, where vX.X.X matches the semantic version of the mote-firmware crate.
    • Automated via this GitHub Action.
  • mote-ffi
    • Released on any tag to mote-cote matching the pattern mote-ffi-vX.X.X, where vX.X.X matches the semantic version of the mote-firmware crate.
    • C++ library released via the GitHub Action
    • Python library released via the GitHub Action
  • mote-book and mote-configuration

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.