ROS解读17.Move_ba导航框架
1.前⾔
本节课程重点理解Move_Ba 的整个框架,move_ba 包提供了⼀个动作的实现(参见actionlib 包),在地图上给定⼀个⽬标,move_ba 将会规划出路径并使机器⼈避开障碍物从⽽到达⽬标。move_ba 节点其实相当于ros navigation 整体框架的⼀个指挥官,它统筹了各个navigation 节点发过来的信息,在下⾯的系统框图中,浅蓝⾊的项⽬是必须要输⼊的,之前的⼯作已经完成了这些项⽬的需求。
move_ba 节点将全局导航和局部导航链接在⼀起以完成其导航任务。全局导航⽤于建⽴到地图上最终⽬标或⼀个远距离⽬标的路径,局部导航⽤于建⽴到近距离⽬标和为了临时躲避障碍物的路径,例如机
器⼈四周⼀个4x4 m 的⽅形窗⼝。
2.配置⽂件
move_ba 节点⽀持任何遵循nav_core 包中指定的nav_core ::
BaGlobalPlanner 接⼝的全局规划以及任何遵循nav_core 包中指定的nav_core :: BaLocalPlanner 接⼝的局部规划。move_ba 节点还维护两个代价地图,分别为全局代价地图和局部代价地图。在运⾏move_ba 节点之前需要五个配置⽂件,这些⽂建定义了⼀系列相关参数,包括越过障碍物的代价、机器⼈的半径、路劲规划时的需要考虑未来多长的路,机器⼈的的最⼤速度等等,五个配置⽂件分别如下:
3.全局路径规划
在ROS 的导航中,⾸先会通过全局路径规划,计算出机器⼈到⽬标位置的全局路线。这⼀功能是navf指数函数练习题
n 这个包实现的。navfn 通过Dijkstra 最优路径的算法,计算costmap 上的最⼩花费路径,作为机器⼈的全局路线。
4.局部路径规划
本地的实时规划是利⽤ba_local_planner 包实现的。该包使⽤
Trajectory
第⼗七课Move_ba 导航框架
Rollout 和Dynamic Window approaches算法计算机器⼈每个周期内应该⾏驶的速度和⾓度(dx,dy,dtheta velocities)。ba_local_planner这个包通过地图数据,通过算法搜索到达⽬标的多条路经,利⽤⼀些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和⾓度。
其中,Trajectory Rollout 和DWA算法的主要思路如下:(之前的课程已经有介绍了)
(1)采样机器⼈当前的状态(dx,dy,dtheta);
(2)针对每个采样的速度,计算机器⼈以该速度⾏驶⼀段时间后的状态,得出⼀条⾏驶的路线。
自艾自怨(3)利⽤⼀些评价标准为多条路线打分。
(4)根据打分,选择最优路径。
(5)重复上⾯过程。
5.插件的⼯作⽅式
如果我们想按照⾃⼰的思路去写global 或者local planner时,该如何做呢?显然ROS有⼀个标准。你必须按照它提供给你的模板去实现你⾃⼰的算法,这些模板就是基类。如果觉得抽象,可以先通过官⽅的⽂档来了解插件是如何⼯作的?
在上图的这个例⼦中,假设我们想使⽤⼀个形状画图模块,ROS的官⽅包中已经有了polygon_interface这个基类,它已经提供了标准的接⼝函数,并且有两个⼦类:矩形插件包rectangle
谜语诗_plugin package 和三⾓形插件包 triangle_plugin package。要想使⽤这两个⼦类你只要在相应⽂件中将它们注册为插件,告诉ROS我将使⽤这两个插件就⾏了。这个图中⼀个关键的中⼼点就是polygon_interface基类。
6.参数配置说明
1>.move_ba_params.yaml
shutdown_costmaps:当move_ba在不活动状态时,是否关掉costmap。
controller_frequency:向底盘控制移动话题cmd_vel发送命令的频率。
太仓南园controller_patience:在空间清理操作执⾏前,控制器花多长时间等有效控制下发。
planner_frequency:全局规划操作的执⾏频率.如果设置为0.0,则全局规划器仅在接收
到新的⽬标点或者局部规划器报告路径堵塞时才会重新执⾏规划操作。
planner_patience:在空间清理操作执⾏前,留给规划器多长时间来找出⼀条有效规划。oscillation_timeout:执⾏修复机制前,允许振荡的时长。
oscillation_distance:来回运动在多⼤距离以上不会被认为是振荡。
ba_local_planner:指定⽤于move_ba的局部规划器名称。
ba_global_planner:指定⽤于move_ba的全局规划器插件名称。
2>.dwa_local_planner_params.yaml
发烧可以喝咖啡吗
acc_lim_x:x⽅向的加速度绝对值
acc_lim_y:y⽅向的加速度绝对值,该值只有全向移动的机器⼈才需配置. acc_lim_th:旋转加速度的绝对值.
max_trans_vel:平移速度最⼤值绝对值
min_trans_vel:平移速度最⼩值的绝对值
max_vel_x:x⽅向最⼤速度的绝对值
min_vel_x:x⽅向最⼩值绝对值,如果为负值表⽰可以后退.
max_vel_y:y⽅向最⼤速度的绝对值.
min_vel_y:y⽅向最⼩速度的绝对值.
max_rot_vel:最⼤旋转速度的绝对值.
min_rot_vel:最⼩旋转速度的绝对值.
yaw_goal_tolerance:到达⽬标点时偏⾏⾓允许的误差,单位弧度.
xy_goal_tolerance:到达⽬标点时,在xy平⾯内与⽬标点的距离误差. sim_time:向前仿真轨迹的时间.
双十一红包口令sim_granularity:步长,轨迹上采样点之间的距离,轨迹上点的密集程度. vx_samples:x⽅向速度空间的采样点数.
vy_samples:y⽅向速度空间采样点数.
vth_samples:旋转⽅向的速度空间采样点数.
controller_frequency:发送给底盘控制移动指令的频率.
path_distance_bias:定义控制器与给定路径接近程度的权重.
goal_distance_bias:定义控制器与局部⽬标点的接近程度的权重.
occdist_scale:定义控制器躲避障碍物的程度.
stop_time_buffer:为防⽌碰撞,机器⼈必须提前停⽌的时间长度.
scaling_speed:启动机器⼈底盘的速度.
max_scaling_factor:最⼤缩放参数.
3>. global_costmap_params.yaml
global_frame:代价地图应该运⾏的坐标系,将选择/map坐标系。
robot_ba_frame:代价地图应该为机器⼈的基座的坐标系。应设为ba_footprint。update_frequency:决定了代价地图更新的频率。数值越⼤, CPU负担会越重。
static_map:是否由map_rver提供的地图服务来进⾏代价地图的初始化。
冰糖柠檬水4>. local_costmap_params.yaml
rolling_window:设置为true意味着当机器⼈移动时,保持机器⼈在本地代价地图中⼼。width: 滑动地图的宽度(单位⽶)。
height: 滑动地图的⾼度(单位⽶)。
resolution: 滑动地图的分辨率。
7.总结
试用期转正本节课程重点介绍了move_ba的整个框架、全局和局部路径规划的插件配置、导航包的参数配置。