algorithm.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef __TEST_H__
  2. #define __TEST_H__
  3. #include "rtthread.h"
  4. #include "application.h"
  5. #include <stdbool.h>
  6. #include <string.h>
  7. #include "KelmanFilter.h"
  8. #define FRONT_OBSTACLE_OUT (0xA01310) //4D前避障雷达点云信息 Can ID
  9. #define FRONT_OBSTACLE_CAN_ID (0xA01302) //4D前避障雷达障碍信息 Can ID
  10. #define FRONT_TERRAIN_CAN_ID (0xA01305) //4D前避障雷达彷地信息 Can ID
  11. #define REAR_OBSTACLE_OUT (0xB01310) //4D后避障雷达点云信息 Can ID
  12. #define REAR_OBSTACLE_CAN_ID (0xB01302) //4D后避障雷达障碍信息 Can ID
  13. #define REAR_TERRAIN_CAN_ID (0xB01305) //4D后避障雷达彷地信息 Can ID
  14. #define LEFT_OBSTACLE_CAN_ID (0xC01302) //4D左避障雷达障碍信息 Can ID
  15. #define RIGHT_OBSTACLE_CAN_ID (0xD01302) //4D后避障雷达障碍信息 Can ID
  16. typedef struct
  17. {
  18. float x;
  19. float y;
  20. float z;
  21. uint32_t pow;
  22. } radar_point;
  23. typedef struct
  24. {
  25. float q[4]; // 由飞控传递 当前姿态
  26. float p[3]; // 当前坐标
  27. uint32_t vaild_point_num; // 有效点个数
  28. uint32_t ValidFlag; // 有效标志位
  29. radar_point vaild_point_arr[100]; // 有效点云
  30. } Point_Cloud_Frame;
  31. typedef struct
  32. {
  33. radar_point all_point[1500];
  34. uint32_t vaild_len;
  35. } FinalPointCloutStruct;
  36. typedef struct
  37. {
  38. float x, y, z;
  39. int valid;
  40. } RegionResult;
  41. //发送雷达点云原始数据至PMU
  42. struct Can2PMU_Data
  43. {
  44. uint8_t head[7]; //帧头
  45. uint8_t data[1280]; //点云数据
  46. };
  47. #pragma pack(push, 1) // 确保1字节紧凑对齐
  48. typedef struct
  49. {
  50. uint8_t eof : 1; // bit0: 结束标志
  51. uint8_t sof : 1; // bit1: 起始标志
  52. uint8_t seq : 6; // bit2-7: 帧序号(可表示1-63)
  53. } FrameFlag;
  54. #pragma pack(pop)
  55. typedef union
  56. {
  57. FrameFlag flags;
  58. uint8_t u8flag;
  59. } FlagUnion;
  60. void ClusterTask( void *parameter );
  61. void NodeStatusTask( void *parameter );
  62. void parse_radar_response( const uint8_t *usart_data, uint32_t len ) ;
  63. void PointCloudFilter( void ) ;
  64. void PointCloudConvert( void );
  65. void TerrainPredict ( void );
  66. void quat_rotate_point( float q_new[4], float q_old[4], float p_enu_new[3], float p_enu_old[3], float x, float y, float z, float * xyz );
  67. void quat_rotate_point_filter( float q_new[4], float q_old[4], float x, float y, float z, float * xyz );
  68. bool PowerFilter( float fRangeValue, uint32_t uPowerValue );
  69. void DetectObstacle_ByDynamicY( void );
  70. uint8_t calculate_flag( int index, int pack, FlagUnion* _f );
  71. void TerrainPointsSegmentation (void);
  72. void TerrianPointsFilter (void );
  73. //void verify_radar_crc(void);
  74. #endif