ROS Navigation Tuning Guide(导航调试指南)

导航调试指南

借用前辈郑开宇基本调试指南经验,谈一谈对于配置、调参、优化这些到底应该怎么做,经验之谈.

准备工作

三个组件检查:距离传感器,里程计和定位。

距离传感器

如果机器人没有从其距离传感器(例如激光器)获取信息,那么导航将不起作用。首先确保可以在rviz中查看传感器信息,它看起来相对正确(一般判断激光点是否跟障碍物对齐),并以预期的速度在刷新。
最后确认建图导航中是否为需要的传感器数据topic以及link是否正确。

里程计

里程计是一个很不确定的因素,大部分移动机器人是有编码器的,编码器本身会有少量误差,但是加上轮子摩擦空转、地面不平、机器人驱动结构(二轮差动、四轮差动、全向轮)等因素影响,会累计出很大的误差,尤其是原地旋转,通常情况下可以加入IMU等数据进行融合重新计算里程计数据,如果使用得当,里程计误差便可以控制在很好的范围。然而,又是然而,IMU的安装位置是机械的,如何标定IMU的准确相对位置是困难的,不过通常良好的机械安装会使计算后的里程在可控范围内,所以,使用EKF等融合数据时,一定要保证IMU位置与数据的准确,否则只会让里程计信息雪上加霜。

第一个测试检查角速度是否合理。打开rviz,将坐标系设置为“odom”,显示机器人提供的激光扫描,将该主题的衰减时间设置为高(类似20秒),并执行原地旋转。然后,我看看扫描出来的边线在随后的旋转中如何相互匹配。理想情况下,每次扫描将刚好落在相互的顶端,会重叠在一起,但是有些旋转漂移是预期的,所以我只是确保扫描之间误差,不会超过一度或两度以上。

第二个测试检查线速度是否合理。机器人放置在与距离墙壁几米远地方,然后以上面相同的方式设置rviz。接着我将驱动机器人向墙壁前进,从rviz中聚合的激光扫描看看扫描出来边线的厚度。理想情况下,墙体应该看起来像一个扫描,但我只是确保它的厚度不超过几厘米。如果显示扫描边线的分散在半米以上,但有些可能是错误的测距。

其他的测试角速和线速方法:

线速标定:http://www.ncnynl.com/archives/201701/1217.html
角速标定:http://www.ncnynl.com/archives/201701/1218.html
线速标定:http://www.ncnynl.com/archives/201707/1812.html
角速标定:http://www.ncnynl.com/archives/201707/1813.html

定位

假设里程计和激光扫描仪都能合理地执行,建图和调整AMCL通常并不会太糟糕。首先,运行gmapping或者hector啥的,操控机器人来生成地图。然后使用该地图与AMCL,并确保机器人保持定位。通常是需要设置一个大概的初始位置,稍微移动机器人,就可以看到激光与障碍物对齐了。

速度与加速度的设置

最大/最小速度和加速度是移动基座的两个基本参数,正确设置对优化本地规划器行为有很大帮助.在ROS中有平动和旋转的两种速度/加速度。

加速度与速度,对于规划的影响就很神奇,不同的加速度,速度,最大最小速度,最大加速度,前进速度与转弯速度的组合,各种组合就是会有不一样的效果,想要获得好的效果只能多次尝试不同组合,对于不同的机器人效果也不近相同,还有controller的频率也会影响最后的输出速度。

获得最大速度

通常可以参考移动底盘手册,找到最大速度.还可以订阅odom话题,控制机器人运动,直线运动和原地旋转运动分别可以一个恒定值,便是最大平动速度和旋转速度,为了安全一般我们设置低于最大值.

获得最大加速度

同样可以在手册中找到.若不能再次使用里程计参数,根据机器人到达最大速度的时间,最大速度,位置或角度,可以计算出最大加速度.

设置最小值

这里的最小值我们设置为较大的负值,因为需要机器人后退,以及在任意方向旋转.注意:DWA Local Planner采用机器人最小转速的绝对值.

XY方向的速度

X方向速度为平行于机器人直线运动的方向的速度,与平动速度相同.Y方向速度为垂直于机器人直线运动方向的速度.对于非完整机器人,如两轮差速机器人,需将Y轴方向速度设置为0.

