using CartographerSharp.Sensor; namespace RobotNet10.RobotApp.SLAM.Cartographer.Helpers; /// /// Point cloud data in both base_link and sensor (lidar) frame. /// Pipeline produces both so Cartographer gets base_link for trajectory and MCL gets sensor_frame without re-transform. /// public sealed class RangeDataPayload { /// Point cloud in base_link (robot) frame — for Cartographer ITrajectoryBuilder.AddSensorData. public TimedPointCloudData BaseLink { get; set; } /// Point cloud in sensor (lidar) frame — for MCL OnScan (beam angles relative to sensor). SensorPipeline always produces this. public TimedPointCloudData SensorFrame { get; set; } /// Actual minimum angle (radians) of filtered point cloud in sensor frame — for MCL scan conversion. public double ActualAngleMin { get; set; } /// Actual maximum angle (radians) of filtered point cloud in sensor frame — for MCL scan conversion. public double ActualAngleMax { get; set; } /// Actual angle increment (radians) from original scan — for MCL scan conversion. public double ActualAngleIncrement { get; set; } }