1.ROS navigation为移动机器人导航相关包的集合,实现定位规划避障等相关功能。

整体工作流程为:

1.加载地图

navigation通过map_server加载现有地图。navigation无建图相关包,需另外实现后保存,默认只支持2维地图,其他包类似grid_map提供2.5维地图的加载。

2.发布TF坐标变换

navigation包内的AMCL提供map->odom的变换,AMCL实际为全局绝对定位,即map->base,但在应用时里程计会提供odom->base的变换,因此AMCL会获取TF信息转换后再发布map->base变换,navigation不包含里程计的实现,需另外独立实现。

3.启动move_base加载相关插件

move_base为导航的核心框架,通过预设接口(plugin)加载地图(costmap_2d)和规划避障(global_planner, local_planner, recovery)相关插件,读取设置参数(机器人外形,规划避障设置等),并发布相关话题和服务器。

实现机器人的自主导航除navigation外还需要一张图和里程计,当然navigation内部的算法都可以根据需要进行更换。

一张地图--map

amcl+里程计---odom

异常处理(recovery_behaviors)

一、一张地图--map

1.要进行导航,我们肯定需要有个地图,这个地图可以手绘也可以用SLAM方法来创建,但是原始的地图并不能直接进行导航,通常需要先将其转换成“代价地图”(cost_map)。

什么是“代价地图”,就是说机器人在地图里移动是需要付出“代价”的,这个“代价”有显性的也有隐性的。显性的,比如行走的距离,绕远路费电啊,这是最明显的“代价”。隐性的,比如靠近障碍物,万一机器人一哆嗦就磕着脑袋碰着胳臂了,这是隐性的“代价”。还有一些机器人体型比较长(无人驾驶大卡车有木有),转个弯掉个头巨费劲,对它来说,路线转弯太多也是“代价”,所以导航的路线越顺滑代价就越小。

1.因此产生global_costmap,是由全局地图(通常是SLAM建好的)和激光雷达侦测到的当前机器人周围的障碍物分布融合后生成。

map_server提供的全局地图代表的是以前记录的地图。近处的变化可以用激光雷达侦测扫描由sensor_source提供;

越靠近障碍物,与障碍物碰撞的风险越大,于是颜色越深,隐性“代价”越大;移动距离产生的显性代价,通常都是在路径规划算法内部才会实现,一般不会显示。

2.有了代价地图,由全局规划器(global_planner)来生成得到导航的路线;

global_planner 全局规划器的任务就是从外部获得导航的目标点,然后在全局代价地图里找出“代价最小”的那条路线;

3.现在nav_msgs/path路线已经有,突发情况如何规避,这就是局部规划器(local_planner)。局部规划器的工作就是从全局规划器获得导航路线,根据这个路线向机器人发送速度,驱动机器人“尽可能”按照路线去行走。

局部规划器(local_planner)的调教也是最曲折最费时的部分。因为机器人的底盘类型千差万别,有的只能前后移动和原地转向(差动底盘),有的可以360°随意移动(全向底盘),有的底盘是履带双足四足甚至多足,除非撞墙否则都不带避障的.

4.局部规划器利用激光雷达获得的当前障碍物数据,又做了一个“代价地图”,叫做局部代价地图(local_costmap)它是由sensor_source联合产生的。

远处瞅个大概,近处瞄得仔细,既有大局观,又注重局部视野,再加上各种细节走位。

全局地图是导航;局部地图是视野(躲避行人,红绿灯等特殊情况);amcl是gps(告诉你现在在哪里);

二、amcl

多重影分身之术;

所有分身随机的分布在地图里,rviz里面的PoseArry;机器人移动时,所有的分身也跟随移动,在移动的过程中,会不停的用激光雷达扫描到的身边障碍物和地图进行比对,以判断自己是不是那个正确的位置。比如有的分身走着发现面前一堵墙,再查查地图里自己的位置,这地方没有墙自己的位置八成是错的,于是“嘭”的一声,这个分身就消失了。最终收敛成少量的分身,也就最有可能是机器人位置的真身。

三、异常处理(原地旋转)

导航调试中,最常见的问题莫过于机器人遇到新出现的障碍物时,会不停的原地打转。

recovery_behavior”的机制

recovery_behavior”被激活,通常是出现在机器人面前被大体积的障碍物挡住导航路线的时候。一些局部规划器(local_planner)如果参数设置不合理,就会导致规划不出能绕过障碍的局部路线。

在ROS中,“recovery_behaviors”里默认行为通常会设置为“rotate_recovery”,也就是让机器人原地旋转,用激光雷达去完全的扫描附近的障碍物。

