Expand description
Copper Runtime & SDK
🤖     Copper is to robots what a game engine is to games - build, run, and replay your entire robot deterministically.
§Why Copper
🦀 Rust-first – ergonomic & safe
⚡ Sub-microsecond latency – zero-alloc, data-oriented runtime
⏱️ Deterministic replay – every run, bit-for-bit identical
🧠 Interoperable with ROS2 – bridges via Zenoh opening the path for a progressive migration.
🪶 Runs anywhere – from Linux servers, workstations, SBC to bare-metal MPUs
📦 Built to ship – one stack from simulation to production
§Example Applications
| Flying | Driving | Swimming | Spacefaring |
|---|---|---|---|
§You don’t have a real robot yet? Try it in our minimalistic sim environment!
Here is a Copper-based robot in action in a Bevy simulation environment!
The realistic sim is created using Bevy (A Rust Game Engine)
and Avian3d (Physics Engine in Rust).
On your mac or linux machine (x86-64 or Arm) just run …
$ cargo install cu-rp-balancebot
$ balancebot-sim… to try it locally.
The source code for this demo is available in the examples/cu_rp_balancebot directory.
§Get Started
- Start a new project from templates: Project Templates
- See a full task graph + runtime walkthrough: Copper Application Overview
- Build and deploy an application: Build and Deploy a Copper Application
- RON configuration reference: Copper RON Configuration Reference
§Documentation
Link to the full documentation
- Runtime concepts and SDK features: Copper Runtime Overview
- Task lifecycle: Task Lifecycle
- Modular configuration: Modular Configuration
- Task automation: Task Automation with just
- Supported platforms: Supported Platforms
- Bare-metal development: Baremetal Development
- Available components: Available Components
- FAQ: FAQ
- Release notes: Copper Release Notes
- Roadmap: Roadmap
§Project
[!NOTE] We are looking for contributors to help us build the best robotics framework possible. If you are interested, please join us on Discord or open an issue.
Modules§
- app
- config
- This module defines the configuration of the copper runtime. The configuration is a directed graph where nodes are tasks and edges are connections between tasks. The configuration is serialized in the RON format. The configuration is used to generate the runtime code at compile time.
- copperlist
- CopperList is the main data structure used by Copper to communicate between tasks. It is a queue that can be used to store preallocated messages between tasks in memory order.
- cuasynctask
- cubridge
- Typed bridge traits and helpers used to connect Copper to external components both as a sink and a source.
- curuntime
- CuRuntime is the heart of what copper is running on the robot.
It is exposed to the user via the
copper_runtimemacro injecting it as a field in their application struct. - cutask
- This module contains all the main definition of the traits you need to implement or interact with to create a Copper task.
- monitoring
- Some basic internal monitoring tooling Copper uses to monitor itself and the tasks it is running.
- payload
- pool
- resource
- Resource descriptors and utilities to hand resources to tasks and bridges.
User view: in
copperconfig.ron, map the binding names your tasks/bridges expect to the resources exported by your board bundle. Exclusive things (like a serial port) should be bound once; shared things (like a telemetry busArc) can be bound to multiple consumers. - simulation
cu29::simulationModule
Macros§
- input_
msg - output_
msg - rx_
channels - Declares the receive channels of a
CuBridgeimplementation. - tx_
channels - Declares the transmit channels of a
CuBridgeimplementation.
