FishBot记录

71 阅读6分钟

鱼香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)的缩写。

  1. 传感器感知 通过各类传感器实现对环境的感知,比如通过激光雷达获取环境的深度信息。同时可以通过传感器融合来提高位置估计的精度,比如融合轮式里程计、IMU、雷达、深度相机数据等。

  2. 视觉/激光里程计 基本原理是通过前后数据之间对比得出机器人位置的变化。

  3. 回环检测 判断机器人是否到达之前到过的位置,可以解决位置估计误差问题,建图时可以纠正地图误差。

image.png

1.基于滤波,比如扩展卡尔曼滤波(EKF: Extended Kalman Filter)、粒子滤波(PF: Particle Filter)等。

ROS中的gmapping、hector_slam算法都是基于滤波实现的。

2.基于图优化,先通过传感器进行构图,然后对图进行优化。

目前比较主流的是图优化的方法,Cartographer就是基于图优化实现的。图优化相对于滤波,不用实时的进行计算,效率更高,消耗的资源更少,所以在实际场景中使用的更多。

开源库

4.1. Cartographer

github地址:github.com/cartographe…

image.png

4.2. ORB_SLAM2(纯视觉)

github地址:github.com/raulmur/ORB…

4.3 VINS

github地址:github.com/HKUST-Aeria…

Nav2导航

该项目力求以安全的方式让移动机器人从A点移动到B点。Nav2也可以应用于其他应用,包括机器人导航,如下动态点跟踪,在这个过程中需要完成动态路径规划、计算电机的速度、避免障碍、恢复行为

Nav2使用行为树调用模块化服务器来完成一个动作。动作可以是计算路径、控制力、恢复或任何其他与导航相关的操作。这些都是通过ROS Action服务器与行为树 (BT) 通信的独立节点

architectural_diagram-16525447663514.png

一大三小四个服务

一大: 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社区标准,在导航项目中,需要提供两个主要的坐标转换。 mapodom 的坐标变换由定位系统 (定位,建图,SLAM)提供, odombase_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单元格网格。然后搜索该成本地图以计算全局计划或采样以计算局部控制工作。

通过使用成本地图过滤器可以实现以下功能:

  • 机器人永远不会进入的禁区/安全区。
  • 限速区,机器人进入这些区域的最大速度将受到限制。
  • 机器人在工业环境和仓库中移动的首选通道。