Standard Messages

HORUS provides 60+ typed message types covering every common robotics domain. All messages support zero-copy shared memory transport via Topic<T>.

// simplified
use horus::prelude::*;

Which Message Do I Need?

I need to...UsePage
Send velocity commands to motorsCmdVel, TwistControl
Read IMU data (accel + gyro)ImuSensor
Read LiDAR scansLaserScanSensor
Publish robot positionOdometry, Pose2D, Pose3DSensor, Geometry
Send camera imagesImageImage API
Send point cloudsPointCloudPointCloud API
Report detections (ML output)Detection, Detection3DPerception
Send navigation goalsNavGoal, NavPathNavigation
Report system healthDiagnosticReport, NodeHeartbeatDiagnostics
Send force/torque dataWrenchStamped, ForceCommandForce
Send joystick/keyboard inputJoystickInput, KeyboardInputInput
Send audio dataAudioFrameAudio
Send ML tensorsTensorTensor API
Send dynamic/untyped dataGenericMessage (4KB, MessagePack)GenericMessage

Message Categories

CategoryTypesPage
GeometryTwist, Pose2D, Pose3D, Point3, Vector3, Quaternion, TransformStamped, AccelGeometry Messages
SensorImu, LaserScan, Odometry, NavSatFix, BatteryState, JointState, Temperature, MagneticFieldSensor Messages
ControlCmdVel, MotorCommand, ServoCommand, PidConfig, DifferentialDriveCommandControl Messages
NavigationNavGoal, NavPath, Waypoint, OccupancyGrid, CostMap, VelocityObstacleNavigation Messages
PerceptionDetection, Detection3D, TrackedObject, SegmentationMask, LandmarkArrayPerception Messages
VisionCompressedImage, CameraInfo, RegionOfInterest, StereoInfo, BoundingBoxVision Messages
DiagnosticsDiagnosticReport, NodeHeartbeat, SafetyStatus, EmergencyStopDiagnostics Messages
Force & HapticsWrenchStamped, ForceCommand, ContactInfo, ImpedanceParametersForce Messages
InputJoystickInput, KeyboardInputInput Messages
ClockClock-related messagesClock Messages
MLML inference messagesML Messages
TensorTensor descriptorsTensor Messages

Import

All standard messages are available via the prelude:

// simplified
use horus::prelude::*;

// Now you can use: CmdVel, Imu, Odometry, LaserScan, Twist, Pose2D, etc.
let cmd = CmdVel::new(1.0, 0.0);
let imu = Imu::new();

Custom Messages

Need a type that doesn't exist? Use the message! macro:

// simplified
use horus::prelude::*;

message! {
    MotorStatus {
        rpm: f32,
        current_amps: f32,
        temperature_c: f32,
        fault_code: u32,
    }
}

let topic = Topic::<MotorStatus>::new("motor.status")?;

See Macros for the full message! syntax.

Fixed-Size Types and Zero-Copy

All standard messages are #[repr(C)], Copy, and fixed-size — they transfer through shared memory without serialization. Variable-length data (images, point clouds, tensors) use pool-backed allocation instead.


See Also