按照“recovery_behavior”设计的机制,当转圈也解决不了问题的时候,最终还是得全局规划器(global_planner)出马,按照现在的囧境,重新规划一条新的全局导航路线;

参考大神:5分钟看懂ROS的Navigation导航系统-云巴巴 (yun88.com)https://www.yun88.com/news/992.html

Navigation--导航机理相关推荐

  1. Silverlight实例教程 - Navigation导航框架系列汇总

    Silverlight实例教程导航框架系列,结合实例讲述Silverlight导航开发基础,该教程不仅仅适用于Silverlight,而且可以被应用于Windows Phone开发领域. 文章列表: ...

  2. Silverlight实例教程 - 理解Navigation导航框架Frame类

    通过"Navigation导航框架开篇"的介绍,可以了解到Silverlight导航框架可被应用于多种场合,最为常见的是实现Silverlight项目内部页面切换.在Silverl ...

  3. ROS Navigation导航包介绍

    Navigation功能包集概述 这是2D的导航功能包集,通过接收里程计数据.tf坐标变换树以及传感器数据,为移动机器人输出目标位置以及安全速度.概念层面上讲,导航功能包集是相当简单的. 它从里程计和 ...

  4. Turtlebot 3 SLAM创建地图及 Navigation导航

    Turtlebot 3 在PC端进行SLAM地图创建及Nagivation导航 首先在PC上运行roscore,在SBC上运行 roslaunch turtlebot3_bringup turtleb ...

  5. React Navigation 导航栏样式调整+底部角标消息提示

    五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬! 这是坚持学习react-native的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是re ...

  6. android上方导航条跳转页面,Native Navigation导航组件的使用说明

    目前稳定版本为1.0版本, 2.0是开发版, 暂时不要用. 支持单页直接跳转, 直接自带顶部导航栏配置(返回,标题栏和右侧按钮), 支持直接跳转到多Tab页面, 支持隐藏显示Tab页, 支持数字气泡. ...

  7. navigation导航中导航栏的设置

    参看:http://blog.csdn.net/mad1989/article/details/41516743 使用导航navigation时,下一页的标题的设置 1.在进入push下一页时,指定标 ...

  8. Navigation: 导航到目的地

    导航到目的地是使用 NavController 完成的,它是一个在 NavHost 中管理应用导航的对象.每个 NavHost 均有自己的相应 NavController. NavController ...

  9. navigation导航栈

    navigation功能包: navigation 栈下的各个功能包的作用: acml:是一个针对在二维移动的机器人的基于概率定位系统.它实现了自适应蒙特卡罗滤波的定位方法,并使用粒子滤波器去跟踪在已 ...

  10. Navigation导航寻路RecastDemo讲解

    在2D游戏中,我们常常使用A星算法,基于方形网格进行寻路. (图:2D游戏中的A星寻路) 但是在3D游戏中,场景巨大,2D的方形网格寻路虽然可用,但效率极低. 这时候,用NavMesh导航网格寻路是最 ...

最新文章

  1. 网站建设想要出类拔萃还要从基础上做创新
  2. 块级格式化上下文(Block Formatting Context)
  3. 分治法:快速排序,3种划分方式,随机化快排,快排快,还是归并排序快?
  4. R语言基础入门(9)之因子类型
  5. 【Java】数组元素的赋值与输出
  6. 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
  7. 央行降息开始 房价下跌不行也要行
  8. 图(用list邻接表表示)的深度优先和广度优先(递归和非递归实现)
  9. 网络安全应急响应-恶意代码分析技术
  10. Computer Network Note
  11. php多层if函数,if函数嵌套计算公式用法
  12. Excel——输入身份证号后三位显示为0的问题
  13. week_07_数据库,JDBC,Utils,Html中文本,超链接,表格,表单,框架,图像标签
  14. CorelDRAW2022增强版CDR2022新版功能
  15. hp打印机一直显示正在打印中_打印机显示正在打印却没反应 - 卡饭网
  16. widows批处理精选
  17. 贪心算法---礼堂的安排
  18. OpenCV双目标定
  19. 使用js、php制作99乘法表
  20. 关于东芝笔记本电脑无法用GHOST的解决办法

热门文章

  1. 那些令程序员泪流满面的瞬间
  2. 深度学习中常见的LOSS函数及代码实现
  3. MySQL 预处理语句prepare、execute、deallocate的使用,执行动态sql
  4. 【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)
  5. 霍纳法则--计算多项式的值
  6. java基础的查缺补漏
  7. 线程锁--普通锁 Lock lock = new ReentrantLock();
  8. postgresql监听
  9. Dynamic ReLU 解读
  10. linux怎么循环执行命令,linux命令:for循环