ROS学习笔记之——gmapping与amcl

之前博文《ROS学习笔记之——Navigation Stack》已经学习过了ROS中的导航包了,本博文来学习一下amcl定位与gmapping

 

目录

概述

gmapping 建图

订阅话题

发布话题

里程计误差及修正

TF消息

格式规范

TF树的数据类型

amcl定位

订阅主题

发布主题

参考资料


 

概述

在导航中,不可缺少的便是地图与定位。需要知道机器人当前的位置坐标(定位),然后根据已经建立好的地图,通过路径规划来规划出合理的路径

 

 

gmapping 建图

gmapping的作用是根据激光雷达和里程计(Odometry)的信息,对环境地图进行构建,并且对自身状态进行估计。因此它得输入应当包括激光雷达和里程计的数据,而输出应当有自身位置和地图。

http://wiki.ros.org/amcl

源码的地址:https://github.com/ros-perception/slam_gmapping

gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图。

要采用gmapping需要机器人拥有odometry数据以及laser range-finder。slam_gmapping节点会尝试将输入的激光雷达扫描的数据转换到odom frame下。

slam_gmapping采用sensor_msgs/LaserScan Message(http://docs.ros.org/en/api/sensor_msgs/html/msg/LaserScan.html)来构建地图并且发布nav_msgs/OccupancyGrid Message出来(http://docs.ros.org/en/api/nav_msgs/html/msg/OccupancyGrid.html

注意在地图消息中,存在了原点的pose,包括了位置与方向

 

 

订阅话题

1、tf message (http://docs.ros.org/en/api/tf/html/msg/tfMessage.html)目的是为了实现laser,base,odometry之间的变换

<the frame attached to incoming scans> → base_link

usually a fixed value, broadcast periodically by a robot_state_publisher, or a tf static_transform_publisher.

base_link → odom

usually provided by the odometry system (e.g., the driver for the mobile base)

/tf以及/tf_static: 坐标变换,类型为第一代的tf/tfMessage或第二代的tf2_msgs/TFMessage 其中一定得提供的有两个tf,一个是base_framelaser_frame之间的tf,即机器人底盘和激光雷达之间的变换;一个是base_frameodom_frame之间的tf,即底盘和里程计原点之间的坐标变换。odom_frame可以理解为里程计原点所在的坐标系。

2、sensor_msgs/LaserScan Message(http://docs.ros.org/en/api/sensor_msgs/html/msg/LaserScan.html)激光雷达数据,类型为sensor_msgs/LaserScan

/scan很好理解,Gmapping SLAM所必须的激光雷达数据,而/tf是一个比较容易忽视的细节。尽管/tf这个Topic听起来很简单,但它维护了整个ROS三维世界里的转换关系,而slam_gmapping要从中读取的数据是base_framelaser_frame之间的tf,只有这样才能够把周围障碍物变换到机器人坐标系下,更重要的是base_frameodom_frame之间的tf,这个tf反映了里程计(电机的光电码盘、视觉里程计、IMU)的监测数据,也就是机器人里程计测得走了多少距离,它会把这段变换发布到odom_framelaser_frame之间。

因此slam_gmapping会从/tf中获得机器人里程计的数据。

发布话题

1、nav_msgs/MapMetaData Message (http://docs.ros.org/en/api/nav_msgs/html/msg/MapMetaData.html)这是map_metadata,

2、nav_msgs/OccupancyGrid Message(http://docs.ros.org/en/api/nav_msgs/html/msg/OccupancyGrid.html)这是map。感觉跟1的区别是,真在发布的消息,是这个,因为里面还包含了header之类了,除了header外,还有nav_msgs/MapMetaData,就是1了~

3、~entropy (std_msgs/Float64)(http://docs.ros.org/en/api/std_msgs/html/msg/Float64.html)这个是代表了机器人位姿分布的不确定性。

 

在之前博客《ROS学习笔记之——激光雷达SLAM建图》中也谈到了,通过运行下面命令即可实现slam建图

roslaunch turtlebot3_slam turtlebot3_slam.launch

那么具体地,我们来看看这个launch文件的组成(/home/kwanwaipang/catkin_ws/src/turtlebot3/turtlebot3_slam/launch/turtlebot3_slam.launch)

<launch>
  <!-- Arguments -->
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="slam_methods" default="gmapping" doc="slam type [gmapping, cartographer, hector, karto, frontier_exploration]"/>
  <arg name="configura
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值