ROS常用库(五)navigation之Tutorials
一、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的更多相关文章
- ROS常用库(四)API学习之常用common_msgs(下)
一.前言 承接ROS常用库(三)API学习之常用common_msgs(上). 二.sensor_msgs 1.sensor_msgs / BatteryState.msg #电源状态 uint8 P ...
- ROS常用库(三)API学习之常用common_msgs(上)
一.概述 common_msgs包含其他ROS软件包广泛使用的消息.这些消息包括动作消息(actionlib_msgs),诊断消息(diagnostic_msgs),几何图元(geometry_msg ...
- ROS常用库(二) Serial库(单片机和上位机串口通讯)
比如我们做了个单片机,在win里面用串口调试助手接收和下发数据,那么在ubuntu里用ros怎么实现?换个说法,怎么实现上位机和下位机的通讯? 首先,用python自带的库就可以实现这个功能. 安装p ...
- ROS常用库(一) fake_localization
wiki是最好的学习资料,以下直接参考了wiki官网.另外po出官网网址,建议英语较好的朋友之接看原版 http://wiki.ros.org/fake_localization 概述 fake_lo ...
- Python爬虫学习==>第五章:爬虫常用库的安装
学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...
- iPhone开发 - 常用库
iPhone开发 - 常用库 这里总结了iPhone开发者开发过程中可能需要的一些资源 如何用Facebook graphic api上传视频: http://developers.facebook. ...
- 爬虫-Python爬虫常用库
一.常用库 1.requests 做请求的时候用到. requests.get("url") 2.selenium 自动化会用到. 3.lxml 4.beautifulsoup 5 ...
- Altium Designer 10 | 常用库及部分元件名中英文对照表
———————————————————————————————————————————— 常用库及部分元件名中英文对照表 - - - - - - - - - - - - - - - - - - - - ...
- [C++] C++中的常用库
转载自:C++常用库 C++ 资源大全 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++标准库,包 ...
随机推荐
- BigOps自动化运维安装以及所遇故障处理
本文参考官方文档进行安装,以及在安装中所遇到的问题呈现给大家.废话就不说了,开始安装.一.准备工作:本机系统环境是CentOS 7 x86 64位硬件配置建议物理内存8G+.CPU 4 cores+. ...
- selenium 获取table数据
public class Table { /** * @param args */ public static void main(String[] args) { // TODO Auto-gene ...
- 使用SQL语句还原数据库 2012.3.20
--返回由备份集内包含的数据库和日志文件列表组成的结果集. --主要获得逻辑文件名 USE master RESTORE FILELISTONLY FROM DISK = 'g:\back.Bak' ...
- tensorflow变量的使用(02-2)
import tensorflow as tf x=tf.Variable([1,2]) a=tf.constant([3,3]) sub=tf.subtract(x,a) #增加一个减法op add ...
- 如何编写.gitignore文件
为什么要有.gitignore文件 项目中经常会生成一些Git系统不需要追踪(track)的文件.典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件.当然,你不追踪(track)这些文件 ...
- httpclient post 请求
package com.thinkgem.jeesite.common.utils; import org.apache.http.HttpEntity; import org.apache.http ...
- MongoDB基础篇1:安装和服务配置
一.下载 请前往官网下载community版本MongoDB,我当前可见最新版本是3.6.4 https://www.mongodb.com/download-center#community 如需下 ...
- js中各种类型转换为Boolean类型
数据类型 转换为true的值 转换为false的值 Boolean true false String 任何非空字符串 空字符串 Number 任何非零数字值(包括无穷大) 0和null ...
- Navicat相关注册码
用户名和组织随便起. 注册码如下 --Navicat for SQL Server V10.0.10 NAVD-3CG2-6KRN-IEPM NAVL-NIGY-6MYY-XWQE NAVI-C3UU ...
- 【剑指Offer面试编程题】题目1514:数值的整数次方---九度OJ
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例. 对于每个输入文件,第一行输入一个整数T, ...