在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通信,在最后的时候说到本篇将会结合地图. ...
随机推荐
- 十二、python沉淀之路--内置函数
1.abs函数,求绝对值. a = abs(-3) print(a) 返回:3 2.all函数:判断是否是可迭代对象. 官方解释:Return True if bool(x) is True for ...
- Yii 一些小的问题
是否验证 ======================= $model->save()执行时,如何不要验证? 我用的是表单模型,表单模型已经验证了,保存时不想用表模型验证,如何不让表模型验证.也 ...
- erlang分布式例子
抄袭自 http://www.blogjava.net/killme2008/archive/2007/06/29/127099.html 简单的说,就是 主机上需要同时启用短节点名,或者长节点名 保 ...
- Jmeter录制HTTPS 补充
Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...
- Spring Session实现Session共享下的坑与建议
相信用过spring-session做session共享的朋友都很喜欢它的精巧易用-不依赖具体web容器.不需要修改已成项目的代码.笔者在使用spring-session的过程中也对spring-se ...
- 1141 PAT Ranking of Institutions
题意:给出考生id(分为乙级.甲级和顶级),取得的分数和所属学校.计算各个学校的所有考生的带权总成绩,以及各个学校的考生人数.最后对学校进行排名. 思路:本题的研究对象是学校,而不是考生!因此,建立学 ...
- Oracle sqlldr数据加载
1 sqlldr 传统路径:sqlldr会利用sql插入为我们加载数据 直接路径加载:sqlldr不适用sql,直接格式化数据块,绕开undo,避开redo,最快的方法就是并行直接路径加载 sqlld ...
- mysql整数类型
数值类型 1.整数类型 整型类型的后面的宽度,不是存储宽度,是显示宽度,不够位数用0添加,够位数使用原数据 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用: ...
- 使用Easy-creds创建伪AP
项目地址:https://github.com/brav0hax/easy-creds 打开文件夹 安装easy-creds root@sch01ar:/sch01ar/easy-creds# ./i ...
- python's fifteenth day for me 递归函数
递归... def age(n): if n == 1: return 18 else: return age(n-1)+2 # 反复调用函数age() print(age(4)) l = [1,3, ...