十四课 slam&gmapping
gmapping
根据激光数据(或者深度数据模拟的激光数据)建立地图,在turtlebot里面应用的就是深度数据模拟的激光数据.如果没有激光雷达的话可以使用Kinect.
SLAM
机器人在未知环境中从一个未知位置开始移动,在移动的过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图.
这里面有两个主题和一个服务
主题1下的消息类型,有map_load_time:用来保存地图载入的时间;resolution:地图的分辨率,width:地图的宽,height:地图的高.origin:包含地图的原点位置信息
主题2是map主题,该消息类型下有一个header,一个info包含地图的相关信息,data,以及地图的数据.
服务dynamic_map 服务类型为nav_msgs/GetMap.srv其类型为nav_msgs/Occupancy/Grid用来获得占据网格地图.
slam_gmapping:它是在一个完整平台上使用的一个包,它通常需要里程计信息.而hector_mapping它不需要包含里程计信息,手拿着就可以实现gmapping的过程.这节课主要讲hector_mapping,在讲完导航之后讲slam_gmapping.二者是差不多的,熟悉了其一,对另外一个就也熟悉了.
slam_gmapping:需要订阅一个激光雷达的scan主题的数据,这是必须的,还包括一个tf主题,它要求监听来自odometry的tf变换;需要发布的主题有地图的相关信息map_metadata以及地图数据map主题;服务dynamic_map用来获得地图;要求的tf变换,一个是base_laser->base_link,它通常用的是transform static publisher,前面讲过如何使用它来广播两个固定坐标系之间的变换.以及base_link->odom;提供的tf变换是map->odom;其优点在于定位准确;缺点:需要完整硬件平台支持.
hector_mapping:需要订阅一个激光雷达的scan主题的数据,这是必须的,由于它不需要odometry的相关信息,故就不需要tf.需要发布的主题有地图的相关信息map_metadata以及地图数据map主题;除此之外还有两个要发布的主题slam_out_pose估计位置信息,但不包含协方差,以及poseupdate包含了正在分布估计,因为它没有里程计信息,故用上面上个主题来估计自己的位置. 服务dynamic_map用来获得地图;base_laser->到base_frame也是两个固定坐标系的变换;提供的tf变换是map->odom;定位不够准确;手持激光雷达即可实现.
实现gmapping
硬件要求
B配置实现gmapping
首先下载hector_slam的包
包含roplidar的启动文件
<include file="$(find rplidar_ros)/launch/rplidar.launch"/>
要求的tf变换
<node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0.0 0.0 0.0 0 0 0.0 /odom /base_link 10"/>
第一个从static_transform_publisher到map_to_odom的变换可以不指定.
第二个从/base_link 到/laser的变换是必须指定的
<node pkg="tf" type="static_transform_publisher" name="base_frame_laser" args="0 0 0 0 0 0 /base_link /laser 10"/>
参数全是0,说明他们刚开始是在一起的,后面的10代表发布的频率.
下面包含一个gmapping 的默认文件
<include file="$(find hector_mapping)/launch/mapping_default.launch"/>
下面是rviz的配置文件
<node pkg="rviz" type="rviz" name="rviz" args="-d rviz_cfg.rviz"/>
上面完整的形式
下面来看一下gmapping默认的launch文件
tf_map_scanmatch_transform_frame_name它的默认值是/scanmatcher_frame,tf_map_scanmatch_transform它的默认值为true,它要求提供从map到scanmatch的tf变换,如果没有它tf会出现问题.
base_frame默认的是base_link,以及odom_frame默认的也是base_link,因为它没有里程计信息,pub_map_odom_transform设置为true,就是发布map_odom_transform的变换,scan_subscriber_queue_size的默认值为5,即队列的长度为5,指定激光雷达发布的主题为scan_topic为scan.地图的大小map_size为2048,下面是相关的配置文件,启动的节点是hector_mapping,下面是坐标系的名字,再下面是tf的使用;下面是地图的大小,地图参数的更新,广播的配置.
修改rplidar驱动文件(没有该驱动文件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
修改的原因在于这样我们才可以从scan的header中获得它的坐标系,
下面切换到真是的机器上来实现导航
sudo chmod 777 /dev/tty/USB0
roslaunch hector_slam_launch demo.launch
十四课 slam&gmapping的更多相关文章
- Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持
Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第三十四课:地形
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十四课:扩展
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十四课:图形字体
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)
序: 还是要抽出时间看书的,迷上了豆豆的作品,最近在看<天幕红尘>,书中主人公的人生价值观以及修为都是让我惊为叹止.很想成为那样的人,但是再看看自己每天干的事,与时间的支配情况,真是十分的 ...
- 第四十四课:jQuery UI和jQuery easy UI
jQuery UI是jQuery官方提供的功能效果和UI样式.作为官方出的东西,它一直没有被人们看重,一是它没有datagrid,tree等UI库必备的东西,二是它修改太过频繁,体积庞大.其实它所有以 ...
- 第三十四课:jQuery Deferred详解2
上一课主要分析了jQuery1.51版本的jQuery Deferred.在jQuery1.6中,jQuery Deferred添加了两个方法,always,pipe. always用来添加回调,无论 ...
- 第二十四课:jQuery.event.remove,dispatch的源码解读
本课还是来讲解一下jQuery是如何实现它的事件系统的.这一课我们先来讲一下jQuery.event.remove的源码解读. remove方法的目的是,根据用户传参,找到事件队列,从里面把匹配的ha ...
随机推荐
- android中asynctask的使用实例
参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html MainActivity.java imp ...
- 批处理判断是否有.net环境
@echo off (echo 已安装.NET Framework) else (echo 未安装.NET Framework) pause>nul
- 【转】JMeter基础之——录制脚本
Jmeter 是一个非常流行的性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:很它的优点也有很多: ● 开源,他是一款开源的免费软件,使用它你 ...
- memcache两种客户端比较
1.memcached client for java 客户端API:memcached client for java 网址:http://www.whalin.com/memcached(我从 h ...
- 微信小程序的基本认识
小程序与公众号的区别 小程序,不支持关注,消息推送等营销手段. 小程序更倾向于产品,公众号更倾向于营销. 在系统权限方面,小程序能够获得更多. 小程序与APP的区别 小程序,面向微信用户.app面向所 ...
- keepalived 预防脑裂检测脚本
1 检查vip [root@mysql2 keepalived]# cat /etc/keepalived/check_brain_keepalived.sh #!/bin/bash # 检查脑裂的脚 ...
- selenium webdriver 的事件处理
package www.zr.com; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; imp ...
- jqurey datatable tableTools 自定义button元素 以及按钮定义事件
版本 1.10.4 "dom": 'T<"clear">lfrtip', "tableTools": { //"sSw ...
- ECommon.Dapper 轻量级的dapper扩展
我们都知道Dapper这个orm框架,但是我们也知道他的扩展目前没有特别好的,今天我就推荐一个轻量级的很方便使用的一个扩展叫做 ECommon.Dapper,它是ECommon的一个类库,关于ECom ...
- 【转】OpenGL随笔(1)—— mipmap 详解
注:本文使用的所有 OpenGL 函数来自 OpenGL 4.5,优先使用 DSA. 使用 mipmap 时,OpenGL 根据被映射对象的大小(单位是像素),自动决定使用纹理图的哪个分辨率级别.mi ...