Tracking & Perception Messages (C++)
Object tracking, landmarks, segmentation, and point cloud field types.
Tracking
| Type | Key Fields | Use Case |
|---|
TrackedObject | track_id, position[3], velocity[3], confidence, age | Multi-object tracking |
TrackingHeader | frame_count, active_tracks | Tracker metadata |
horus::msg::TrackedObject obj{};
obj.track_id = 42;
obj.position[0] = 1.5; // x meters
obj.position[1] = 0.3; // y
obj.position[2] = 0.0; // z
obj.velocity[0] = 0.5; // vx m/s
obj.confidence = 0.92f;
obj.age = 15; // frames since first detection
Landmarks
| Type | Key Fields | Use Case |
|---|
Landmark | id, x, y, covariance[4] | 2D SLAM landmark |
Landmark3D | x, y, z, visibility, index | Pose estimation (packed) |
LandmarkArray | num_landmarks, confidence, bbox_* | Body/hand pose output |
horus::msg::LandmarkArray pose{};
pose.num_landmarks = 21; // hand keypoints
pose.dimension = 3; // 3D
pose.confidence = 0.85f;
pose.bbox_x = 100.0f; // bounding box
pose.bbox_y = 200.0f;
pose.bbox_width = 80.0f;
pose.bbox_height = 120.0f;
Segmentation
horus::msg::SegmentationMask mask{};
mask.width = 640;
mask.height = 480;
mask.num_classes = 21; // COCO classes
mask.mask_type = 0; // 0=semantic, 1=instance
// Pixel data stored separately via Image/TensorPool
Point Cloud Fields
horus::msg::PointField field{};
std::strncpy(reinterpret_cast<char*>(field.name), "x", 15);
field.offset = 0;
field.datatype = 0; // 0=f32
field.count = 1;
Clock & Time
| Type | Key Fields | Use Case |
|---|
Clock | nanoseconds, source | Time synchronization |
TimeReference | time_ref_ns, source[32] | External time source |
| Type | Key Fields | Use Case |
|---|
KeyboardInput | key_code, pressed, modifiers | Keyboard teleop |
JoystickInput | axes[8], buttons[16], num_axes/buttons | Gamepad control |
AudioFrame | samples[4096], sample_rate, channels | Audio processing |
See Also