一、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. Codeforces1107E. Vasya and Binary String

    题目链接 本题也是区间dp,但是需要保存的信息很多,是1还是0,有多少个连续的,那我们可以预处理,将所有的连续缩合成1个字符,那么字符串就变成了一个01交替的串,我们任意的消除1个部分,一定能引起连锁 ...

  2. PTA的Python练习题(九)

    从 第3章-18 输出10个不重复的英文字母 继续 1. a=input() b='' c=a.replace(' ','') for i in c: if i not in b: b=b+i d=l ...

  3. 去重sort|uniq -d

    #!/bin/bash ############################################################### #Author :Bing # #Create ...

  4. navicat12破解详细教程

    以管理员身份运行此注册机: 运行注册机 打开注册机后,1) Patch勾选Backup.Host和Navicat v12,然后点击Patch按钮: 默认勾选 找到Navicat Premium 12安 ...

  5. 吴裕雄--天生自然ORACLE数据库学习笔记:其它数据对象

    create index emp_deptno_index on emp(deptno) pctfree tablespace users; create bitmap index emp_salar ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:嵌套列

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. mysql 统计索引执行情况

    select distinct b.TABLE_SCHEMA,b.TABLE_NAME , b.INDEX_NAME , a.count_starfrom performance_schema.tab ...

  8. [经验] SpringBoot 远程连接 Linux 上的 Redis

    开发环境: ---------- springboot 2.X ---------- Linux Ubuntu 18.0.04 关于怎么在 Ubuntu 上安装 Linux , 网上的教程一大堆, 这 ...

  9. Python 基础之面向对象类的继承与多态

    一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...

  10. unittest---unittest生成测试报告

    我们做测试的人员们都知道测试完成后,肯定是会生成一个测试报告,那么当我们做自动化的时候,这个自动化报告也可以自动生成吗?python当然可以了! HTMLTestRunner HTMLTestRunn ...