理解ROS导航软件包集

   ROS导航软件包的主要目的是将机器人从初始位置移动到目标位置,在移动的过程中不会与周围环境发生任何碰撞。

ROS导航软件包附带了几种导航相关的算法实现,它们可以帮助我们轻松实现移动机器人的自主导航。

  用户只需要提供机器人的目标位置和来自轮子编码器、IMU、GPS等传感器获得的测量数据,激光扫描器的数据流,

以及其他传感器的数据流,例如激光雷达数据或者来自Kinect等传感器的3D点云数据,导航软件包的输出是控制移动的

速度命令,这些命令将控制机器人移动到目标位置。导航软件包集包含了一些标准算法的实现,例如SLAM、A*(star)、

Dijkstra、amcl等,可以直接用于我们的应用程序。

安装ROS导航软件包集使用以下命令安装:

$sudo apt install ros-melodic-navigation

ROS导航硬件的要求

ROS导航软件包集被设计成一个通用的软件包集,机器人需要满足一些基本的硬件要求,如下:

*导航软件包在差速驱动和完整约束(即机器人的总DOF等于机器人可控的DOF)方面表现更好,此外,

应通过以下形式的速度命令控制移动机器人:x:velocity(线速度)、y:velocity(线速度)和theta:velocity(角速度)。

*机器人需要配备视觉(RGB-D)或激光传感器,用来构建周围环境的地图。

*导航软件包集在方形或圆形的移动平台上工作将表现更好,当然它也可以在任意形状的平台上工作,但性能无法得到保证。

