鱼香ROS
SLAM
地图分类
尺度地图
表示距离,真实世界缩小比例 构建,定位,SLAM
拓扑地图
点与点之间的联系信息,如地铁轨道交通图 路径规划
语义地图
上面两个地图基础上增加语义信息,如红绿灯,斑马线等 人机交互
栅格地图(grid map)
据栅格地图就是一张写满占据率的格子组成的地图 确认有物体是100%,确定没有物体是0,不确定就用值表示占据率
- 占据阈值(occupied_thresh),比如0.65,则表示栅格占据率大于0.65的认为是有障碍物。
- 空闲阈值(free_thresh),比如0.25,则表示栅格占据率小于0.25的认为没有障碍物。
那在free_thresh和occupied_thresh之间的则认为是未知区域(未探索)。
SLAM
SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写。
-
传感器感知 通过各类传感器实现对环境的感知,比如通过激光雷达获取环境的深度信息。同时可以通过传感器融合来提高位置估计的精度,比如融合轮式里程计、IMU、雷达、深度相机数据等。
-
视觉/激光里程计 基本原理是通过前后数据之间对比得出机器人位置的变化。
-
回环检测 判断机器人是否到达之前到过的位置,可以解决位置估计误差问题,建图时可以纠正地图误差。
1.基于滤波,比如扩展卡尔曼滤波(EKF: Extended Kalman Filter)、粒子滤波(PF: Particle Filter)等。
ROS中的gmapping、hector_slam算法都是基于滤波实现的。
2.基于图优化,先通过传感器进行构图,然后对图进行优化。
目前比较主流的是图优化的方法,Cartographer就是基于图优化实现的。图优化相对于滤波,不用实时的进行计算,效率更高,消耗的资源更少,所以在实际场景中使用的更多。
开源库
github地址:github.com/cartographe…
github地址:github.com/raulmur/ORB…
github地址:github.com/HKUST-Aeria…
Nav2导航
该项目力求以安全的方式让移动机器人从A点移动到B点。Nav2也可以应用于其他应用,包括机器人导航,如下动态点跟踪,在这个过程中需要完成动态路径规划、计算电机的速度、避免障碍、恢复行为
Nav2使用行为树调用模块化服务器来完成一个动作。动作可以是计算路径、控制力、恢复或任何其他与导航相关的操作。这些都是通过ROS Action服务器与行为树 (BT) 通信的独立节点
一大三小四个服务
一大: BT Navigator Server
三小:
-
Planner Server,规划服务器,其任务是计算完成一些目标函数的路径。根据所选的命名法和算法,该路径也可以称为路线。说白了就是在地图上找路。 划器的任务是计算完成一些目标函数的路径。根据所选的命名法和算法,该路径也可以称为路线。两个典型示例是计算一个到达目标位姿的规划(例如从当前位置到达一个目标位姿)或者完全覆盖(例如覆盖所有空闲空间的规划)。规划器可以访问全局环境表达和缓存在其中的传感器数据。
- 计算最短路径
- 计算完整覆盖路径
- 沿稀疏或预定义路线计算路径
-
Controller Server,控制服务器,在ROS 1中也被称为局部规划器,是我们跟随全局计算路径或完成局部任务的方法。说白了就是根据找的路控制机器人走路。 控制器,在ROS 1中也被称为局部规划器,是我们跟随全局计算路径或完成局部任务的方法。控制器有权访问局部环境表达,以尝试计算要跟随的基准路径的可行控制工作
- 跟随路径
- 使用里程计坐标系中的检测器与充电站(桩)对接
- 登上电梯
- 与某个工具的接口
-
Recovery Server,恢复服务器,恢复器是容错系统的支柱
两大代价地图
全局代价地图(Planner server)
- Static Map Layer:静态地图层,通常都是SLAM建立完成的静态地图。
- Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
- Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物。
局部代价地图(Controller Server)
- Obstacle Map Layer:障碍地图层,用于动态的记录传感器感知到的障碍物信息。
- Inflation Layer:膨胀层,在障碍地图层上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物。
相关概念
生命周期 (或被管理的,更正确的) 节点是ROS 2独有的
它们是包含状态机转换的用于加载和卸载ROS 2服务器的节点。这有助于确定ROS系统启动和关闭的状态是否正常。
生命周期节点框架在整个项目中被广泛使用,所有服务器都使用它。如果可能的话,所有ROS系统最好使用生命周期节点。
av2中,默认进行状态估计的组件是AMCL (Adaptive Monte Carlo Localization)自适应蒙特卡洛定位
根据ROS社区标准,在导航项目中,需要提供两个主要的坐标转换。 map
到 odom
的坐标变换由定位系统 (定位,建图,SLAM)提供, odom
到 base_link
的坐标转换由里程计系统提供。
简而言之,REP-105至少必须为机器人构造一个包含map
-> odom
-> base_link
-> [sensorframes]
的完整 的TF树。TF2是 ROS 2中的时变坐标变换库,Nav2使用TF2来表达和获取时间同步的坐标变换。全球定位系统 (GPS、SLAM、动作捕捉Motion Capture) 的工作是至少要提供 map-> odom
的坐标转换。然后,里程计系统的作用是提供 odom
-> base_link
的坐标转化。关于 base_link
的其余坐标转换应该是静态的,并应在 URDF 中定义。
成本地图是包含来自未知、空闲、占用或膨胀成本的单元格的规则2D单元格网格。然后搜索该成本地图以计算全局计划或采样以计算局部控制工作。
通过使用成本地图过滤器可以实现以下功能:
- 机器人永远不会进入的禁区/安全区。
- 限速区,机器人进入这些区域的最大速度将受到限制。
- 机器人在工业环境和仓库中移动的首选通道。