在导航运行和路径规划中,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;
机器人导航中,footprint定义了机器人在地图上的形状,包括圆形的robot_radius和非圆形时的顶点坐标。inflation_radius用于防止与障碍物碰撞,将障碍物膨胀扩大。inscribed_radius和circumscribed_radius则分别表示机器人旋转时不露出的最小圆半径和覆盖的最大范围。理解这些参数对于有效路径规划至关重要。
100





