导航中的robot footprint和各种radius

在导航运行和路径规划中,robot的footprint非常重要,地图上它表现出robot的形状,注意和base_footprint坐标系进行区分。

需要了解几个概念;

costmap基本参数:文件turtlebot_navigation/param/costmap_common_params.yaml

1.inflation_radius:膨胀半径,robot的中心点不能接近以障碍网格为中心,inflation_radius为半径的区域,否则就可能会发生碰撞。简单来说就是以把robot看成一个点,为了不发生碰撞,障碍物相应就膨胀。

2.robot_radius: 当机器人为圆形时,半径的大小,kobuki是0.18m

3.footprint: [[x0, y0], [x1, y1], ... [xn, yn]] :当机器人非原型时,先找机器人的旋转中心,即两个轮的中心点设置成(0,0),然后确定机器人摆放方向,x,y为每个robot几何型的每条边的每个顶点。将所有顶点都列到其中。就完成了robot的footprint。

local costmap参数:文件turtlebot_navigation/param/local_costmap_params.yaml

1.inscribed_radius:robot旋转一圈,map上一直被robot覆盖没有露出的圆形的半径。还是有点复杂,举例来说,有一块白色画板,将robot放上去,然后将画板中除robot部分图成红色,再然后旋转robot一个很小的角度,再将露出的白色画板图成红色,重复此过程直到robot旋转360度,拿开robot,画板上会剩下白色的圆,这个圆半径就是。

2.circumscribed_radius:旋转一圈,map上被robot覆盖过圆形半径,也是robot几何型最远顶点到中心的最大距离。

这两个参数例子中没有设置,可以自己添加上去。默认是0.375和0.4

注意

1.robot为圆形时,旋转的中心点不一定是圆心,旋转的中心点是轴中心。

总结:

因为地图是2d的,一个平面,而障碍都有起伏,所以inflation_radius是从障碍方面考虑,robot扫描不到但能影响到导航的障碍最大凸起。circumscribed_radius和inscribed_radius从robot自身角度考虑,有可能手臂伸出时影响导航。

robot_radius和footprint用来确定robot在map上所占区域的。

如果robot和障碍都是竖直的,没有凸起,那么inflation_radius = circumscribed_radius;

你可能感兴趣的:(ROS)