博客参考 http://wiki.ros.org/map_server 和 https://www.ncnynl.com/archives/201708/1897.html

1. 安装map_server

sudo apt-get install ros-kinetic-map-server

2. 具体使用说明

map_server使得地图的数据变成 ros 的service 可以被调用。其中以两种方式存储。一个是yaml文件,他存储了数据的元数据。一个是image file   他编码了地图的占据性情况。其中 image file 中白色像素是空的,黑色像素是被占据的。色彩或者灰色的是被接受的。

如上可以看到map_server是一个ROS 节点,可以从磁盘读取地图并使用ROS service提供地图,此图是rviz订阅/map服务可视化之后的结果

map_server概要

  • map_server包提供了一个map_server ROS 节点, 该节点通过ROS 服务器方式提供地图数据。
  • 该包还提供了map_saver命令行utility, 使用该工具可将动态创建的地图保存成文件。

地图格式

  • 该包中的工具使用过的地图会被存储在两个文件中。
  • 一个是YAML格式的文件描述地图meta-data并命名image文件。
  • 另一个image文件用来编码occupancy data。

Image 格式

  • Image 指定包含occupancy data的image文件路径,可以是绝对路径,也可以是相对于YAML文件的对象路径

  • 白色像素表示自由,黑色像素格表示占用,两种颜色之间的单元表示未知。

  • 彩色和灰度图像都适合,但大多数地图是灰度图像(尽管它们存储的好像是以彩色的形式),YAML文件的阈值划分为3类;阈值是在map_server内部完成的。

  • 比较阈值参数时,图像单元占用概率的计算如下:occ = (255 - color_avg) / 255.0 (color_avg是用8位数表示的来自于所有通道的平均值)。

  • 如果图像是24位颜色,一个单元的颜色0x0a0a0a有一个0.96的概率,这是一个完全占用((255-(0*16+10))/255.0=0.96)。

  • 如果像素颜色是0xeeeeee,则占用概率是0.07, 这意味着几乎没有被占用。

  • 当ROS消息通信时,占用度被表示为范围为[0-100]的整数,0的意思完全是自由的,100的意思完全占用,特殊值-1完全未知。

  • Image data 通过 SDL_Image库读取,取决于sdl_image在特定平台上提供的内容,且支持多种格式。

  • 一般来说,Image data 支持大多数流行的图像格式。

  • 一个必须要注意的例外是PNG格式在OS X平台上不能被支持。

YAML格式

image: testmap.png
resolution: 0.1
origin: [0.0, 0.0, 0.0]
occupied_thresh: 0.65
free_thresh: 0.196
negate: 0

需要的字段:

  • image:指定包含occupancy data的image文件路径; 可以是绝对路径,也可以是相对于YAML文件的对象路径 。

  • resolution:地图分辨率,单位是meters/pixel 。

  • origin:图中左下角像素的二维位姿,如(x,y,yaw),yaw逆时针旋转(yaw=0表示没有旋转)。系统的很多部分现在忽略yaw值。

  • occupied_thresh:像素占用率大于这个阈值则认为完全占用。

  • free_thresh:像素占用率比该阈值小被则认为完全自由。

  • negate:无论白色或黑色,占用或自由,语义应该是颠倒的(阈值的解释不受影响)。

  • negate : Whether the white/black free/occupied semantics should be reversed (interpretation of thresholds is unaffected)

命令行工具

(1) Map_server

  • map_server是一个ROS 节点,可以从磁盘读取地图并使用ROS service提供地图。

  • 目前实现的map_server可将地图中的颜色值转化成三种占用值: 自由 (0), 占用 (100), 和 未知 (-1).

  • 这个工具的未来版本可能会使用0和100之间的值来表达更细致的占用度。

  • 命令语法

rosrun map_server map_server mymap.yaml

可视化需要,roscore 和 rviz的配合

  • 注意:map data可以通过指定topic或者 service来提取。service的方式最后可能要被废弃。
  • 发布的主题
[map_metadata (nav_msgs/MapMetaData)][3] 
  • 通过指定话题获取地图的metadata
[map (nav_msgs/OccupancyGrid)][4]
  • 通过指定话题获取地图

  • 服务

static_map ([nav_msgs/GetMap][5]) 
  • 通过该服务来获取地图

  • 参数

~frame_id (string, default: "map") 
  • 设置已发布的地图的坐标系(The frame to set in the header of the published map. )

(2) map_saver

  • map_saver可以把地图保存到磁盘。 例如:从SLAM mapping 服务中保存.

  • 命令语法

