路径规划参数解析(一)——move_base参数解析

ROS系统的路径规划由move_base统筹,在move_base中集成了代价地图模块costmap_2d,全局规划器(此处使用global_planner/GlobalPlanner)和局部规划器(dwa_local_planner/DWAPlannerROS),其中costmap_2d分别衍生了全局代价地图和局部代价地图,此外还有恢复模块recovery_behaviors,采用默认值即可。

因此move_base实际需要设置六个部分的参数

  1. move_base自身参数
  2. 全局代价地图(global_costmap)
  3. 局部代价地图(local_costmap)
  4. 全局规划器(global_panner)
  5. 局部规划器(local_planner)
  6. recovery_behaviors(使用默认值先不讲述)

以上参数在move_base节点加载时全部加载,用以下参数文件格式

<launch>
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
	<rosparam file="$(find myrobot)/param/navigation_omi/omi/costmap_common_params.yaml" command="load" ns="global_costmap" />
	<rosparam file="$(find myrobot)/param/navigation_omi/omi/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find myrobot)/param/navigation_omi/local_costmap_params.yaml" command="load" />
        <rosparam file="$(find myrobot)/param/navigation_omi/global_costmap_params.yaml" command="load" />
	<rosparam file="$(find myrobot)/param/navigation_omi/omi/base_local_planner_params.yaml" command="load" />
	<rosparam file="$(find myrobot)/param/navigation_omi/omi/base_global_planner_params.yaml" command="load" />
        <rosparam file="$(find myrobot)/param/navigation_omi/move_base_params.yaml" command="load" />
	<remap from="/cmd_vel" to="/raw_cmd_vel"/>
  </node>
</launch>

 

PART1 move_base参数

move_base自身的参数也是为了控制其他模块,有着相应的关联性,下面逐一解析

1.1 ~base_global_planner

 (string, default: "navfn/NavfnROS" For 1.1+ series)

全局规划器,用于规划最优路径,但是默认值中没有没有实现A*算法的全局规划,在版本迭代优化后通常设置为global_planner/GlobalPlanner,同时可以设置A*或者D*

1.2 ~base_local_planner 

(string, default: "base_local_planner/TrajectoryPlannerROS" For 1.1+ series)

局部规划器,用于运动过程中的动态避障,默认值现在通常设置为dwa_local_planner/DWAPlannerROS

1.3 ~recovery_behaviors 

(list, default: [{name: conservative_reset, type: clear_costmap_recovery/ClearCostmapRecovery}, {name: rotate_recovery, type: rotate_recovery/RotateRecovery}, {name: aggressive_reset, type: clear_costmap_recovery/ClearCostmapRecovery}] For 1.1+ series)

恢复模块,一个是恢复行为rotate_recovery,一个是地图清理clear_costmap_recovery,通常使用默认值即可

注意:当全局路径规划无法到达目标点时,才会执行这个恢复模块

1.4 ~controller_frequency 

(double, default: 20.0)

向机器人底盘发送的控制速度的频率,这个速度由base_local_planner计算

1.5 ~planner_patience

 (double, default: 5.0)

进行全局规划的时间间隔,如果超时则认为规划失败

1.6 ~controller_patience

 (double, default: 15.0)

等待控制速度的时间间隔,如果控制速度的发布超过设置时间,则认为局部路径规划失败

1.7 ~conservative_reset_dist 

(double, default: 3.0)

在恢复模块执行后,重置的代价地图范围

1.8 ~recovery_behavior_enabled 

(bool, default: true)

是否使用恢复模块,默认值为true

1.9 ~clearing_rotation_allowed

 (bool, default: true)

是否允许旋转恢复行为,默认为true

1.10 ~shutdown_costmaps 

(bool, default: false)

当move_base不活动时,是否关闭代价地图的加载

1.11 ~oscillation_timeout

 (double, default: 0.0)

在执行恢复行为之前允许振荡的时间(秒)。

1.12 ~oscillation_distance

 (double, default: 0.5)

机器人必须移动多远(以米计)才能被视为不摆动。

如果出现摆动则说明全局规划失败,那么将在超时后执行恢复模块。

1.13 ~planner_frequency 

(double, default: 0.0)

全局规划器的执行频率,如果为0则只有出现新的目标点,才会重新规划

1.14 ~max_planning_retries

 (int32_t, default: -1)