Global Planner

move_base的运行依赖于global planner和local planner.这里有三个nav core::BaseGlobal Planner 的接口: carrot planner, navfn and global planner

接口

  1. carrot planner :最简单的一个.检查到如果给定的目标是障碍物,通过沿向量向后移动机器人和目标点。最终它将这个有效的目标作为一个计划传递给本地规划师或controller。因此,此计划器不执行任何全局操作路径规划。如果你需要你的机器人接近给定的目标,这是很有帮助的。即使目标无法实现。在复杂的室内环境中却不太实际。
  2. navfn and global planner :navfn使用dijkstra的算法找到一个全局路径,该路径在起点和终点。Global Planner是一种更灵活的替代产品。有更多的选择。这些选项包括(1)A*支持(2)切换二次近似(3)切换网格路径。

参数

global planner通常是我们喜欢使用的,下面讨论一些关键参数.并非所有参数在ROS网站,这时使用rqt的参数重新配置程序,可以看到所有参数
rosrun rqt_reconfigure rqt_reconfigure

将参数 allow_unknown(true) use_dijkstra(true) use_quadratic(true) use_grid_path(false)  old_navfn_behavior(false) 设置成默认.如果需要查看potential map,将visualize potential(false)设置成true可能会很有帮助map
除了这些参数外,还有三个未列出的参数实际上决定了计划全局路径的质量。成本因素、中性成本、致命成本。实际上,这些参数也出现在NAVFN中。源代码2有一段解释navfn如何计算成本值。在这里插入图片描述
在这里插入图片描述
navfn cost value的设置:
cost = COST NEUTRAL + COST FACTOR * costmap cost value
costmap cost values的输入值在0到252之间.
在成本中性值为50的情况下,成本系数需要大约为0.8,以确保输入值在输出范围(50到253)上均匀分布。如果成本因素更高,成本值将在障碍物周围有一个高原,然后规划者将(例如)把狭窄走廊的整个宽度视为同样不可取的,因此不会规划沿着中心的路径.
实验证明。将成本系数设置为过低或过高会降低路径的质量。这些路径有不经过每边障碍物的中间,曲率相对平缓。极端中性的成本值也有同样的效果。对于致死成本,即使可行路径明显,将其设置为低值也可能导致无法生成任何路径。图5-10显示了成本因素和中性成本对全球路径规划的影响。绿线是全球规划师制定的全球路径。经过几次实验,我们发现当cost factor=0.55,neutral cost=66,lethal cost=253时,全局路径是比较理想的。

Local Planner

Local planners依赖于nav core::BaseLocalPlanner interface的接口:
dwa local planner eband local planner teb local planner
它们使用不同算法生成速度命令.我们通常选择DWA.

DWA Local Planner

DWA algorithm

dwa_local_planner采用了Dynamic Window Approach(DWA)算法
算法基本思想:

  • 在机器人控制空间(dx,dy,dta)中离散采样。
  • 对于每个采样速度,从机器人的当前状态执行正向移动模拟,以预测如果在一些(短)时间段内应用采样速度将会发生什么。
  • 从以下方面来评价正向移动模拟产生的每个轨迹:接近障碍物,接近目标,接近全局路径和速度。 放弃非法轨迹(与障碍物相撞的轨迹)。
  • 选择最高得分的轨迹,并将相关速度发送到移动基座。
  • 冲洗并重复

DWA的目标是产生一个(v,ω)对,它表示一个最适合机器人的局部状况。DWA通过搜索下一个时间间隔。这个空间的速度被限制在允许范围内,这意味着机器人必须能够在到达最近的障碍物之前停止。由这些容许速度决定的圆形轨道。而且,DWA只会考虑动态窗口中的速度,该窗口定义为在给定当前平移和旋转速度和加速度的情况下,在下一个时间间隔内可到达的一组速度对。DWA最大化了一个目标函数,这取决于:
(1)抵达目标的进度(2)障碍物空间(3)前进速度产生最佳速度对。

