0%

机器人操作系统ROS_5_机器人导航

机器人SLAM

SLAM(simultaneous localization and mapping), 也称为CML(Concurrent Mapping and Localization), 即时定位与地图构建, 或并发建图与定位
问题可以描述为:
将一个机器人放入未知的环境中的未知位置, 是否有办法让机器人一边移动一边逐步描绘出此环境完全的地图
(所谓完全的地图 – a consistent map: 是指不受障碍行进到房间可进入的每个角落)

ROS的二维导航功能包, 简单来说, 就是根据输入的里程计等传感器的信息流机器人的全局位置, 通过导航算法, 计算得出安全可靠的机器人速度控制指令
但是, 如何在特定的机器人上实现导航功能包的功能, 却是一件较为复杂的工程
作为导航功能包使用的必要先决条件, 机器人必须运行ROS, 发布tf变换树, 并发布使用ROS消息类型的传感器数据
同时, 为了让机器人更好的完成导航任务, 开发者还要根据机器人的外形尺寸和性能, 配置导航功能包的一些参数

机器人必要的配置:

  • ROS: 确保机器人安装了ROS框架
  • tf变换(sensortransforms): 导航功能包要求机器人以tf树的形式发布各个相关参考系的变换关系 tf变换
  • 传感器信息(sensor sources): 导航功能包需要才起机器人的传感器信息, 以达到实时避障的效果
  • 里程计信息(odometry sources): 导航功能包要求机器人发布nav_msgs/Odometry格式的里程计信息, 同时也要发布相应的tf变换
  • 机器人控制器(base_controller): 导航功能包最终的输出是针对机器人geometry_msgs/Twist格式的控制指令
  • 地图(map_server): (不必须)

准备工作

  • 可以对机器人进行控制, 通过消息rosmsg show geometry_msgs/Twist
  • 导航功能包要求机器人必须有激光雷达等测距设备
  • 导航功能包以长方形或圆柱形机器人模板进行开发, 其他外形机器人可以正常使用但可能功能不佳

传感器信息

  • rosmsg show sensor_msgs/LaserScan
  • 传感器信息

里程计信息

  • 里程计根据传感器获取的数据来预估机器人随时间发生的位置变化
  • 比如, 利用旋转编码器计算机器人运行的距离
  • rosmsg show nav_msgs/Odometry
  • pose: 机器人当前位置坐标, 以及用于矫正误差的协方差矩阵
  • twist: 机器人三轴的线速度与角速度

仿真平台创建

  • 运行gazebo
  • Edit -> Building Editor
  • 可绘制仿真环境

gmapping

  • ROS开源社区汇集了多种SLAM算法, 可以直接用于二次开发, 其中最为常用和成熟的是gmapping功能包
  • 下载方法: sudo apt-get install ros-kinetic-gmapping
  • 优点: Gmapping可以实时构建室内地图, 在构建小场景地图所需的计算量较小且精度较高
  • 缺点: 随着场景增大所需的粒子增加, 因为每个粒子都会携带一幅地图, 因此在构建大地图时所需内存和计算量都会增加, 因此不适合构建大场景地图

地图构建

自主导航

导航框架:
导航的关键是机器人定位和路径规划两大部分
针对这两个核心, ROS提供了以下两个功能包

  • move_base 实现机器人导航中最优路径规划
  • amcl 实现二维地图中机器人的定位

安装导航框架:
sudo apt-get install ros-kinect-navigation

move_base是ROS中完成路径规划的功能包, 主要由以下两大规划器组成:

  • 全局规划路径: 根据给定的位置和全局地图进行总体路径规划
  • 本地实时规划: 实际情况中不可能完全按照全局路线进行运动, 针对障碍物, 地图信息, 碰撞, 综合评价标准选取最优路径

acml
自主定位, 即机器人在任意状态下都可以推算出自己在地图中的位置
同样需要了解amcl提供的话题, 服务与参数

amcl与里程计定位的区别:

  • 里程计定位: 只是处理/base与/odom之间的TF变换
  • amcl定位: 可以估算机器人在地图坐标系/map下的位资信息, 提供/base, /odom, /map之间的TF变换
Thank you for your reward !