map_server

概述

   map_server提供map_server ROS节点,它提供地图数据作为一个ROS服务器。也提供map_saver命令行功能,能动态生成保存到文件中的地图。

地图格式

   包中通过工具操作的地图是以成堆的文件存储的。YAML文件描述地图的元数据,并命名image文件。Image文件编码占用数据。

Image 格式

Image 以对应单元的颜色描述世界中每个单元的占用状态。白色单元格表示自由,黑色单元格表示占用,两种颜色之间的单元表示未知。彩色和灰度图像都采用,但是大部分地图都是灰度图像(尽管它们存储的好像是以彩色的形式)。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((255-(14*16+14))/255.0=0.07),完全没占用。

通过ROS消息通信时,占用表示为区间[0,100]的一个整数,0表示完全自由,100表示完全占用,特殊值-1表示完全未知。

图像数据经由SDL_Image读取;依靠SDL_Image提供的一个特殊平台,支持格式改变。一般来说,大部分流行的图像格式都广泛支持。一个需要注意的例外是PNG在OS X上不支持。

YAML格式

YAML格式最好用一个简单而完全的例子来解释:

  1. image: testmap.png  
  2. resolution: 0.1  
  3. origin: [0.0, 0.0, 0.0]  
  4. occupied_thresh: 0.65  
  5. free_thresh: 0.196  
  6. negate: 0  

 

必填的字节

image:   到包含占用信息的image文件的路径;可以是绝对路径,也可以是到YAML文件的相对路径。

resolution:地图的分辨率,meters/pixel

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

occupied_thresh:单元占用的概率大于这个阈值则认为完全占用。

free_thresh: 单元占用的概率小于这个阈值则认为完全自由。

negate: 不论白色/黑色,自由/占用,semantics(语义/符号)应该被反转(阈值的解释不受影响)。

命令行工具

Map_server

  Map_server是一个ROS节点,从磁盘读取一个地图,并通过ROS服务提供地图。

Map_server的当前实现是转换地图图像数据中的色彩值为三元占用值:free(0), occupied(100), unknown(-1)。这个工具的未来版本是使用0到100之间的值来与占用的更精细层次交流。

Usage

  1. map_server <map.yaml>  

 

Example

  1. rosrun map_server map_server mymap.yaml     // 参数 mymap.yaml 可以改为这个.yaml文件的绝对路径(如果找不到的话),然后需要在这个yaml文件的第一行修改.pgm文件的路径。

注意,地图数据可能通过任一个锁存话题(意味着只发送给每个订阅者一次)或者服务来检索。服务最终可能会被淘汰。

发布话题

map_metadata (nav_msgs/MapMetaData)

     通过这个锁存话题来接受地图元数据(map metadata).

map (nav_msgs/OccupancyGrid)

    通过这个锁存话题接收地图。

服务

static_map (nav_msgs/GetMap)

由该服务获取地图。

参数

~frame_id (string, default: "map")

  设置在已发布地图的头(header)的坐标系。

Map_saver

Map_saver 保存地图到磁盘,例如从SLAM mapping 服务中保存。

Usage

map_saver [-f mapname]

Map_saver获取地图数据,并把它写到map.pgm和map.yaml。使用-f选项为输出文件提供一个不同的base name(基础名字)。

Example

  1. rosrun map_server map_saver -f mymap  

订阅话题

map (nav_msgs/OccupancyGrid) 

通过这个锁存话题获取地图。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 错误:无法启动类型为[map_server/map_server]的节点:map_server。 这个错误通常是由于ROS环境变量没有正确设置或者缺少必要的ROS软件包导致的。您可以尝试以下步骤来解决这个问题: 1. 确保您已经正确安装了map_server软件包。您可以使用以下命令来检查: ``` rospack find map_server ``` 如果返回的路径存在,则说明map_server软件包已经正确安装。 2. 确保您已经正确设置了ROS环境变量。您可以使用以下命令来检查: ``` echo $ROS_PACKAGE_PATH ``` 如果返回的路径包含了map_server软件包的路径,则说明ROS环境变量已经正确设置。 3. 如果以上两个步骤都没有解决问题,您可以尝试重新编译map_server软件包。您可以使用以下命令来重新编译: ``` cd <map_server_package_directory> catkin_make ``` 其中,<map_server_package_directory>是map_server软件包的路径。 如果您仍然无法解决问题,请尝试在ROS论坛或者ROS官方文档中寻求帮助。 ### 回答2: 这个错误出现在ROS环境中,表明无法启动“map_server”的节点类型。map_server是一个ROS节点,用来将地图文件发布到ROS系统中。而出现这种错误的原因通常有以下几种可能: 1. 没有正确安装map_server包:在ROS系统中,每个包都包含了一些节点或者其他的功能模块。如果没有安装map_server包,那么就无法启动该节点类型。因此,你需要确保已经正确安装了map_server。 2. 没有在ROS环境中加载map_server包:即使你已经安装了map_server包,但是如果没有在ROS环境中加载该包,系统也无法启动该节点类型。所以你需要通过修改bashrc文件或进行其他的设置来加载map_server包。 3. 地图文件路径错误:当你要使用map_server发布地图文件时,需要指定正确的地图文件路径。如果路径错误,也会引起无法启动该节点类型的错误。 要解决这个问题,你可以采用以下几种方法: 1. 确认安装和加载map_server包以及其他相关的ROS包。 2. 检查地图文件路径是否正确,保证地图文件存在并可以被正确访问。 3. 在ROS环境中运行“rospack find”命令来查找map_server包的安装路径,并在调用节点时使用绝对路径。 4. 删除ROS环境中的缓存文件,然后再次尝试启动节点。 总之,这是一个比较常见的ROS错误,引起错误的原因有很多,需要仔细排查才能解决。将上述方法逐一尝试,应该能够成功启动map_server节点。 ### 回答3: “error: cannot launch node of type [map_server/map_server]: map_server”的错误通常意味着ROS无法启动map_server节点。map_server节点是ROS中一个非常重要的软件,它用于创建和管理地图,但是由于某些原因,它无法启动。 出现这种错误的主要原因之一是因为map_server软件包没有正确安装或者安装错误。要解决这个问题,需要重新安装map_server软件包。可以使用以下命令安装: sudo apt-get install ros-<distro>-map-server 请将“<distro>”替换为您正在使用的ROS发行版的名称。例如,对于ROS Kinetic,应该运行: sudo apt-get install ros-kinetic-map-server 如果在安装期间遇到任何问题,请检查ROS软件包路径是否正确设置。 另一个可能的原因是由于权限问题或者在启动时未正确设置ROS环境变量。在这种情况下,您可以尝试更改map_server节点的权限或重新配置ROS环境变量,确保所有参数正确设置。这通常可以通过重启终端解决,或者重新启动ROS。 总之,出现“error: cannot launch node of type [map_server/map_server]: map_server”的错误通常是由于map_server软件包安装错误或ROS环境变量设置错误导致的,我们可以通过重新安装软件包或重新设置ROS环境变量来解决它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值