Landmark3D mirrors a Rust #[repr(C, packed)] type, so the C++ declaration carries __attribute__((packed)): it is 20 bytes with alignment 1, not 24. Read and write its members by value rather than taking pointers or references to them.
horus::msg::SegmentationMask mask{};
mask.width = 640;
mask.height = 480;
mask.num_classes = 21; // number of semantic classes
mask.mask_type = 0; // 0=semantic, 1=instance, 2=panoptic
// Pixel data stored separately via Image/TensorPool
Point Cloud Fields & Plane Detection
PointField and PlaneDetection have no C++ struct. The Rust types are repr(Rust) (no guaranteed field order or offsets), so <horus/msg/detection.hpp> deliberately does not declare them and no HORUS_TOPIC_IMPL is registered for them — see the "INTENTIONALLY NOT DECLARED" note at the bottom of that header. Use the pool-backed horus::PointCloud in <horus/pool.hpp> for point data instead.