没有合适的资源?快使用搜索试试~ 我知道了~
首页机器人操作系统ROS之调参手册
资源详情
资源评论
资源推荐

ROS 导航功能调优指南
∗
原作:郑开宇
†
译作:罗辉武
‡
版本:0.01
日期:2019 年 06 月 19 日
§
摘 要
ROS 导航功能包用于实现移动机器人可靠移动。ROS 导航功能包通过处理里程数据、传
感器数据和环境地图数据,为机器人运动生成一条安全的路径。最大限度地优化导航功能包
的性能需要对相关参数进行调整,且调参这项工作并不像表面上的那么简单。对其中的概念
和推理不熟悉的人很大概率会采用随机尝试的策略,无形中浪费了大量时间。
本文旨在通过调整导航参数的过程指导读者。当读者在设置关键参数的时候需要解答
“如何设置”以及“为什么这么设置”这些疑问时,本文可以作为一份参考材料。本文假设读
者已对导航功能包进行了基本的安装设置,并准备对其进行优化。本文亦是我使用 ROS 导
航功能包进行工作时的一份工作总结。
目录
1 Velocity and Acceleration 2
1.1 To obtain maximum velocity . . . . . . 2
1.2 To obtain maximum acceleration . . . . 2
1.3 Setting minimum values . . . . . . . . 3
1.4 Velocity in x, y direction . . . . . . . . 3
2 Global Planner 3
2.1 Global Planner Selection . . . . . . . . 3
2.1.1 carrot_planner . . . . . . . . . 3
2.1.2 navfn and global_planner . . . . 3
2.2 Global Planner Parameters . . . . . . . 3
3 Local Planner Selection 6
3.1 DWA Local Planner . . . . . . . . . . . 6
3.1.1 DWA algor ithm . . . . . . . . . 6
3.1.2 DWA Local Planner : Forward
Simulation . . . . . . . . . . . 6
3.1.3 DWA Local Planner: Trajac-
tory Scoring . . . . . . . . . . 7
3.1.4 DWA Local Planner: Other Pa-
rameters . . . . . . . . . . . . . 8
4 Costmap Parameters 8
4.1 footprint . . . . . . . . . . . . . . . . . 9
4.2 inflation . . . . . . . . . . . . . . . . . 10
∗
本文是 “ROS Navigation Tuning Guide’’ 的中文翻译。英文原版:http://kaiyuzheng.me/documents/papers/ros_navguide.pdf
†
Email: kaiyu_zheng [at] brown [dot] edu
‡
Email: huiwu.luo@aliyun.com
§
更新:2019 年 04 月 08 日 (增加了 amcl 的内容)
1

