十四课 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 ...
随机推荐
- C#编程的几个建议
1.属性(properties) 抽象属性可以放在接口的定义里.如: public interface INameValuePair<T> { string Nam ...
- idea的有些路径问题
resource文件在xml的路径 http://www.cnblogs.com/zqr99/p/7642712.html resource文件在io流的读取 this.getClass().getR ...
- bzoj 4556 字符串 —— 后缀数组+主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4556 就是找一个 rk 在一段区间内的前驱和后继: 由于 LCP 还有区间长度的限制,所以可 ...
- 归并排序的JavaScript实现
思想 这是一种分治算法.将原始数组切分成较小的数组,直到每个小数组只有一项,然后在将小数组归并为排好序的较大数组,直到最后得到一个排好序的最大数组. 代码 function mergeSort(arr ...
- PostgreSQL备份
备份与恢复 postgresql自带了两个备份工具: pg_dump:可备份一个指定的database pg_dumpall:可一次性备份所有database数据以及系统全局数据 使用pg_dump ...
- iptables防火墙工作原理
iptables防火墙工作原理 简介:iptables防火墙工作在网络层,针对TCP/IP数据包实施过滤和限制,iptables防火墙基于内核编码实现,具有非常稳定的性能和高效率: iptables属 ...
- Source Insight中文字体设置
Source Insight是一个面向项目开发的程序编辑器和代码阅读工具,它拥有内置的对C/C++, C#和Java等程序的分析,分析你的源代 码并在你工作的同时动态维护它自己的符号数据库,并自动为你 ...
- php小白和菜鸟 上班路上可以看的修行博客
上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...
- Java-Runoob-高级教程:Java MySQL 连接
ylbtech-Java-Runoob-高级教程:Java MySQL 连接 1.返回顶部 1. Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL ...
- 杂项-EMS:CRM
ylbtech-杂项-EMS:CRM CMS是"Content Management System"的缩写,意为"内容管理系统". 内容管理系统是企业信息化建设 ...