在执行恢复行为之前允许计划重试的次数.默认为-1,表示全局规划失败后立即执行恢复模块。

PART2 全局代价地图参数

全局代价地图和局部代价地图都衍生于costmap_2d功能包,参数设置也是一样的,但是考虑到路径规划和避障的职能不同,可以采用不同的参数策略。

全局代价地图可以将膨胀半径设置更大,障碍物系数设置更高,从而使得路径规划中,能够得到远离障碍物的规划路径。而在局部规划中,为了避免避障陷入困境,可以设置小一点的膨胀半径和障碍物系数,使得机器人能够绕过障碍物。

2.1 ~<name>/plugins

 (sequence, default: pre-Hydro behavior)

地图序列,每层一个。每个地图都是一个包含名称和类型字段的字典。

2.2 ~<name>/global_frame 

(string, default: "/map")

代价地图的世界坐标系

2.3 ~<name>/robot_base_frame 

(string, default: "base_link")

机器人底座的局部坐标系

2.4 ~<name>/transform_tolerance 

(double, default: 0.2)

等待坐标变换发布信息的超时时间

2.5 ~<name>/update_frequency 

(double, default: 5.0)

代价地图的更新频率

2.6 ~<name>/publish_frequency 

(double, default: 0.0)

代价地图的发布频率

2.7 ~<name>/rolling_window 

(bool, default: false)

是否使用动态窗口,默认为false,在静态的全局地图中,地图不会变化

2.8 ~<name>/always_send_full_costmap 

(bool, default: false)

是否发布全部代价地图,默认false,只会发布部分的代价地图,加载全图耗费计算资源

2.9 下面为设置代价地图的尺寸和精度参数

~<name>/width (int, default: 10)

  • 代价地图宽度

~<name>/height (int, default: 10)

  • 代价地图高度

~<name>/resolution (double, default: 0.05)

  • 代价地图精度,即每个网格的尺寸

~<name>/origin_x (double, default: 0.0)

  • 代价地图原点x坐标在世界坐标系中的位置

~<name>/origin_y (double, default: 0.0)

  • 代价地图原点y坐标在世界坐标系中的位置

2.10 全局坐标到机器人底座的变换信息,可由AMCL等发布

2.11 代价地图包含多个地图层

  1. Static Map Layer
  2. Obstacle Map Layer
  3. Inflation Layer
  4. Other Layers

下面举例说明,在Inflation Layer中需要设置两个计算障碍物代价值的参数

~<name>/inflation_radius (double, default: 0.55)

膨胀半径,扩展在碰撞区域以外的代价区域,使得机器人规划路径避开障碍物

~<name>/cost_scaling_factor (double, default: 10.0)

代价比例系数,越大则代价值越小

公式如下

exp(-1.0 * cost_scaling_factor * (distance_from_obstacle - inscribed_radius)) 

* (costmap_2d::INSCRIBED_INFLATED_OBSTACLE - 1)

其中costmap_2d::INSCRIBED_INFLATED_OBSTACLE=254

也就是说代价值最大为253

PART3 局部代价地图参数

参数设置与全局相似,只是参数的策略上可能会不同

PART4 全局规划器参数

4.1 ~<name>/allow_unknown

 (bool, default: true)

是否允许规划路径穿越未知区域

4.2 ~<name>/default_tolerance 

(double, default: 0.0)

路径规划的终点与目标点的偏差距离

4.3 ~<name>/visualize_potential 

(bool, default: false)

是否允许发布点云表达的代价趋势

4.4 ~<name>/use_dijkstra 

(bool, default: true)

是否使用D*全局规划算法,默认为true,如果为false,则使用A*算法

4.5 ~<name>/use_quadratic 

(bool, default: true)

是否使用二次逼近的趋势,默认为true,否则使用简单的线性方法

4.6 ~<name>/use_grid_path 

(bool, default: false)

是否沿着网格规划路径,默认为false,false时使用最速下降法计算路径

4.7 ~<name>/old_navfn_behavior 

(bool, default: false)

是否使用旧版本导航功能,默认false

4.8 ~<name>/lethal_cost 

(int, default: 253)

最高的代价值,默认253

4.9 ~<name>/neutral_cost 

(int, default: 50)

中性代价系数

4.10 ~<name>/cost_factor 

(double, default: 3.)

