rb_lidar.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef RB_LIDAR_H
  2. #define RB_LIDAR_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include <stdint.h> // 包含标准整数类型
  7. #include <pthread.h> // 用于线程支持
  8. typedef void (*callback_t)(const char* data, int length);
  9. // 配置常量
  10. #define CONFIG_BLOCK_COUNT (16)
  11. #define CONFIG_UDP_BLOCKS (12)
  12. #define FRAME_POINT_COUNT (3600)
  13. #define CONFIG_DEGREE_MAX (36000)
  14. #define SUBPKT_BUF_COUNT (300)
  15. #define UDP_BUF_SIZE (1206)
  16. // 结构体对齐设置
  17. #pragma pack(push)
  18. #pragma pack(1)
  19. // 原始点数据结构
  20. typedef struct {
  21. uint16_t dist_0; // 第一个距离
  22. uint8_t rssi_0; // 第一个RSSI值
  23. uint16_t dist_1; // 第二个距离
  24. uint8_t rssi_1; // 第二个RSSI值
  25. } raw_point_t;
  26. // 子包结构
  27. typedef struct {
  28. uint16_t header; // 子包头
  29. uint16_t azimuth; // 方位角
  30. raw_point_t point[CONFIG_BLOCK_COUNT]; // 点数据数组
  31. } sub_packet_t;
  32. // UDP包结构
  33. typedef struct {
  34. sub_packet_t sub_packet[CONFIG_UDP_BLOCKS]; // 子包数组
  35. uint32_t timestamp; // 时间戳
  36. uint16_t factory_byte; // 工厂字节
  37. } udp_packet_t;
  38. // 点数据结构
  39. typedef struct {
  40. uint16_t azimuth; // 方位角
  41. uint16_t dist; // 距离
  42. uint16_t rssi; // RSSI值
  43. uint32_t timestamp; // 时间戳
  44. } point_data_t;
  45. // 帧数据结构
  46. typedef struct {
  47. point_data_t pointcloud[FRAME_POINT_COUNT]; // 深度数据点云
  48. } frame_data_t;
  49. #pragma pack(pop)
  50. // RBLidar 结构体
  51. typedef struct {
  52. char* ip;
  53. int port;
  54. callback_t callback;
  55. sub_packet_t buffer[2][SUBPKT_BUF_COUNT]; // 双缓冲区
  56. uint32_t timestamps[2][SUBPKT_BUF_COUNT];//存储时间戳的数组
  57. int current; // 当前缓冲区索引
  58. int valid_count[2]; // 每个缓冲区中有效数据的数量
  59. pthread_mutex_t mutex;
  60. pthread_cond_t cond;
  61. } RBLidar;
  62. // 创建 RBLidar 实例
  63. RBLidar* rblidar_create(const char* ip, int port, callback_t callback);
  64. // 释放 RBLidar 实例
  65. void rblidar_destroy(RBLidar* lidar);
  66. #ifdef __cplusplus
  67. }
  68. #endif
  69. #endif // RB_LIDAR_H