using RobotNet10.Shared.Sensor; namespace RobotNet10.RobotApp.Devices; /// /// Interface cho thiết bị LiDAR trong robot AGV (common interface for all Lidar brands) /// Không bao gồm các chức năng kết nối vì đã được xử lý trong DeviceBase /// public interface ILidar { // Scan Data Properties (common for all Lidar brands) /// /// Measurement data hiện tại (scan points) - sử dụng LaserScan từ sensor_msgs /// LaserScan? CurrentMeasurementData { get; } /// /// Timestamp của scan data gần nhất /// DateTime? LastScanDataTimestamp { get; } // Device Specifications (common for all Lidar brands) /// /// Góc quét tối thiểu (radian) - góc bắt đầu của phạm vi quét /// double MinAngleRad { get; } /// /// Góc quét tối đa (radian) - góc kết thúc của phạm vi quét /// double MaxAngleRad { get; } /// /// Tầm quét tối thiểu (mét) - khoảng cách gần nhất có thể đo được /// double MinRangeM { get; } /// /// Tầm quét tối đa (mét) - khoảng cách xa nhất có thể đo được /// double MaxRangeM { get; } /// /// Độ phân giải góc (radian) - góc giữa hai điểm scan liên tiếp /// double? AngularResolutionRad { get; } /// /// Tần số quét (Hz) - số lần quét trong một giây /// double? ScanFrequencyHz { get; } /// /// Góc quét tổng (Field of View - FOV) (radian) - tổng góc quét của thiết bị /// double FieldOfViewRad { get; } /// /// Hỗ trợ đo intensity (cường độ phản xạ) hay không /// bool SupportsIntensity { get; } /// /// Độ chính xác đo khoảng cách (mét) - sai số đo khoảng cách /// double? AccuracyM { get; } // Events /// /// Event được kích hoạt khi có dữ liệu scan mới /// event EventHandler? ScanDataReceived; } /// /// EventArgs cho event ScanDataReceived - common structure for all Lidar brands /// public class LidarScanDataEventArgs(DateTime timestamp, LaserScan measurementData) : EventArgs { /// /// Timestamp khi scan data được nhận /// public DateTime Timestamp { get; init; } = timestamp; /// /// Measurement data từ scan (sử dụng LaserScan từ sensor_msgs) /// public LaserScan MeasurementData { get; init; } = measurementData; }