占用网格的系数

4.11 ~<name>/publish_potential 

(bool, default: True)

是否发布趋势,默认为true

4.12 ~<name>/orientation_mode 

(int, default: 0)

方向设置,默认0,采用默认坐标系

4.13 ~<name>/orientation_window_size 

(int, default: 1)

方向窗口大小,默认为1

PART5 局部规划器参数

局部规划器使用局部代价地图,实现在全局规划路径上的避障功能

5.1 速度参数配置

~<name>/acc_lim_x (double, default: 2.5)

  • x轴方向最高加速度

~<name>/acc_lim_y (double, default: 2.5)

  • y轴方向最高加速度

~<name>/acc_lim_th (double, default: 3.2)

  • 最高旋转加速度

~<name>/max_trans_vel (double, default: 0.55)

  • 最大线速度

~<name>/min_trans_vel (double, default: 0.1)

  • 最小线速度

~<name>/max_vel_x (double, default: 0.55)

  • 最大x轴方向线速度

~<name>/min_vel_x (double, default: 0.0)

  • 最小x轴方向线速度

~<name>/max_vel_y (double, default: 0.1)

  • 最大y轴方向线速度

~<name>/min_vel_y (double, default: -0.1)

  • 最小y轴方向线速度

~<name>/max_rot_vel (double, default: 1.0)

  • 最大旋转角速度

~<name>/min_rot_vel (double, default: 0.4)

  • 最小旋转角速度

5.2 目标误差参数

~<name>/yaw_goal_tolerance (double, default: 0.05)

  • 路径规划到达点与目标点的角度允许偏差

~<name>/xy_goal_tolerance (double, default: 0.10)

  • 路径规划到达点与目标点的距离允许偏差

~<name>/latch_xy_goal_tolerance (bool, default: false)

  • 通常不使用

5.3 前向仿真系数

~<name>/sim_time (double, default: 1.7)

  • 仿真时间,仿真距离=sim_time*vel

~<name>/sim_granularity (double, default: 0.025)

  • 轨迹的碰撞检测距离

~<name>/vx_samples (integer, default: 3)

  • x轴方向速度采样数量

~<name>/vy_samples (integer, default: 10)

  • y轴方向速度采样数量

~<name>/vth_samples (integer, default: 20)

  • 角速度采样数量

~<name>/controller_frequency (double, default: 20.0)

  • 发布控制速度的频率

5.4 轨迹评分参数

~<name>/path_distance_bias (double, default: 32.0)

  • 局部规划路径与全局路径保持一致的权重系数

~<name>/goal_distance_bias (double, default: 24.0)

  • 无论从什么路径以多大权重尝试到达目标点,增大后于全局规划路径一致性降低

~<name>/occdist_scale (double, default: 0.01)

  • 权衡机器人以多大的权重躲避障碍物。该值过大会导致机器人陷入困境

~<name>/forward_point_distance (double, default: 0.325)

  • 将机器人与目标点连线并延长forward_point_distance距离作为一个评分点

~<name>/stop_time_buffer (double, default: 0.2)

  • 为防止碰撞,机器人必须提前停止的时间长度

~<name>/scaling_speed (double, default: 0.25)

  • 开始缩放机器人足迹时的速度的绝对值,单位为m/s

~<name>/max_scaling_factor (double, default: 0.2)

  • 最大缩放因子

~<name>/publish_cost_grid (bool, default: false)

  • 是否发布规划器在规划路径时的代价网格.如果设置为true,那么就会在~/cost_cloud话题上发布sensor_msgs/PointCloud2类型消息

5.5 避免振荡参数

~<name>/oscillation_reset_dist (double, default: 0.05)

机器人运动多远距离才会重置振荡标记

PART6 总结

以上为move_base各个模块的参数设置说明,针对部分官网手册说明不清楚的参数,根据网友对源码的分析和工程检验,进行了更为具体的补充说明

以上的参数说明只是一个概念上的介绍,具体到导航中各个参数对导航效果的影响,需要工程经验的积累,参数的设置和计算机性能、障碍物尺寸、传感器探测距离等因素息息相关

例如在局部路径规划中,仿真时间sim_time如果设置为4s,普通计算机无法负担如此高的性能耗费,发布速度controller_frequency将会大大降低

 

  • 32
    点赞
  • 207
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值