一、TF
详见古月居 https://www.guyuehome.com/355
重点:广播TF,订阅,编译时Cmakelist添加编译选项
1 broadcaster.sendTransform( 2 tf::StampedTransform( 3 tf::Transform(tf::Quaternion(0, 0, 0, 1), tf::Vector3(0.1, 0.0, 0.2)), 4 ros::Time::now(),"base_link", "base_laser" 5 ) 6 )
1 listener.transformPoint("base_link", laser_point, base_point);
1 add_executable(tf_broadcaster src/tf_broadcaster.cpp) 2 add_executable(tf_listener src/tf_listener.cpp) 3 target_link_libraries(tf_broadcaster ${catkin_LIBRARIES}) 4 target_link_libraries(tf_listener ${catkin_LIBRARIES})
二、导航准备
详见wiki官网 http://wiki.ros.org/navigation/Tutorials/Navigation%20Tuning%20Guide (对工程实践有很好的借鉴意义)
1、机器人组成
(1)距离传感器
(2)里程计
第一个测试检查里程表旋转的合理程度。我打开rviz,将框架设置为“ odom”,显示机器人提供的激光扫描,将该主题的衰减时间设置得很高(大约20秒),然后进行就地旋转。然后,我看一下扫描在随后的旋转中彼此匹配的紧密程度。理想情况下,扫描将彼此重叠,但是预计会有一些旋转漂移,因此我只确保扫描的偏离不超过一两个度。
下一个测试是对里程表进行翻译的完整性检查。我将用距离墙壁只有几米的机器人来设置rviz。然后,我将机器人直接对准墙壁,并查看rviz中汇总的激光扫描报告的墙壁厚度。理想情况下,墙应该看起来像是一次扫描,但我只是要确保它的厚度不超过几厘米。如果您将仪表驶向墙壁,但扫描范围扩展到半米以上,则里程表可能存在问题。
(3)定位
AMCL,初始化位姿时尽可能给的准确。
2、costmap
确保根据传感器实际发布的速率为每个观察源设置Expected_update_rate参数。通常会在这里给出一定的容忍度,将检查时间设置为我期望的两倍,但是当传感器下降到低于预期速度时,会收到来自导航的警告。
为系统适当地设置transform_tolerance参数。检查使用tf从“ base_link”帧到“ map”帧的转换的预期等待时间是多少。通常使用tf_monitor查看系统的延迟,并保守地设置该参数。另外,如果tf_monitor报告的延迟足够大,四处戳一下以查看造成延迟的原因,有助于发现有关给定机器人如何发布转换的问题。
在处理能力慢的机器人上,考虑降低map_update_rate参数。但是,在执行此操作时,考虑一个事实,即这将导致传感器数据进入成本图的速度出现延迟,从而减慢了机器人对障碍物做出反应的速度。
publish_frequency参数是在rviz可视化costmap有用。但是,尤其是对于大型全局地图,该参数可能导致事物运行缓慢。在生产系统中,降低发布成本图的速率,并且当需要可视化非常大的图时,请确保将速率设置得非常低。
是否将voxel_grid或costmap模型用于成本图的决定很大程度上取决于机器人具有的传感器套件。由于确实需要考虑未知空间,因此需要为基于3D的成本图调整成本图。如果我使用的机器人只有平面激光器,那么我总是将Costmap模型用于地图。
有时,仅在里程表框架中运行导航很有用。要做到这一点,最简单的是复制local_costmap_params.yaml文件在global_costmap_params.yaml文件,并更改了宽度和高度的地图。如果要独立于本地化性能来调整导航,这是使事情正常运行的非常简单的方法。
另外,尽量倾向于根据机器人的大小和处理能力来选择正在使用的地图的分辨率。在具有强大处理能力且需要适合狭窄空间的机器人(如PR2)上,使用细粒度的地图...将分辨率设置为0.025米。对于像Roomba这样的东西,我可能会达到0.1米的分辨率,以减少计算量。
Rviz是一种很好的方法来验证costmap是否正常工作。从costmap中查看障碍物数据,并确保在操纵杆控制下驾驶机器人时,它与地图和激光扫描都对齐。这是对传感器数据是否以合理方式进入costmap的合理性检查。如果使用机器人跟踪未知空间,那么大多数都是使用voxel_grid的机器人在costmap的模型中,查看未知空间的可视化效果,以了解以合理的方式清除了未知空间。要做的一个很好的检查,就是看是否能正确地从costmap中清除障碍物,就是简单地走在机器人前面,看看它是否能成功看到并清除动态障碍物。有关costmap发布到rviz的主题的详细信息,请查看rviz教程的导航。
在导航堆栈仅运行costmap时检查系统负载是一个好主意。这意味着调出move_base节点,但不向其发送目标并查看负载。如果此时计算机陷入瘫痪,我想如果需要任何机会运行计划程序,则需要进行一些CPU节省参数调整。
3、局部规划
在具有合理加速度限制的机器人上,通常使用dwa_local_planner;对于那些具有较低加速度限制并希望在每次部署中都考虑到加速度限制的部署中受益的机器人上,将使用base_local_planne r。调整dwa_local_planner比调整base_local_planner更令人愉快,因为它的参数是动态配置的。
三、导航配置
详见古月居 https://www.guyuehome.com/281。
重点:配置机器人启动文件、配置代价地图、配置路径规划器、launch
四、RVIZ
详见wiki官网 http://wiki.ros.org/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20Stack
重点:RVIZ中的话题、msg类型
五、里程计
详见古月居 https://www.guyuehome.com/332
六、传感器