ROS与navigation教程——概述
navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。
代码库:https://github.com/ros-planning/navigation
代码里文件较多,进行梳理后如下图
- map_server:地图服务器,主要功能是保存地图和导入地图。
- costmap_2d:可以生产代价地图,以及提供各种相关的函数。
- robot_pose_ekf:扩展卡尔曼滤波器,输入是里程计、IMU、VO中的任意两个或者三个,输出是一个融合之后的pose。
- localization:这里是两个定位用的package。fake_localization一般是仿真用的,amcl才是实际定位用的package。
- nav_core:这里面只有三个文件,对应的是全局路径规划、局部路径规划、recovery_action的通用接口定义,具体功能实现则是在各个对应的规划器package里。
- move_base:这里实现的是整个导航的流程。什么时候调用全局路径规划、什么时候调用局部路径规划、什么时候调用recovery_action都是这个package管的。就是下图中间方框里做的事情,可以说是整个navigation stack的核心。
总体框架图中可以看到,
一、move_base
move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分:
(1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划.
在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。
navfn通过Dijkstra最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。将来在算法上应该还会加入A*算法。
(2) 本地实时规划(local planner):根据附近的障碍物进行躲避路线规划。
本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。
base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。
二、map_server
map_server提供map_server ROS节点,它提供地图数据作为一个ROS服务器。
也提供map_saver命令行功能,能动态生成保存到文件中的地图。 包中通过工具操作的地图是以成堆的文件存储的。YAML文件描述地图的元数据,并命名image文件。Image文件编码占用数据。
Image 以对应单元的颜色描述世界中每个单元的占用状态。白色单元格表示自由,黑色单元格表示占用,两种颜色之间的单元表示未知。接受彩色图像,但颜色值平均为灰度值。
三、costmap_2d
costmap_2d包提供了一种2D代价地图的实现方案,该方案从实际环境中获取传感器数据,构建数据的2D或3D占用栅格(取决于是否使用基于体素的实现),以及基于占用栅格和用户定义膨胀半径的2D代价地图的膨胀代价。
该包也支持基于map_server初始化代价地图,基于滚动窗口的代价地图,以及基于参数化订阅和配置传感器主题。
costmap_2d包提供了一种可配置框架来维护机器人在占用栅格应该如何导航的信息。代价地图使用传感器数据和来自静态地图的信息,通过costmap_2d :: Costmap2DROS对象来存储和更新实际环境中的障碍物信息。
初始化costmap_2d :: Costmap2DROS对象的方法主要有两种。
- 第一种是使用用户生成的静态地图进行初始化(有关构建地图的文档,请参阅map_server包)。在这种情况下,代价地图被初始化来匹配与静态地图提供的宽度,高度和障碍物信息。这种方式通常与定位系统(如AMCL)结合使用,允许机器人在地图坐标系注册障碍物,并且当基座在环境中移动时可以根据传感器数据更新其代价地图。
- 第二种是给出一个宽度和高度,并将rolling_window参数设置为true。当机器人在移动时,rolling_window参数将机器人保持在代价地图的中心。然而当机器人在给定区域移动得太远时,障碍物信息将会被从地图中丢弃。这种方式的配置最常用于里程计坐标系中,机器人只关注局部区域内的障碍物
四、robot_pose_ekf
Robot Pose EKF 包用于评估机器人的3D位姿,基于来自不同来源的位姿测量信息。
它使用带有6D(3D position and 3D orientation)模型信息的扩展卡尔曼滤波器来整合来自轮式里程计,IMU传感器和视觉里程计的数据信息。
基本思路就是用松耦合方式融合不同传感器信息实现位姿估计。
五、acml
amcl是一种机器人在2D中移动的概率定位系统。 它实现了自适应(或KLD采样)蒙特卡罗定位方法,该方法使用粒子滤波器来针对已知地图跟踪机器人的位姿。
参考资料:
https://blog.csdn.net/tansir94/article/details/83720740
http://wiki.ros.org/navigation
https://blog.csdn.net/bazinga_IIIIII/article/details/79369451
https://blog.csdn.net/jinking01/article/details/79455962
https://www.ncnynl.com/archives/201708/1911.html
ROS与navigation教程——概述相关推荐
- ROS与navigation教程——基本导航调整指南
说明: 介绍如何调整机器人上的ROS导航包 步骤: (1) 机器人导航需要那些准备? 在调整新机器人上的导航包时遇到的大部分问题都在本地规划器调谐参数之外的区域.机器人的里程计,定位,传感器以及有效运 ...
- ROS与navigation教程——ACML参数配置
<launch> <!--//后为wiki官网的参数说明 ()中为粗读算法参数说明及理解 ×××面临的问题常用地图有2种:1.基于特征,仅指明在指定位置(地图中包含的对象的位置)的环 ...
- dwa的区别 teb_ROS与navigation教程-dwa_local_planner(DWA)
ROS与navigation教程-dwa_local_planner(DWA) 说明: 介绍dwa_local_planner(DWA)的概念和相关知识. 代码库 概要 该包使用DWA(Dynamic ...
- 【ROS wiki】ros wiki官方教程与ROS wiki页面检索
ROS wiki系列文章简介:ROS wiki系列文章是本人ROS专栏下的子专题.该系列文章主要用来介绍:ROS初学者如何利用好ROS官方提供的ROS wiki平台,来查询ROS资料,了解ROS包的功 ...
- Navigation 2 概述(一)
Navigation 2 概述 Navigation 2 项目是 ROS Navigation Stack 的精神继承者.该项目寻求找到一种安全的方法,使机器人从 A 点移动到 B 点.项目内容包括动 ...
- [置顶] ros的navigation之———gmapping应用详解(in ros)
gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图. 博主最近也一直在使用gmapping,在前期着实被它卡了好久,因为好多东西不明白(原谅我是ros小白). 现 ...
- w3cschool教程之jQuery UI 教程概述
w3cschool教程之jQuery UI 教程概述 链接地址: http://www.w3cschool.cc/jqueryui/jqueryui-tutorial.html w3cschool教程 ...
- OpenCASCADE:教程概述
OpenCASCADE:教程概述 OpenCASCADE:教程概述 概述 先决条件 模型 型号规格 OpenCASCADE:教程概述 概述 本教程将教您如何使用 Open CASCADE Techno ...
- Ubuntu14.04 ROS Indigo安装教程,以及卸载方法
Ubuntu14.04 ROS Indigo安装教程,以及卸载方法 原创 2017年01月25日 15:22:45 标签: ROS / ubuntu / 机器人 13957 ROS (Robot Op ...
最新文章
- 在微信小程序的JS脚本中使用Promise来优化函数处理
- ACM入门之【前缀和】
- git源码服务器搭建,树莓派3-搭建GIT代码服务器
- VC++新建选择卡的解释
- 404未找到是什么意思_http404未找到怎么解决(404未找到与9最常见的HTTP错误解释)...
- 大型网站技术架构(一)大型网站架构演化
- 推荐系统(2)-协同过滤1-UserCF、ItemCF
- SQL 数据分析常用语句
- android studio放置在函数上面看_像写Flutter一样开发Android原生应用
- computed用发_Vue中的computed属性和nextTick方法
- 哪一瞬间让你觉得有妈的孩子像个宝?
- winetricks启动报错:please retest in a clean 32-bit WINEPREFIX before reporting a bug解决
- [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!...
- java线程--object.waitobject.notify
- mysql 定时任务 日志_mysql定时备份任务
- hdoj 1575 Tr A (矩阵快速幂)
- 开源Flash游戏引擎PushButton Engine
- rabbitMQ队列解绑
- HDU 6441 Find Integer 【费马大定理】
- 关于Java的char类型,字符集,字符编码三者的关系
热门文章
- rvm RuvyGem Cocoapods brew
- 跟着别人的感觉做网络推广之二
- windows.h与winsock2.h的包含顺序
- 夺命雷公狗---微信开发39----微信语言识别接口1
- LeetCodeOJ. String to Integer (atoi)
- Android中ExpandableListView控件基本使用
- C#中理解接口以及接口的作用
- 前端攻略系列(二) - 前端各种面试题
- 5个Vue.js项目的令人敬畏的模板
- [pytorch、学习] - 9.2 微调