2025年Tare_planner 学习教程(二)

Tare_planner 学习教程(二)Tare planner 学习教程 二 这一教程主要介绍该算法中比较重要的几个模块的知识 主要是由 grid 模块引入的几个重要的内容 在三维空间的体素网格地图的表示中 grid 是一个 3D 网格的最小单元 所有的空间位置都需要表示成一系列的 grid 的组合 同样障碍物信息和三维的显示都也需要用到三维空间网格的表示

大家好,我是讯享网,很高兴认识大家。

Tare_planner 学习教程(二)

这一教程主要介绍该算法中比较重要的几个模块的知识,主要是由grid模块引入的几个重要的内容。在三维空间的体素网格地图的表示中,grid是一个3D网格的最小单元,所有的空间位置都需要表示成一系列的grid的组合。同样障碍物信息和三维的显示都也需要用到三维空间网格的表示。所以本教程主要讲述grid的基础功能和用其表示的地图信息。

1. Class Grid的介绍

Class Grid是一个用来表示是体素网格特征的基础类,其内容的成员函数较为容易,但是为了方便后续的开发,代码引入了大量的重构函数和模板函数,可能对大家的阅读源码造成了很大的困难。

1.1 class grid 的私有变量

int dimension_; // 表示体素网格的维度,默认为三维,dimension_ = 3; int cell_number_; // 表示当前体素网格的个数 Eigen::Vector3d origin_; // 表示当前体素网格的起点 Eigen::Vector3i size_; // 表示当前体素网格x,y,z的大小 Eigen::Vector3d resolution_; // 表示当前体素网格x,y,z的分辨率 Eigen::Vector3d resolution_inv_; // 表示当前体素网格x,y,z的分辨率的倒数,相当于一个1m体素网格的数量 std::vector<_T> cells_; // 每个体素网格的内容 std::vector<Eigen::Vector3i> subs_; // 每个体素网格的序号 

讯享网

1.2 Grid的构造函数

讯享网Grid(const Eigen::Vector3i& size, _T init_value, const Eigen::Vector3d& origin= Eigen::Vector3D(0,0,0), const Eigen::Vector3d& resolution = Eigen::Vector3d(1,1,1), int dimension = 3){ 
   } 

上述构造函数中,初始化了grid的size、origin、resolution和dimension,然后求解了每个维度信息上的resolution_inv、cell_number_,初始化了cells_和subs_。

1.3 Grid的一些基本成员函数介绍

函数名称 函数说明
GetCellNumber() 返回当前体素网格的数量
GetSize() 返回当前体素网格x,y,z的大小
GetOrigin() 返回当前体素网格的起点位置
SetOrigin() 设置当前体素网格的起点位置
SetResolution() 设置当前体素网格的分辨率
GetResolution() 返回当前体素网格的分辨率
GetResolution_inv() 返回当前体素网格的分辨率的倒数

1.4 Grid的一些重构成员函数

函数名称 函数说明
InRange() 返回输入的参数是否在当前的体素网格内
Ind2Sub() 将体素网格的序号转换为体素网格中的位置编号
Sub2Ind() 将体素网格的位置编号转换为体素网格的序号
Sub2Pos() 根据体素网格的位置编号转换为体素网格的位置
Ind2Pos() 根据体素网格的序号转换为体素网格的位置
Pos2Ind() 根据体素网格的位置返回体素网格的序号
Pos2Sub() 根据体素网格的位置返回体素网格的位置编号

1.5 Grid关于cell操作的成员函数

函数名称 函数说明
GetCell() 返回体素网格内的一个最小单元
GetCellValue() 返回体素网格内的一个最小单元的值
SetCellValue() 设置体素网格内的一个最小单元

tips:
其实GetCell()和GetCellValue()返回的值一样,但是GetCell()返回的是引用,可以用来修改Cell的值


讯享网

1.6 关于Ind2Sub的函数解析

由于是三维体素网格,x,y,z方向上有固定的size,所以先用ind / (size.x() * size.y())得到z轴的位置,然后用ind减去(size.z() * size.x() * size.y())后得到平面的x和y的大小,然后除以size.y()得到y轴的坐标,最后除以size.x()取余数得到x轴的坐标。

2.Class RollingGrid的介绍

RollingGrid类主要处理Grid的翻滚,主要是由于机器人位置和雷达的坐标系不统一带入的该问题,所以这部分主要是完成坐标系的统一。

2.1 Class RollingGrid的私有变量

Eigen::Vector3i size_; // 体素网格的大小 std::unique_ptr<grid_ns::Grid<int>> grid0_; // 体素网格0 std::unique_ptr<grid_ns::Grid<int>> grid1_; // 体素网格1 std::vector<int> updated_indices_; // 更新指数 std::vector<int> array_ind_to_ind_; // 指数的变换 bool which_grid_; // 使用哪个体素网格的标志 

2.2 RollingGrid的构造函数

讯享网RollingGrid(const Eigen::Vector3i& size); 

RollingGrid的构造函数主要是初始化了array_ind_to_ind_、grid0_、grid1_、size_等变量

2.3 RollingGrid的基本成员函数

函数名称 函数说明
InRange() 返回当前编号是不是在体素网格内
Ind2Sub() 将体素网格的序号转换为体素网格中的位置编号
Sub2Ind() 将体素网格的位置编号转换为体素网格的序号
GetArrayInd() 返回grid的sub的值
GetInd() 返回array_ind_to_ind_的值

2.4 RollingGrid的主要成员函数

函数名称 函数说明
Roll() 完成grid的内向翻转和array_ind_to_ind_的填充
GetUpdatedIndices() 更新了Indices的值,主要是记录翻滚之后的grid哪些ind发生了变化
GetRolledOutIndices() 对于grid进行了外向翻滚,外向翻过是以翻滚线和终点为轴,向右手侧进行翻滚
GetUpdatedArrayIndices() 更新了array_indices的值
GetFromIdx() 返回翻滚后的相应位置的Indices的值
RollHelper() 帮助进行翻滚轴的判断
GetRolledInIndices() 对于grid进行了内向翻滚,外向翻过是以翻滚线和终点为轴,向左手侧进行翻滚
GetRolledOutIndices() 没有相应的定义(暂时不清楚具体的)
GetIndices() 返回了翻滚后Indices的值
小讯
上一篇 2025-02-22 20:49
下一篇 2025-02-24 20:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/62447.html