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