Hybrid_GridNode.h 2.0 KB

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