机器人导航简介

  导航可以说是机器人最基本的功能之一,简单来说,导航就是机器人基于地图,实现从起始点前进到目标点的过程,这个过程中要求不发生碰撞并满足自身动力学模型(如不超过速度、加速度等限制)。

  将导航的任务进行细分,首先机器人在未知环境中需要使用激光传感器(或者是深度传感器)进行地图构建,然后根据构建的地图进行定位,有了地图和定位的基础,就可以根据目标点以及感知的障碍物信息进行路径规划了。我们可以将导航的要素归纳如下:

  • 地图
  • 定位
  • 感知
  • 路径规划。

地图

  下面这张图是ROS中的一个地图,其实也就是一张普通的灰度图像。图像上的黑色像素表示障碍物,白色像素表示可行区域,灰色是未探索的区域。

  一般来说,地图是通过SLAM(同时定位与建图)来构建的,这里就不展开了。

定位

  定位是对机器人位置和姿态(一般简称位姿)的测量或估计,简单来说,通过定位,机器人可以知道自己在哪儿以及所面朝的方向。

感知

  机器人是通过传感器来感知周围环境的。下面三个图是机器人常用的传感器,从左至右分别是超声波传感器,激光雷达,深度摄像头(与传统的摄像头区别在于加入了深度信息,可以测量像素点距离摄像头的距离)。

  通过这些传感器的数据,就可以对墙壁、路障等障碍物进行感知识别。

ROS导航框架

  这是ROS wiki上的一张图,介绍了ROS导航的整体工作框架:

  白色是已经提供给你的节点,灰色是可选的,蓝色是根据平台的差异而不同的节点。

  首先,navigation框架里面的核心是中间的move_base,这是导航最重要的一个package,它负责运动规划,这里面有global plannerlocal planner,把路径规划问题分解为全局和局部两部分来解决,而这两个planner做出决策,要参考全局和局部的costmap代价地图。然后move_base还包括了一些recovery behaviors,让机器人在某些情况下,比如说碰到障碍物,卡住,会采取一些恢复措施。

  我们先把move_base看成一个整体进行一定程度的简化,如下图所示。可以认为move_base就是一个路径规划的工具,然后分析move_base需要什么输入,然后它能输出给我们什么数据。

  有这么几个数据是必须给的,一个是TransForms(tf),路径规划当然得知道各个坐标系的变换关系了,尤其是当前机器人在地图的什么位置。那其中必不可少的是map->odom->base之间的tf,还有base到其他各个机器人零部件的tf。

  还有就是Odemetry(odem)的数据,刚才tf只提供了位置和方向信息,但是实际路径规划,还要考虑速度和角速度,所以这里专门有一个odom来提供位置方向、线速度、角速度。这个odom注意,是一个topic,不是tf里的odom frame。类似的还有map,既是tf里的frame,也是一个topic。

  除了odom之外,还有一个Laser,可以是激光雷达,可以是深度摄像头的点云,主要是用来帮助构建costmap,实现避障。

  所以你需要提供的数据,通常来说就是这么几个,/map,/tf, /scan, /odom,以及目标点的信息。

  那navigation 输出什么呢?很简单,输出的就是路径规划算出来的当前速度,/cmd_vel。

Navigation Stack

Navigation Stack是一个ROS的功能包集,里面包含了ROS在路径规划、定位、地图、异常行为恢复等方面的package,如下表所示。这么多package,你可能会觉得很乱,不过不用担心,在使用中其实还是比较简单的。

包名 功能
amcl 定位
Fake_localization 定位
map_server 提供地图
move_base 路径规划节点
nav_core 路径规划接口类
base_local _planner 实现了Trajectory Rollout和DWA两种局部规划算法
dwa_local _planner 重新实现了DWA局部规划算法
parrot_planner 实现了较简单的全局规划算法
navfn 实现了Dijkstra和A*全局规划算法
global_planner 重新实现了Dijkstra和A*全局规划算法
clear_costmap _recovery 实现了清除代价地图的恢复行为
rotate_recovery 实现了旋转的恢复行为
move_slow _ and_clear 路径规划接口类
costmap_2d 二维代价地图
voxel_grid 三维小方块
robot_pose _ekf 机器人位姿的卡尔曼滤波

参考资料

[1] http://wiki.ros.org/move_base

[2] http://wiki.ros.org/navigation