算法摘要:第一步是在动态窗口中的速度空间中采样速度对(v x,v y,ω)。第二步基本上是消除速度(即消除不良轨道),这是不允许的。第三步是使用OBJEC评估速度对.输出轨迹得分的动态函数。第四步和第五步很容易理解,选择当前的最佳速度选项并重新计算。

这个DWA计划依赖于提供障碍信息的本地成本图信息。因此,调整局部成本图的参数对于优化DWA Local planner的行为。接下来,我们将在正向模拟中查看参数,轨迹评分,成本地图等等。

DWA Local Planner : Forward Simulation

前向仿真是DWA算法的第二步。在这一步中,local planner在机器人的控制空间中提取速度样本,并检查这些速度样本所代表的圆形轨迹,最终消除不良速度(轨迹与障碍物相交的速度)。每一个速度样本都被模拟,就好像它被应用到机器人上一个设定的时间间隔,由模拟时间(s)参数控制。我们可以把sim_time看作是机器人以采样速度移动所允许的时间。

实验结果表明,模拟时间越长,计算量越大。另外,当仿真时间变长时,local planner的路径也会变长,这是合理的。下面是一些关于如何调整此sim_time参数的建议。

如果将sim_time设置为一个非常低的值(<=2.0),将导致性能受限,特别是当机器人需要通过狭窄的门口或家具之间的间隙时,因为没有足够的时间来获得实际通过狭窄通道的最佳轨迹。另一方面,由于有了DWA Local planner,所有的轨迹都是简单的圆弧,将sim_time设置为一个非常高的值(>=5.0)将导致不太灵活的长曲线。这个问题并不是不可避免的,因为计划员在每个时间间隔(由控制器频率(hz)控制)后都会主动重新规划,这为小的调整留出了空间。即使对于高性能计算机,4.0秒的值也应该足够。
在这里插入图片描述
除了sim_time之外,其他一些值得关注的参数.

速度样本和其他参数 vy_samplevy_sample决定了在x,y方向要取多少平移速度样本。vy_sample控制旋转速度样本的数量。您希望采集的样本数量取决于您拥有多少计算能力。在大多数情况下,我们倾向于将vy_sample设置为高于平动速度样本,因为转弯通常比直行更复杂。如果将max_vel_y设置为0,则无需在y方向上进行速度采样,因为没有可用的采样。我们选取vy_sample=20,vy_sample=40。

模拟粒度 sim_granularity是在轨迹上的点之间采样的步长。它基本上意味着应该检查轨迹上的点的频率(测试它们是否与任何障碍物相交)。较低的值意味着较高的频率,这需要更多的计算能力。默认值0.025通常足以满足Turtlebot大小的移动基础。

DWA Local Planner : Trajactory Scoring

如上所属,DWA Local Planner 最大化目标函数来获得最佳路径.DWA最大化了一个目标函数,取决于:
(1)抵达目标的进度(2)障碍物空间(3)前进速度产生最佳速度对。

目标函数的成本计算如下:
cost = path distance bias ∗ (distance(m) to path from the endpoint of the trajectory) +
goal distance bias ∗ (distance(m) to local goal from the endpoint of the trajectory) +
occdist scale ∗
(maximum obstacle c

根据提供的引用内容,我们可以得出以下结论: 1. 引用\[1\]中提到了一个名为Vec2D的类,它实际上是一个元组。在TNavigator类中,Vec2D被用于表示不同方向的起始朝向。 2. 引用\[2\]提到了Navigation2具有许多参数,可以用来改变不同机器人的性能。虽然与ROS1 Navigation类似,但更多细节可以参考Navigation2的配置指南ROS Navigation Tuning Guide。 3. 引用\[3\]中提到了一个名为Turtle的类,它是RawTurtle的子类。当创建一个Turtle对象或调用从Turtle方法派生的函数时,会自动创建一个TurtleScreen对象。 综上所述,"navigation2 turtle"可能是指在Navigation2中使用Turtle类进行机器人导航的一种方式。 #### 引用[.reference_title] - *1* *3* [Python turtle库实现基本剖析](https://blog.csdn.net/A757291228/article/details/106176893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Turtlebot3-burger入门教程#foxy版#-Navigation2调参](https://blog.csdn.net/ncnynl/article/details/125804722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值