zoukankan      html  css  js  c++  java
  • map_server地图包功能和使用

    博客参考 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)

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

    参考资料:

  • 相关阅读:
    MySQL的数据库,数据表,数据的操作
    数组函数
    字符串函数,时间函数,数学函数,数组
    PHP函数
    php类型的相关函数,运算符,条件判断,循环
    PHP数据类型
    vector中erase用法注意事项
    C++11 右值引用&&
    vector中find和find_if的用法 以后再遍历剁手!
    在cocos2d中添加自己的shader教程
  • 原文地址:https://www.cnblogs.com/flyinggod/p/10795457.html
Copyright © 2011-2022 走看看