一、TF

  详见古月居 https://www.guyuehome.com/355

  重点:广播TF,订阅,编译时Cmakelist添加编译选项

 broadcaster.sendTransform(
tf::StampedTransform(
tf::Transform(tf::Quaternion(, , , ), tf::Vector3(0.1, 0.0, 0.2)),
ros::Time::now(),"base_link", "base_laser"
)
)
 listener.transformPoint("base_link", laser_point, base_point);
 add_executable(tf_broadcaster src/tf_broadcaster.cpp)
add_executable(tf_listener src/tf_listener.cpp)
target_link_libraries(tf_broadcaster ${catkin_LIBRARIES})
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

六、传感器

  详见古月居https://www.guyuehome.com/326

ROS常用库(五)navigation之Tutorials的更多相关文章

  1. ROS常用库(四)API学习之常用common_msgs(下)

    一.前言 承接ROS常用库(三)API学习之常用common_msgs(上). 二.sensor_msgs 1.sensor_msgs / BatteryState.msg #电源状态 uint8 P ...

  2. ROS常用库(三)API学习之常用common_msgs(上)

    一.概述 common_msgs包含其他ROS软件包广泛使用的消息.这些消息包括动作消息(actionlib_msgs),诊断消息(diagnostic_msgs),几何图元(geometry_msg ...

  3. ROS常用库(二) Serial库(单片机和上位机串口通讯)

    比如我们做了个单片机,在win里面用串口调试助手接收和下发数据,那么在ubuntu里用ros怎么实现?换个说法,怎么实现上位机和下位机的通讯? 首先,用python自带的库就可以实现这个功能. 安装p ...

  4. ROS常用库(一) fake_localization

    wiki是最好的学习资料,以下直接参考了wiki官网.另外po出官网网址,建议英语较好的朋友之接看原版 http://wiki.ros.org/fake_localization 概述 fake_lo ...

  5. Python爬虫学习==>第五章:爬虫常用库的安装

    学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...

  6. iPhone开发 - 常用库

    iPhone开发 - 常用库 这里总结了iPhone开发者开发过程中可能需要的一些资源 如何用Facebook graphic api上传视频: http://developers.facebook. ...

  7. 爬虫-Python爬虫常用库

    一.常用库 1.requests 做请求的时候用到. requests.get("url") 2.selenium 自动化会用到. 3.lxml 4.beautifulsoup 5 ...

  8. Altium Designer 10 | 常用库及部分元件名中英文对照表

    ———————————————————————————————————————————— 常用库及部分元件名中英文对照表 - - - - - - - - - - - - - - - - - - - - ...

  9. [C++] C++中的常用库

    转载自:C++常用库 C++ 资源大全 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++标准库,包 ...

随机推荐

  1. 2019年 我的phper之路,时光没了,头发还在

    前言 曾经我认为最快的是麦迪的第一步,后来我觉得 7 酱逃跑速度更快,现在我懂了,原来我们都在跟时间赛跑. 年底了,给自己一个 "交代" 吧 2019 的我 2019 年写了 很多 ...

  2. [转]Java监听器的原理与实现

    原文链接 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用 ...

  3. 16 JavaScript计时事件&显示时钟

    计时事件:JavaScript设定一定的时间间隔之后来执行代码 window.setInterval("JavaScript function",millisecons):间隔指定 ...

  4. 布线问题&魔法花园_最短路径

    布线问题 问题描述:印刷电路板将布线区域划分成n×m个方格阵列,精确的电路布线问题要求确定连接方格a到方格b的最短布线方案:布线时,电路只能沿着直线或直角(方格)布线:已经布线的方格被锁定,即不允许其 ...

  5. 学习不一样的vue4:mock与axios实战1

    学习不一样的vue4:mock与axios实战1  发表于 2017-06-14 |  分类于 web前端|  |  阅读次数 8180 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) ...

  6. what is 'linesize alignment' meaning?

    链接: https://stackoverflow.com/questions/35678041/what-is-linesize-alignment-meaning

  7. 表格中td限宽溢出以省略号代替

    table.ms-listviewtable { table-layout:fixed; width: 100%; } table.ms-listviewtable td[role="gri ...

  8. 吴裕雄--天生自然PYTHON爬虫:爬虫攻防战

    我们在开发者模式下不仅可以找到URL.Form Data,还可以在Request headers 中构造浏览器的请求头,封装自己.服务器识别浏览器访问的方法就是判断keywor是否为Request h ...

  9. Memcache和Redis的详细理解与区别

    1. Memcache Memcache是一个高性能,分布式内存对象缓存系统,通过在内存中缓存一个巨大的hash表,他能够存储包括图像,文件,索引,sql语句结果等数据,可以理解为它理解为一个为提升读 ...

  10. tomcat在windows下的监测

    一些老旧的系统部署在了windwos服务器上,而且总是容易挂,新机器申请不到,只能.. %tomcat%bin下有service.bat的tomcat版本 service.bat install se ...