Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5009126
  • 博文数量: 1195
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 14376
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
  • 认证徽章:
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1195)

文章存档

2019年(172)

2018年(81)

2017年(80)

2016年(70)

2015年(52)

2014年(41)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2019-08-06 10:58:32

https://www.cnblogs.com/yebo92/p/7443847.html

翻译自 http://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide 

对机器人进行导航调优时, 很多问题都在里程表、定位、传感器和其他有效运行导航的先决条件经常出错, 解决完毕后才是 本地规划器参数的调优. 所以第一步是确保机器人本身已经准备好导航。这包括三个组件检查:距离传感器、里程表和定位。

距离传感器
    确保距离传感器<例如激光雷达>正常工作, 在rviz中能看到并初步估计正确, 以及 Hz 也是正确的.

Odometry
    机器人定位不准确, 可能很大原因在于odometry, 确保odom的正确,需要做两个检查.
    1.    
确定 odom 对旋转的合理性. rviz中设置帧为 odom, 打开激光雷达并设置topic上的衰减设置为高(约20秒), 执行原地旋转. 观察彼此的匹配度不超过1/2度的偏差.
    2.    确定odom对距离的检查, 离墙x米, 通过rviz对墙进行垂直行进. 墙壁厚度由激光雷达确定, 如果你把车开到离墙一米远的地方,得到的扫描结果却超过了半米,那么里程表很可能出了问题

定位
    在里程表和激光扫描仪都运行正常,那么绘制地图和调优AMCL通常不是太坏. 如果机器人的里程表不是很好,可以考虑使用AMCL的里程表模型参数。对整个系统的一个很好的测试是确保激光扫描和地图可以在rviz的“地图”帧中可视化,并且激光扫描与环境地图匹配良好。我也总是确保在rviz中以合理的精度为机器人设置初始姿态,然后才期望事情能够正常工作。
若里程计不是很准,可以参考amcl的里程计模型参数设置进行改进,  
http://wiki.ros.org/amcl#Parameters  AMCL的参数设置.

如此确认后, 可以进行确保costmap被正确地设置和配置.
1.  确保根据传感器实际发布的速率为每个观察源设置expected_update_rate参数。我通常在这里给出一个相当大的容忍度,使检查的时间是我预期的两倍,但是当传感器的速度远远低于预期时,收到导航的警告是很好的。

2. 为系统设置适当的transform_tolerance参数。使用tf检查从“base_link”帧到“map”帧的转换的预期延迟是多少是很好的。我通常使用tf_monitor查看系统的延迟,并将参数保守地设置为该延迟。

3. 对于缺乏处理能力的机器人,考虑关闭map_update_rate参数。即这会导致传感器数据进入costmap的速度延迟,从而减慢机器人对障碍物的反应速度。

4. publish_frequency参数对于在rviz中可视化costmap非常有用。但是,特别是对于大型全局映射,该参数可能导致运行缓慢。在生产系统中,我考虑降低发布costmap的速度,当我需要可视化非常大的地图时,我确保将速度设置得非常低。

5. 对于costmap,是使用voxel_grid模型还是使用costmap模型,很大程度上取决于机器人拥有的传感器套件。为基于3d的costmap调整costmap更加复杂,因为要考虑未知的空间。如果我使用的机器人只有一个平面激光器,我总是使用costmap模型。

6. 有时仅在里程表框架中运行导航非常有用. 简单的方式把local_costmap_params覆盖global_costmap_params.修改地图长宽例如为10米, 如果您想独立于本地化性能来优化导航,那么这是一种非常简单的启动和运行方法。

7. 根据机器人的大小和处理能力来选择我正在使用的地图的分辨率。在一个有很多处理能力,需要适应狭小空间的机器人上,比如PR2,我将使用一个细粒度的地图…将分辨率设置为0。025米。对于像roomba这样的设备,我可能会把分辨率提高到0.1米,以减少计算负载。

8. Rviz是验证costmap工作正常的好方法。我通常会从costmap中查看障碍数据,并确保它与地图和激光扫描一致,因为我在操纵杆控制下驾驶机器人。这是一个明智的检查,传感器数据正以一种合理的方式进入成本图。

9. 当导航堆栈只运行costmap时,检查系统负载是个好主意。这意味着打开move_base节点,但不发送目标并查看负载。如果计算机在这一点上陷入困境,我知道我需要做一些CPU节省参数调整,如果我想要任何机会运行规划者。

本地路径规划
    当对costmap结果满意是, 则进一步对路径规划做调优,
    对于具有合理加速度限制的机器人,通常使用dwa_local_planner;
    对于具有较低加速度限制的机器人,将使用base_local_planner

    调优dwa_local_planner比调优base_local_planner更令人愉快,因为它的参数是动态可重构的

    1. 为给定的机器人正确设置加速度极限参数是非常重要的, 因为机器人的移动行为是最优的功能.
    2. 机器人有较低的加速度限制时,确保运行base_local_planner,并将dwa设置为false。
        
在将dwa设置为true之后,还需确保根据可用的处理能力将vx_samples参数更新到8到15之间。这将允许在rollout中生成非圆曲线。
    3. 如果定位性能不够好, 应当确保将目标公差参数设置得比其他情况下高一点,  也应当提高旋转公差, 以避免在目标点振荡
    4. 如果由于CPU原因使用低分辨率,有时会将sim_particle参数调高一点,以节省一些周期。
    5. 甚少改动(path_distance_bias和goal_distance_bias 或者说 pdist_scale和gdist_scale), 将path_distance_bias参数调高,将使机器人更紧密地跟随路径,且快速地向目标移动, 但是设置的太高会造成机器人拒绝移动.
    6. 如果我想以一种明智的方式对cost函数进行推理,我将确保将meter_score参数设置为true。这使得cost函数中的距离以米为单位,而不是以单元格为单位,这也意味着我可以调优一个map分辨率的cost函数,并期望在移动到其他分辨率时得到合理的行为。
    7. sim_time参数设置为不同的值会对机器人的行为产生很大的影响。通常把这个参数设置在1-2秒之间,如果设置得更高,轨迹会稍微平滑一些,确保最小速度乘以sim_period小于对目标的容忍度的两倍。否则,机器人会选择在其目标位置的范围之外原地旋转,而不是向目标移
    8 行动规划依赖于从里程计得到合理的速度估计。这是因为dwa_local_planner和base_local_planner都使用这个速度估计值,以及机器人的加速度限制,来确定规划周期的可行速度空间。虽然里程表的速度估计不一定是完美的,但重要的是确保它至少接近于最佳行为。


















阅读(148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册