rosrun map_server map_saver [-f mapname]
  • Map_saver获取地图数据,并把它写到map.pgm和map.yaml。

  • 使用-f选项为指定地图的存放目录和名称。

  • 命令示例
rosrun map_server map_saver -f /home/xxx/map/mm
  • /home/xxx/map/为地图目录路径,mm为地图名称,生成后得到mm.yaml和mm.pgm两个文件

  • 订阅话题

map (nav_msgs/OccupancyGrid)

  • 通过指定话题来获取地图

参考资料:

ROS Navigation中的map_server地图包功能和使用的更多相关文章

  1. 利用HBuilder开发基于MUI的H5+ app中使用百度地图定位功能

    定位功能有两种方法: 首先要初始化内置地图: var map = new plus.maps.Map("map"); 这里黄色的map是html里面的id: <div id= ...

  2. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  3. 如何在BI中增加“路线地图”并进行数据分析?

    随着客户的需求越来越"百变",最近在做大屏设计的葡萄陷入了困境. 近期客户提出的需求是想在BI工具中增加 "路线地图"展示功能并进行数据分析. 不仅如此,这个& ...

  4. ros navigation stack 各个包的作用

    nav_core 该包定义了整个导航系统关键包的接口函数,包括base_global_planner, base_local_planner以及recovery_behavior的接口.里面的函数全是 ...

  5. (十八)WebGIS中清空功能和地图定位功能的设计以及实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 当地图中增加了很多元素后,对不同的元素需要进行一定的控制,最 ...

  6. AngularJS进阶(十九)在AngularJS应用中集成百度地图实现定位功能

    在AngularJS应用中集成百度地图实现定位功能 注:请点击此处进行充电! 前言 根据项目需求,需要实现手机定位功能,考虑到百度业务的强大能力,遂决定使用百度地图第三方服务. 添加第三方模块的步骤与 ...

  7. map_server地图服务器

    http://wiki.ros.org/map_server 概述 map_server提供map_server ROS节点,它提供地图数据作为一个ROS服务器.也提供map_saver命令行功能,能 ...

  8. 在ionic/cordova中使用百度地图插件

    在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation. 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境 ...

  9. 在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~

    在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~ 不需要额外购买GPS设备. 将手机GPS数据通过蓝牙传输给计算机使用,当然通过类似方 ...

随机推荐

  1. BZOJ3293: [Cqoi2011]分金币(数学)

    3293: [Cqoi2011]分金币 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1596  Solved: 969[Submit][Status ...

  2. 事务的隔离级别以及oracle中的锁

    事务的概念及特性 事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语 ...

  3. (译)KVO的内部实现

    09年的一篇文章,比较深入地阐述了KVO的内部实现.   KVO是实现Cocoa Bindings的基础,它提供了一种方法,当某个属性改变时,相应的objects会被通知到.在其他语言中,这种观察者模 ...

  4. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 20165222

    Exp0 Kali安装 安装时没进行截图,只有最终结果.包含共享文件夹,拼音输入法,网络也能正常使用. . 遇到的问题 安装时,安装程序提示找不到网卡. 我猜测应该是我的主机正在使用,程序无法检测到, ...

  5. 【thrift】thrift入门初探--thrift安装及java入门实例

    转载:https://www.cnblogs.com/fingerboy/p/6424248.html 公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门 ...

  6. linux-一篇文章完成lnmp环境的编译安装

    lnmp环境搭建 前置条件 操作系统安装:CentOS 6.8 64位最小化安装. 配置好IP.DNS.网关.主机名 配置防火墙,开启80.3306端口 关闭访问墙 service iptables ...

  7. 解决crontab不加载环境变量问题

    公司需要做异构库数据同步,由于之前实际使用过,且字段类型也兼容,满足业务场景,使用了阿里开源数据同步工具:datax,服务器上crontab定时脚本执行. 由于crontab只加载/ect/envir ...

  8. Spring 部署Tomcat 404 错误解决方案

    将Spring项目部署到tomcat后,访问网页出现404错误 HTTP Status 404 – Not Found The origin server did not find a current ...

  9. ruby的代码风格

    http://stylesror.github.io/ 大部分同意,有小部分,不敢苟同.

  10. win10开启开发人员模式

    工具: win10 方法如下: 1.在Windows10系统桌面,点击开始菜单,然后在弹出窗口中选择“设置”菜单项 2.在打开的设置窗口中,选择“更新和安全”图标,并点击打开更新和安全窗口 3.在打开 ...