Files
Denso/srcs/RobotNet10/RobotApp/RobotNet10.RobotApp/Devices/ILidar.cs
2026-07-03 16:31:37 +07:00

94 lines
2.9 KiB
C#

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