Unlock Full Observability with copper-rs v0.13

Copper-rs is a fully deterministic operating system for robotics, but while the OS side of it is neat, we are now also making strides with the offline robotics API & tooling.

Observability with the remote deterministic debug/replay API

We added a full observability API with deterministic replay: see below our Copper time traveler debugger prototype based on this API so it is easier to see visually. Either some local tooling like this one can play and replay deterministically 2 versions of your application and do visual A/B comparisons of your algorithmic change or imagine that at scale on a CI/CD remote controlling the replay over aggregated cut logs.

Copper can speak with your units, including validating of you are mixing apples and oranges in your code at compile time. We created a new cu29-units crate so you can painlessly use units types that are fully integrated with copper's serialization and reflection!

use cu29::units::si::acceleration::meter_per_second_squared;
use cu29::units::si::angular_velocity::radian_per_second;
use cu29::units::si::f32::{
    Acceleration, AngularVelocity, MagneticFluxDensity, ThermodynamicTemperature,
};
use cu29::units::si::magnetic_flux_density::microtesla;
use cu29::units::si::thermodynamic_temperature::degree_celsius;
use serde::{Deserialize, Serialize};

/// Standardized IMU payload carrying acceleration, angular velocity, and optional magnetometer data.
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, Encode, Decode, Reflect)]
pub struct ImuPayload {
    pub accel_x: Acceleration,
    pub accel_y: Acceleration,
    pub accel_z: Acceleration,
    pub gyro_x: AngularVelocity,
    pub gyro_y: AngularVelocity,
    pub gyro_z: AngularVelocity,
    pub temperature: ThermodynamicTemperature,
}

Log visualization


we also added a simple log visualizer that can spawn rerun on recorded data from a standard copper log called cu29-logviz (instead of having to record with rerun). We started to build a compatibility layer between the Copper standard types and rerun so automagically you have the right type of visualization for your component. Thanks to Yang Zhou (NYU) for this amazing contribution!

Rerun replaying a Copper log instead of a Rerun log


Centralized Linux/std resources

Copper started to use a new concept of resources ie. for example which serial port do you want to dedicate for which bridge in copper, a kind of HAL system so your tasks can run anywhere. It was limited to embedded devices but now get generalized to Linux! So you can all of the sudden start using an RC controller on linux or FPV goggles or GPSes.

This cement copper as an operating system that is completely uniform between running as a process or running baremetal on microcontrollers. Thanks again to Yang Zhou for this one!!

Resource mapping are now available on linux too!


Standardized GNSS payload, and ublox compatiblity.

ublox has an advance cross-constellation API now that we fully map into standard Copper messages. This unlocks very cheap GPS devices and a lot of advanced functions.

This small but might ublox M10Q GPS is now fully supported by Copper but any other protocol 34+ device is now compatible.

Drone mapping illustration

And a bunch of smaller improvements and bug fixes… take it while it is hot!












Next
Next

Copper Robotics Selected for Pilot Deployment at Tolle Labs