ROS自定义地图(CAD、手绘等)
0x00 概述
在前面的文章中,我们介绍如何自动导航时,都是基于使用gmapping或者hector_mapping创建的地图。当然使用其他的建图方法创建的地图也可以,但是目前为止,无论使用哪种建图方法。通过激光雷达或深度摄像头建立的地图仍然是存在误差的。下面我们可以来回顾一下看看使用gmapping建立的地图,如下图所示,可以看到右侧的地图就是扫描建立的地图,与左侧的地图基本上相同。现在可以思考一下,我们有没有可能不用激光雷达来扫描建图(这个slam过程真的是挺麻烦的),因为现在基本上在设计施工时都是有设计图纸的,如果我们将这些设计图纸拿来,修改一下直接就当作导航地图来用。这样不是就省去建地图的步骤了嘛,而且地图的与实际环境100%匹配(除非施工建造时没有按照图纸来做):
0x01 创建自定义地图
数据部分记录图像每个像素的灰度值,按照图像从上到下,从左到右的顺序依次存储每个像素的灰度值,对于像素灰度值的表示P2格式和P5格式有所不同。下面来重点介绍P5格式:
一般从网上下载的照片格式是png或jpg的,这里我介绍一种简单的方式来将这些格式转换为pgm格式。需要安装一下KolourPaint4画图工具,这个软件就跟我们常用的画图软件类似,安装软件的命令如下:
sudo apt-get install kolourpaint4
安装好该软件后,就可以来打开了,下图就是这个软件的界面:
(3)使用软件转换图片格式
使用KolourPaint软件打开png格式或jpg格式的地图软件,如下图所示:
然后使用图片另存为pgm格式,如下图所示:
最后来查看下该图片格式是否为P5:
(4)创建对应的yaml配置文件
这个yaml配置文件编写比较简单,我们按照gmapping中地图的yaml格式来修改就可以了。下面来看看自定义地图的yaml内容:
这里来简单介绍下yaml中两个参数的意义:
image:要加载的地图,这里的路径可以写绝对路径也可以写相对路径。这里由于pgm图片和yaml文件都放在同一个文件夹中,所以就可以直接写home.pgm,不用加其他路径了。
0x02 编写launch文件
<!--
Copyright: 2016-2019 ROS小课堂 www.corvin.cn
Author: corvin
Description: 该启动文件用于加载自定义的home地图,这样就可以进行自动导航了.
History: 20190102: initial this file.
-->
<launch> <!-- load home map --> <node pkg="map_server" type="map_server" name="stdr_load_home_map" args="$(find stdr_navigation)/maps/home.yaml"> <remap from="map" to="/amcl/map" /> </node>
</launch>
下面来看看最后用来最终测试用的launch文件home_map_nav.launch:
<!--
Copyright: 2016-2019 ROS小课堂 www.corvin.cn
Author: corvin
Description: STDR simulator robot auto navigation with amcl and move base packages. load home_map to test.
History: 20190102: 加载home_map地图进行自动导航测试.
-->
<launch> <!-- load stdr simulator with robot0 --> <include file="$(find stdr_launchers)/launch/home_map_robot_gui.launch" /> <!-- startup move_base node --> <include file="$(find stdr_move_base)/launch/stdr_move_base.launch" /> <!-- load home map --> <include file="$(find stdr_navigation)/launch/load_home_map.launch" /><!-- startup amcl node --> <include file="$(find stdr_amcl)/launch/home_map_amcl.launch" />
</launch>
其实这里所有的代码都已经提交到stdr_ws代码仓库中,如果你已经下载了本代码的话,就可以在本地直接拉取最新代码。不过目前我的代码都是优先往kinetic分支上提交,indigo分支会逐渐放弃维护。
0x03 测试查看效果
要想开始测试,我们首先需要启动上面编写的launch文件,使用如下命令来启动测试:
roslaunch stdr_navigation home_map_nav.launch
下面通过动图来查看导航效果,我们可以直接在Rviz中使用“2D Nav Goal”功能来选取导航的目的地:
0x04 References
[1]. corvin_zhang. 10.在STDR中加载其他地图. http://www.corvin.cn/1047.html
[2]. Netpbm. PGM Format Specification. http://netpbm.sourceforge.net/doc/pgm.html
[3]. 编号1993. Python pgm解析和格式转换. https://blog.csdn.net/u012005313/article/details/83685584
[4]. suonikeyinsu. ppm\pgm格式. https://www.cnblogs.com/black-mamba/p/6755295.html
ROS自定义地图(CAD、手绘等)相关推荐
- 自定义View进阶-手绘地图(二)
前一篇说到了使用自定义ViewGroup实现手绘地图,没看过的可以移步,因为本篇会用到上一篇的部分内容 自定义View-手绘地图(一) 和前一篇一样,实现图片的操作经过同样的操作.onMeasure, ...
- 小程序地图覆盖手绘地图的解决方法
引言 手绘地图顾名思义就是手工绘制的地图,比普通的地图更有观赏性和生动性,通过把特定的地点绘制出来,兼具实用和纪念性,同时更加具有可看性.一般在旅游景点有很多这种纸质版手绘地图.比如这种: 问题 如 ...
- WebGIS——OpenLayers 3 地图叠加自定义卫星/航拍/手绘地图(任意瓦片图)
使用OpenLayers 3 第一步 首先创建Html文件的结构,在body中放入一个Div作为地图显示的容器,调整其宽度高度使其全屏显示 html页结构如下,其中id为map的div为显示地图的容器 ...
- H5手绘地图(自定义栅格图层)踩坑
手绘地图简介 手绘地图顾名思义就是手工绘制的地图,比普通的地图更有观赏性和生动性,通过把特定的地点绘制出来,兼具实用和纪念性,同时更加具有可看性.一般在旅游景点有很多这种纸质版手绘地图.比如这种: 前 ...
- 使用leaflet插件绘制手绘地图h5
手绘地图简介: 手绘地图顾名思义就是手工绘制的地图,比普通的地图更有观赏性和生动性,通过把特定的地点绘制出来,兼具实用和纪念性,同时更加具有可看性. 前期开发准备: 手绘地图绘制. 需要一个专门做手绘 ...
- 手绘地图制作的关键点之“图层覆盖”
前面介绍了<景区手绘地图(电子地图.智慧导览系统)如何制作>以及<景区手绘地图的绘制流程>,接下来介绍一些手绘地图制作的关键点. 手绘地图最关键的一点,就是把手绘地图准确的覆盖 ...
- 手绘地图深度解析:类型、风格、功能、价值、制作流程、智慧导览
本文概要:文本尝试系统性.多角度.全方位的介绍一下现在流行的手绘地图系统. 作者:轻轻的烟雾(z281099678) 一.手绘地图定义 什么是手绘地图?或者说,手绘地图到底是什么样的? 手绘地图首先是 ...
- 手绘地图如何制作为电子地图实现智慧导览系统之切割瓦片图
此系列文章主要简述一下如何把手绘地图的静态图片文件制作成为动态的电子地图,进而实现智慧导览. 因为手绘地图是一张静态的图片文件,而且往往很大,因此要转为手绘地图,才更方便用户查看.那么到底如何才能实现 ...
- Android View与SurfaceView的手绘板制作
最近学习了如何使用View与SurfaceView制作简单的手绘板,在此做个小结. 自定义VIew实现手绘板: 首先是使用View来实现手绘板: package com.app.superxlcr.m ...
最新文章
- 输出区间内素数的c语言程序,1137C/C++经典程序训练7---求某个范围内的所有素数...
- 探索Julia(part14)--学生得分描述性统计案例
- 小菜鸡进阶之路.文件操作遇到坑
- uri=/struts-tags 出错
- qt判断读入的字符串是否含有英文_重复的子字符串
- 一个完整的项目流程图_工程建设项目史上最完整的全流程图,必收藏备用!
- 被全球 iPhone 用户讨伐 49 天后,苹果终于为 iOS 带来手动关闭降频功能!
- 《Go程序设计语言》- 第10章:包和go工具
- php+检测是否是手机浏览器,php检测是否是移动设备的浏览器
- Oracle11g 体系结构
- Stetman读paper小记:Backdoor Learning: A Survey(Yiming Li, Yong Jiang, Zhifeng Li, Shu-Tao Xia)
- 网站被黑 怎么检测代码含有后门
- 好看的女孩男生拍照姿势大全
- 利用ffmpeg实现Windows音视频录制
- js唤醒facebook与line的分享
- ps – report process status
- 霍常亮教你开发淘宝客app第3节
- element-ui 下拉菜单带搜索框示例(亲测可用)
- WiFi吞吐量的测试
- 线性代数计算器C语言程序,新手作品:行列式计算C语言版