机器人导航学习历程(一)简介相关推荐

  1. 在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十二章 机器人导航(仿真)

    系列文章目录 第一章 ROS空间创建.helloworld的实现.开启多个节点 第二章 话题通信 第三章 服务通信 第四章 参数服务器 第五章 常用指令 第六章 通信机制实操 第七章 ROS通信机制进 ...

  2. 机器人SLAM导航学习-All in one

    参考引用 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022. 本博客未详尽之处可自行查阅上述书籍 一.编程基础篇 1. ROS 入门必备知识 ROS学习笔记(文章链接汇总) 2 ...

  3. 【学习笔记】ROS-移动机器人导航相关

    [学习笔记]ROS-移动机器人导航相关 一.定位 二.导航 1. move_base现存问题 三.可视化 1. Rviz显示机器人运动轨迹方法: 一.定位 二.导航 1. move_base现存问题 ...

  4. ROS学习笔记08、机器人导航仿真(slam、map_server、amcl、move_base与导航消息介绍)

    文章目录 前言 一.导航概述 1.1.导航模块 1.2.导航之坐标系 二.导航实现 准备工作(安装导航包和新建工程包) 2.1.SLAM建图 2.1.1.认识gmapping 2.1.2.实操 2.2 ...

  5. ROS机器人SLAM学习:Gazebo定位与导航仿真

    ROS机器人SLAM学习:Gazebo定位与导航仿真 一. 在 gazebo 中构建一个用于建图和导航的虚拟环境,可以使用 Building Editor工具创建,也可以使用其他功能包中已有的虚拟环境 ...

  6. ros学习之多机器人导航(仿真)

    系列文章目录 (一).从solidworks转urdf文件,在gazebo中添加小车模型 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 系列文章目录 目录 前言 一.插件 二 ...

  7. 基于《ros机器人开发实践》的学习,ros建图,机器人导航

    在这之前先仔细学习书中的内容,运行相关教学包,试一试这种感觉,培养自己的兴趣,觉得这个做起来还是挺有趣的,下面这些图是运行书中的展示效果:主要是ros建图,与机器人实现导航功能. #下面小编开始自己的 ...

  8. ROS机器人操作系统学习笔记(一)--基本概念

    ROS机器人操作系统学习教程(一)–基本概念 1. 基本概念 1.1 ROS背景 机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便.功 ...

  9. 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享

    我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...

最新文章

  1. LeetCode Surrounded Regions(floodfill算法)
  2. DreamWeaver下如何应用CSS样式
  3. iOS开发 UIPanGestureRecognizer手势抽象类
  4. 【转】C++学习三 模板类出错总结(Missing template arguments before ‘L‘)
  5. Docker 创建新的开源社区,开发 Compose Specification
  6. 使用Fiddler自定义百度云分享提取码
  7. Kibana和logstash实时日志查询、收集与分析系统
  8. c语言编译器官网,C语言编译器app_c语言编译器app官网下载_c语言编译器手机版app-多特软件站安卓网...
  9. 用c语言双向循环链表,C语言实现双向循环链表
  10. 计算机械效率的公式四种,初级中学物理计算公式定律整编汇总.doc
  11. python 生孩子朋友圈_新生儿出生朋友圈说说,生孩子报喜唯美句子
  12. echarts柱状图加上数量
  13. 电脑用久了卡,学会这四招解决你的电脑卡顿问题!
  14. uniapp开发微信公众号H5 定位功能
  15. 2017华为实习生招聘机考模拟题——0交换排序
  16. 小白看了直呼细节--CPP“引用”
  17. 林大陈宇老师的原创高斯
  18. 中晖DVSONE AI-MIS算法中间件简介
  19. matlab 找不到 mcr,如何在没有MCR / MATLAB的情况下在C#中使用MATLAB编译的DLL?
  20. 按关键字批量杀进程shell脚本

热门文章

  1. Python 音频随机播放器脚本
  2. 服务器被一堆系统登录_饥荒联机云服务器开档
  3. ES数据架构与关系数据库Mysql对比,例如mysql库对应es索引
  4. 浅谈下载access数据库的攻与防
  5. java安卓自动关机_android自动关机代码
  6. XILINX FPGA OV5640 摄像头驱动(一)
  7. EXCEL打开文件显示“文件已损坏,无法打开。”
  8. matlab 将图片转为视频
  9. Spring AOP思想的理解和简单实现
  10. 关于C++学习的思考