在slam_gmapping中使用Log数据创建地图
本文介绍使用机器人记录的tf变换和激光扫描数据来建立2D地图.并在ROS的图形化模拟环境rviz中通过重新回放记录的数据作为机器人真实传感器采集的输入,来观测地图动态创建过程.
1.ROS gmapping工具
ROS提供的gmapping包是用来生成地图的,它是对著名的开源openslam包在ROS框架下的一个实现.这个包提供了对激光设备的slam,根据激光设备的输入和姿态数据从而建立一个基于网格的2D地图.它需要从ROS系统监听许多Topic,并输出一个Topic,即map(nav_msgs/OccupancyGrid),这也是Rviz的输入Topic.
下载这个包的命令如下:sudo apt-get install ros-indigo-slam-gmapping
2.硬件要求
本文采用的是模拟数据,不需要任何硬件需要.
gmapping需要使用实际的机器人获取激光或者深度数据.通常这些激光距离探测器价格比较昂贵,ROS推荐使用的SCIP2.2, Hokuyo Model 04LX, 30LX ,SICK LMS2xx Lasers 价格都巨贵无比,而且尺寸都较大。ROS使用的廉价机器人TurtleBot使用的则是深度相机Kinnect来模拟,其价格在接近千元.
3.数据包准备过程
1)数据包的准备
下载ROS提供的激光数据采集记录文件
wget http://pr.willowgarage.com/data/gmapping/basic_localization_stage.bag
2)使用机器人创建自己的bag包
a)给机器人安装激光器,确保可以发布变换数据,且可以遥控操作
b)启动扫描和变换数据记录
rosbag record -O mylaserdata /base_scan /tf
当前目录将创建一个名为mylaserdata_<DATE>-topic.bag的文件
c)让机器人动起来
d)kill掉rosbag用户可以看到记录文件已经创建
4.操作过程
1)启动节点管理器master
roscore
2)配置ROS启用重放数据中的时间而非本机时间,影响整个系统所有时间API的输出结果.在默认情况下,ROS使用ubuntu系统的时间,也就是墙上时钟时间(wall clock).但我们重播一个记录历史文件时,里面记录的是历史时间,所以我们需要告诉ROS从现在起开始启用模拟时间.
rosparam set use_sim_time true
3)运行slam_gmapping节点,它将在base_scan主题上监听激光扫描数据并创建地图,base_scan是模拟器rosbag发布的.

Note:在PR2上里程坐标系名字为odom_combined
命令为:rosrun gmapping slam_gmapping scan:=base_scan _odom_frame:=odom_combined
4)重新打开一个终端,使用模拟器rosbag启动bag包回放,将数据提供给slam_gmapping节点.
rosbag play --clock basic_localization_stage.bag
5)启动rviz,在左下方选择add,然后选择map,创建一副空地图;接着指定rviz的topic为/map可以监听到地图数据
rosrun rviz rviz

6)使用map_server功能包的map_saver保存新地图到磁盘(等rosbag结束后)
rosrun map_server map_saver -f my_map

此时可以看到本地地图map.gpm已经生成,可以用图像浏览器(gimp, eog, gthumb, 等等)打开查看。例如eog my_map1.pgm
注意:最后别忘了重新设置use_sim_time参数,即使用命令:rosparam set use_sim_time false
5.下面来看一下显示的节点图
1.
2.
3.
4.
5.
6.

查看它的服务和话题

在slam_gmapping中使用Log数据创建地图的更多相关文章
- 在 SharePoint 2013 中针对地理位置字段创建地图视图
在 SharePoint 2013 中针对地理位置字段创建地图视图 了解如何通过在 SharePoint 2013 列表中使用地图视图来显示位置信息.您可以通过 SharePoint 用户界面 (UI ...
- 创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。
创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息. <html> & ...
- 在Microsoft Power BI中创建地图的10种方法
今天,我们来简单聊一聊“地图”. 在我们日常生活中,地图地位已经提升的越来越高,出门聚餐.驾驶.坐车.旅行......应运而生的就是各种Map APP. 作为数据分析师,我们今天不讲生活地图,要跟大家 ...
- C语言中怎么将文件里的数据创建到(读到)链表中?
定义的结构体: struct student { ]; //学生学号 ]; //学生姓名 struct student *next; //next 指针 指向 struct student 类型的变量 ...
- 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...
- Sql server中用现有表中的数据创建Sql的Insert插入语句
之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER. 介绍 一些时候,你想导出一些现有表中 ...
- iOS中偏好设置的创建,数据写入与读取
NSUserDefaults与NSDictinary? 应用通过NSUserDefaults用键值对的方式来读取和保存偏好设置数据,与通过键从NSDictionary对象中获取数据一样,不同之处在于N ...
- 通过Python提取10000份log中的产品数据
一.背景 协助产品部门在10000份产品log信息中提取产品的SN号.IMEI号.ICCID号到Excel表格中. 1.l原始的og内容: 2.提取后的Excel表格: 二.实现 1.思路 a.for ...
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
随机推荐
- WS-* 协议
Web服务作为实现SOA中服务的最主要手段.跟Web Service相关的标准,它们大多以“WS-”作为名字的前缀,所以统称WS-*. Web服务最基本的协议包括UDDI,WSDL和SOAP,通过它们 ...
- sourcetree 分支的创建合并
sourcetree 分支的创建合并,提交 https://blog.csdn.net/qq_34975710/article/details/74469068 sourcetree测试版本的配置忽略 ...
- LVS+Keepalived搭建
LVS+Keepalived搭建 原理说明 (推荐): http://www.cnblogs.com/likehua/archive/2014/06/19/3796849.html http://ou ...
- Instantiate实例化的注意事项
_obj= Resources.Load("xxx") as GameObject;Instantiate(_obj); 这里的_obj对象和 _obj= Instantiate( ...
- PHP5.6 安装Yaf 2.3.5
Yaf 安装 PHP5.6 安装Yaf 2.3.5 1.下载 https://github.com/laruence/yaf 2.phpize /usr/bin/phpize 3.配置 ./confi ...
- 为何指针初始化为NULL
指针初始化为NULL,指向NULL指针区(大小64K),如果读取或写入这个地址,会引发内存写保护异常 版权声明:本文为博主原创文章,未经博主允许不得转载.
- C#三层架构详细解剖
深入浅出C#三层架构(转) 本文用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用.写本文的目的,不是为了说明自己的这个方法有多对,而是希望给那些初学三层架构却不知从何入 ...
- C# IP地址去掉端口号
string Ip1 = "192.168.0.199:7777"; string Ip2 = Ip1.Remove(Ip1.IndexOf(':'));
- 第十三章 Spring消息(待续)
···············
- pycharm的自定义python模板
#!/usr/bin/env python # encoding: utf-8 #set( $SITE = "http://blog.csdn.net/morgana" ) &qu ...