如下图是从ROS网站(http://wiki.ros.org/navigation/Tutorials/RobotSetup)上获取的导航软件包集的基本组成框图,我们可以看到

每个功能块的用途以及如何为自定义机器人配置导航软件包集:

      导航软件包集的框图

下面对作为导航软件包集输入功能模块的说明:

*里程计数据源(odometry source): 机器人的测距数据给出了机器人相对与起始位置的距离,主要的测试数据源于来自轮子编码器、

IMU、2D/3D相机(视觉测距)。里程计数据需要以nav_msgs/Odometry的消息形式发送到导航软件包集。里程计信息主要用于

控制机器人的位置和移动速度,里程计数据是导航软件包集必须的输入数据。

*传感器数据源:我们必须给导航软件包集提供激光扫描数据或点云数据来扫描机器人周围的环境,这些数据与里程计数据一起构建机器人的全局和局部代价地图。

这里使用的主要传感器是激光雷达或者Kinect3D传感器,数据需要封装成sensor_msgs/LaserScan或者sensor_msgs/PointCloud的形式。

*传感器坐标变换/tf:机器人需要使用ROStf来发布机器人坐标系的变换关系。

*底盘控制器:底盘控制器的主要功能是转换导航软件包集的输出数据,该消息是geometry_msgs/Twist类型的消息,它将会被转换成机器人相应的马达速度。

导航软件包集的可选节点有amcl和地图服务器,它们可以帮助机器人定位以及保存/加载机器人的地图。

使用导航软件包  在使用导航软件包集之前,我们已经讨论了MoveIt!和move_group节点,在导航软件包集中也有一个类似move_group的节点,它被称为move_base节点,

上图中我们清楚地看到move_base节点从传感器、tf和里程计中获得输入数据,这与我们在MoveIt!中看到的move_group节点很类似。

理解move_base节点move_base节点来自名为move_base的软件包,该软件包的主要功能是在其他导航节点的帮助下将机器人从当前位置移动到目标位置。

该软件包中的move_base节点将全局规划和局部规划连接在一起进行路径规划,如果机器人在移动时被某些障碍困住动不了,那么它将

开始调用rotate-recovery软件包,此时需要将全局代价地图和局部代价地图结合起来。

move_base节点基本上实现了SimpleActionServer。它以geometry_msgs/PoseStamped消息的形式发送目标位置信息,

我们可以使用SimpleActionClient节点向此节点发送目标位置信息。

move_base节点从名为move_base_simple/goal的话题订阅目标位置信息,如上图所示,该话题是导航软件包集的一个输入数据。

当此节点接收到一个目标位置后,它将连接到如global_planner、local_planner、recovery_behavior、global_costmap和local_costmap之类的组件,

以生成输出结果(geometry_msgs/Twist类型的速度指令),并将其发送给底盘控制器,从而控制机器人移动到目标位置。

下面是move_base节点连接的所有软件包列表:

*global_planner: 该软件包提供了函数库和节点,用来在地图上从机器人的当前位置到目标位置规划一条最优化路径。

该软件包实现的路径查找算法有A*、Dijkstra等,这些算法用于查找从机器人当前位置到目标位置的最短路径。

*local_planner: 该软件包的主要功能是使用全局规划路径中的部分局部路径为机器人提供导航,局部规划将获取里程计数据、传感器数据、

然后给机器人控制器发送合适的速度命令来完成全局规划路径的一部分,局部规划软件包是轨迹滑出(Trajectory Rollout)算法和动态窗口算法(Dynamic Window Algorithms,DWA)的具体表现。

*rotate-recovery: 该软件包通过执行360度旋转来帮助机器人从本地障碍中恢复。

*clear-costmap-recovery: 该软件包也是用来帮助机器人从本地障碍中恢复,但它是通过将当前导航包集使用的代价地图转换为静态地图后清除代价地图来达到摆脱障碍的目的。

*costmap-2D: 该软件包的主要用途是建立机器人周围环境地图,机器人只能通过地图来规划路径,在ROS中,我们创建2D或3D的栅格地图,用栅格单元表示周围的环境,

每个栅格都有一个概率值,表示该区域是否被占据。costmap-2D软件包可以通过订阅激光扫描或者点云的传感器来建立周围环境的栅格地图,这里的全局代价地图用于全局

路径规划,局部代价地图用于局部路径规划。

下面是与move_base节点交互的其他软件包:

*mao-server: 该软件包保存和加载costmap-2D软件包生成的地图。

*AMCL: AMCL是一种在地图上定位机器人位置的方法,这种方法使用粒子滤波器在概率论的帮助下跟踪机器人相对于地图的位置。

在ROS系统中,AMCL是通过接收sensor_msgs/LaserScan消息来建立地图的。

*gmapping : 该软件包是Fast SLAM算法的一种实现,它使用激光扫描数据和里程计数据构建一个2D占据栅格地图。

使用导航软件包集 我们认识ROS导航软件包集中每个模块的功能,接下来我们来看整个系统是如何工作,机器人需要发布一个合适的里程计数据、tf信息和激光传感器的数据,

并且需要一个底盘控制器和周围环境的地图。

如果所有的需要都满足,我们就可以开始使用导航软件包了。

在地图上定位

机器人将要执行的第一步就是在地图上进行定位,AMCL就是机器人用来在地图上定位的软件包。

发送目标和路径规划

获取了机器人的当前位置后,我们就可以向move_base节点发送一个目标位置,然后move_base节点将此目标位置发送给全局规划器。

该规划器将规划一条从当前机器人位置到目标机器人位置的路径。

这个规划是根据地图服务器提供的全局代价地图进行规划的,全局规划器将此路径发送给局部规划器,

然后局部规划器将执行全局规划的每段路径。

局部规划器从move_base节点获取里程计信息和传感器数据,并为机器人找出一个无碰撞的局部规划,局部规划器从局部代价地图

获取信息,局部代价地图用来监视机器人周围的障碍物。

碰撞恢复行为

全局代价地图和局部代价地图与激光扫描数据关联在一起,如果机器人在某一处卡主了,那么导航软件包

将触发恢复行为节点,,例如通过清除代价地图恢复或者通过原地旋转恢复。

发送速度命令

局部规划器以包含线速度和角速度的twist消息(geometry_msgs/Twist)的形式向机器人底盘控制器发送

生成的控制移动命令,机器人底盘控制器负责将twist消息转换为相应的马达速度。

原文地址:https://www.cnblogs.com/tanshengjiang/p/12329378.html

时间: 2024-12-28 02:50:41

理解ROS导航软件包集的相关文章

ROS知识(2)-理解ROS系统结构

ROS系统的架构主要被设计和划分成三部分,没一部分都代表一个层级的概念: 文件系统级(FileSystem Level) 计算图级(Computaion Graph Levell) 开源社区级(Community Level) 第一级是文件系统级.你将会使用这一组概念来理解ROS的内部构成,文件夹结构,以及工作所需要的核心文件. 第二级是计算图级,体现的是进程和系统之间的通信.你将会看到ROS各个概念和功能,包括建立系统,处理各类进程,与多台计算机通信等. 第三级是开源社区级.这个层级是非常重要

由浅到深理解ROS(1)

ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能实现.进程间消息传递和程序包管理等.此外,它还提供相关工具和库,用于获取.编译.编辑代码以及在多个计算机之间运行程序完成分布式计算.结合笔者对ROS的理解,想与大家一起讨论,共同把ROS理解的更准确,一起进步. 对ROS的误解: 1.ROS不是一种编程语言.实际上,ROS的主要代码由C++语言编写,

(转)由浅到深理解ROS(5)- launch启动文件的理解与编写

ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点.通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件.一般把启动文件存储在取名为launch的目录中. 每个XML文件都必须要包含一个根元素.根元素由一对launch标签定义:<launch> - <launch>元素都应该

(转)ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动:全局导航(global)和局部导航(local).这些导航算法通过代价地图来处理地图中的各种信息,导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环境的障碍信息.一个costmap进行全局规划,在整个环境做长期的规划,而另一个是用于局部规划和避障. 全局导航: 在已建立的地图上做一个远距离目标的路径规划. 局部导航: 在正在建立的地图上做近距离目标同时要实时避开障碍物

ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动:全局导航(global)和局部导航(local).这些导航算法通过代价地图来处理地图中的各种信息,导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环境的障碍信息.一个costmap进行全局规划,在整个环境做长期的规划,而另一个是用于局部规划和避障. 全局导航: 在已建立的地图上做一个远距离目标的路径规划. 局部导航: 在正在建立的地图上做近距离目标同时要实时避开障碍物

由浅到深理解ROS(2)

ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Package和Manifest,即包和清单文件. (1)Package是组织ROS代码的最基本单位,每一个Package都可以包括库文件,可执行文件,脚本及其它的一些文件. (2)Manifest文件是对Package的相关信息的一个描述.他提供了Package之间的依赖性,以及一个包的元信息,比如版本.维

ROS 导航包各功能汇总

1.voxel_grid:未使用 voxel_grid provides an implementation of an efficient 3D voxel grid. The occupancy grid can support 3 different representations for the state of a cell: marked, free, or unknown. Due to the underlying implementation relying on bitwis

ROS学习笔记三(理解ROS节点)

要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点即为一个可执行文件,可以通过ROS和其他节点进行通信: messages:消息,当订阅或者发布一个topic时使用的数据类型: topics:话题,节点可以发布信息到topics或者从topics那里订阅信息: master:节点管理器,ROS的name service,提供服务,例如让不同的节点可

由浅到深理解ROS(3)-命名空间

全局命名空间:/rosout前面的反斜杠“/”表明该节点名称属于全局命名空间.之所以叫做全局名称因为它们在任何地方(包括代码.命令行工具.图形界面工具等的任何地方)都可以使用.无论这些名称用作众多命令行工具的参数还是用在节点内部,它们都有明确的含义.这些名称从来不会产生二义性,也无需额外的上下文信息来决定名称指的哪个资源.如/turtle1/cmd_vel 由斜杠分开的一系列命名空间(namespace),每个斜杠代表一级命名空间.命名空间用于将相关的计算图源(节点.话题.服务和参数统称为计算图