4.3 costmap resolution . . . . . . . . . . . 10
4.4 obstacle layer and voxel layer . . . . . . 11
5 AMCL 13
5.1 Header in LaserScan messages . . . . 13
5.2 Parameters for measurement and mo-
tion models . . . . . . . . . . . . . . . 15
5.3 Translation of the laser scanner . . . . . 16
6 Recovery Behaviors 16
7 Dynamic Reconfigure 17
8 Problems 18
1 速度和加速度
本节涉及同步驱动 (synchro-drive) 机器人。机器人的动力学特征 (例如,机器人的速度和加速度) 对
于动态窗口法 (Dynamic Window Approach, DWA) 和定时弹性带 (Timed Elastic Band, TEB) 这两种局部规
划器是必不可少的内容。在 ROS 的导航功能包中,局部规划器接收里程消息 (“ odom " 话题),输出控
制机器人运动的速度指令 (“ cmd_vel ”话题)。
速度和加速度的最大/最小值是移动基座的两个基本参数。正确设置这两个数值对优化局部规划器
的移动行为帮助非常大。在 ROS 的导航中,我们需要知道平移和旋转的速度及加速度。
1.1 获取最大速度
一般可以参考你的移动基座的手册。例如,SCITOS G5 的最大速度为 1.4 m/s1。在 ROS 中,你还
可以订阅 odom 话题以获取当前里程信息。如果你能手工控制机器人(例如使用操纵杆),则你可以尝
试向前移动直到它的速度值达到常数,然后回显 (echo) 里程数据。
平移速度 (m/s) 是机器人沿直线移动时的速度。获取其最大值的方式与上面获取最大速度的方式相
同。旋转速度(rad/s)等效于角速度; 它的最大值是机器人在原地位置旋转时的角速度。为获取最大旋
转速度,我们可以通过操纵杆控制机器人,在机器人的速度达到恒定值后将机器人旋转 360 度,并对此
次运动进行计时。
为安全起见,我们倾向于将最大平移速度和旋转速度设置为低于其实际最大值。
1.2 获取最大加速度
若您的手册没有直接告诉您该值大小,可通过很多方法测量您的移动基座的最大加速度。
在 ROS 中,类似地,我们可以回显包含时间戳的里程数据,记下机器人达到最大平移速度时所花
的时间(t
i
)。之后我们利用里程计的位置和速度信息 ( nav_msgs/Odometry 消息) 计算此过程中的加速
度。多做几条不同的路径,计算其平均值。分别用 t
t
和 t
r
表示机器人从静止达到最大平移速度和最大
旋转速度所需要的时间。则最大平移加速度为 a
t, max
= max dv/dt ≈ v
max
/t
t
。同理,最大旋转加速度通
过式 a
r , max
= max dω/dt ≈ ω
max
/t
r
计算。
1此信息来自于MetraLabs 网站。
2

1.3 设置最小值
设置最小速度不必像上述公式那么正式。对于最小平移速度,我们希望将其设置为较大的负值,因
为这样可以让机器人在需要自救时进行回退,虽然在大多数实际情况下它应该前进。对于最小旋转速
度,我们希望将其设置为负值(若参数允许的情况下),以便机器人可以在任一方向上旋转。注意,DWA
局部规划器采用的是机器人最小旋转速度的绝对值。
1.4 x,y 方向上的速度
x-速度表示平行于机器人直线运动方向的速度。它与平移速度相同。y-速度是垂直于该直线运动方
向的速度。在 teb_local_planner 中称为“扫射速度”(strafing velocity)。对于非完整类型 (non-holonomic)
的机器人(例如差动轮式机器人),应将 y-速度设置为零。
2 全局规划器
2.1 全局规划器的选择
要在导航堆栈中使用 move_base 节点,需要配置一个全局规划器和一个局部规划器。ROS 有三个全
局规划器继承自 nav_core::BaseGlobalPlanner 接口:carrot_planner ,navfn 和 global_planner 。
2.1.1 carrot_planner
这是最简单的全局规划器。它检查给定的目标点是否在障碍区,如果目标点在障碍区,则沿机器人
和目标点之间连线,在连线上选择一个最接近原始目标点的有效目标点。最终,它将该有效目标点直接
传递给局部规划器或内部控制器。所以,该规划器并没有进行任何的规划。它在你需要移动机器人到给
定目标点而且目标点无法到达的情况下很有用。在复杂环境下,该规划器并不实用。
2.1.2 navfn 和 global_planner
navfn 采用 Dijkstra 算法在起点和终点之间寻找一条最小代价的路径。global_planner 是 navfn 的
灵活性替代,提供了更多的选项,包括:(1) 支持 A∗, (2) 支持二次近似切换, (3) 支持切换风格路径。navfn
和 global_planner 实现的内容都是基于
[1]
的工作。
2.2 全局规划器的参数
通常情况下我们更喜欢使用 global_planner ,现在来看看它的一些关键参数。注意:并非所有的
参数都在 ROS 的官网上罗列出来,但如果你运行 rqt 动态配置程序时你可以看到它们:
1 rosrun rqt_reconfigure rqt_reconfigure
可以让参数 allow_unknown(true) , use_dijkstra(true) , use_quadratic(true) , use_grid_path
(false) , old_navfn_behavior(false) 保留它们的默认值。当需要在 rviz 可视化势力图 (potential
map) 时将 visualize_potential(false) 设置为 true 会带来很多便利。
3

图 1: Dijkstra 路径 图 2: A* 路径
图 3: 标准行为 (所有参数使用默认值) 图 4: 栅格路径
除去这三个参数外,还有另外三个未列出的参数对规划全局路径的质量造成很大的影响。它们
是 cost_factor , neutral_cost , lethal_cost 。实际上,这些参数也存在于 navfn 的配置中。源
程序2有一段描述解释了 navfn 是如何计算代价值的。
在 navfn 中,代价值计算方式为:
cost = COST_NEUTRAL + COST_FACTOR * costmap_cost_value.
传入 costmap 的代价值的范围为 0 到 255。注解中提到:
当 COST_NEUTRAL 为 50 时, COST_FACTOR 需要设置为大约 0.8 以确保输入值均匀分布到 50
到 253 的输出范围内。如果 COST_FACTOR 设置为更高的值,则代价值将稳定到障碍物的高
度,规划器会不重视狭窄走廊的宽度,不会沿着中心规划路径。
实验观察 实验也证实了这些解释。将 cost_factor 设置得太低或太高都会降低路径的质量。这些路径
并不会穿过每侧障碍物的中间,并具有相对低较的曲率。极端的 COST_NEUTRAL 值具有类似的效果。对
于 lethal_cost ,将其设置为较低的值可能导致无法生成任何路径,即使可行路径仍非常明显。图 5−10
2https://github.com/ros-planning/navigation/blob/indigo-devel/navfn/include/navfn/navfn.h
4
剩余17页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0