Crate cu29_runtime

Crate cu29_runtime 

Source
Expand description

     Copper Runtime & SDK

copper GitHub last commit dependency status Discord Documentation

🤖     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

FlyingDrivingSwimmingSpacefaring
copper-dronecopper-drivingcopper-swimmingcopper-space

§You don’t have a real robot yet? Try it in our minimalistic sim environment!

Copper in virtual action

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

§Documentation

Link to the full documentation

§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_runtime macro 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 bus Arc) can be bound to multiple consumers.
simulation
cu29::simulation Module

Macros§

input_msg
output_msg
rx_channels
Declares the receive channels of a CuBridge implementation.
tx_channels
Declares the transmit channels of a CuBridge implementation.