Hybrid_GridNode.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef _HYBRID_GRIDNODE_H_COMBINE
  2. #define _HYBRID_GRIDNODE_H_COMBINE
  3. // 如果两个不同的 cpp 文件都包含了同一个头文件而没有使用 #ifndef,则可能导致:重复定义错误、链接错误、代码膨胀等问题
  4. #include <Eigen/Eigen>
  5. #include <Eigen/Dense> // Eigen 库中的矩阵运算库
  6. #include <vector>
  7. #include <Eigen/Core>
  8. namespace combine_planning_ns
  9. {
  10. #define inf 1 >> 20 // 定义一个宏,宏的名称是 inf, >> 是右移运算符,让inf表示无穷大
  11. // 宏 inf 被定义为 1>>20,即右移运算,将整数1向右移动20位,相当于将二进制数1变成了一个非常大的数,通常表示无穷大或无限大
  12. // struct HybridGridNode;
  13. struct HybridGridNode
  14. {
  15. EIGEN_MAKE_ALIGNED_OPERATOR_NEW // 宏,用于为该结构体启用 Eigen 库的对齐内存分配支持
  16. enum NODE_STATUS // 定义了一个枚举类型 NODE_STATUS,包含了状态节点可能的状态
  17. {
  18. NOT_VISITED = 0, // 未访问
  19. IN_OPENSET = 1, // 在 openset 中
  20. IN_CLOSESET = 2 // 在 closeset 中(作为主节点被扩展过)
  21. };
  22. enum DIRECTION // 定义一个枚举类型 direction 表示状态节点的方向
  23. {
  24. FORWARD = 0, // 向前
  25. BACKWARD = 1, // 向后
  26. NO = 3 // 无方向
  27. };
  28. HybridGridNode(const Eigen::Vector3i &index)
  29. {
  30. grid_index = index;
  31. }
  32. double g_cost = inf;
  33. double f_cost = inf;
  34. int steering_grade = 0; // 节点的转向等级
  35. Eigen::Vector3d state; // 节点坐标(x,y,theta(弧度制))
  36. Eigen::Vector3i grid_index; // 节点索引坐标
  37. HybridGridNode *parent_node = nullptr; // 父节点指针
  38. NODE_STATUS node_status = NOT_VISITED; // 是否被访问,默认是否
  39. DIRECTION direction = NO; // 朝向,默认是无
  40. double reach_time = 0;
  41. HybridGridNode(){};
  42. ~HybridGridNode(){}; // 析构函数
  43. };
  44. typedef HybridGridNode *HybridGridNodePtr; // 命名规律:在变量名后面添加Ptr后缀表示这是一个指针类型
  45. };
  46. #endif