在移动机器人仿真中,二维地图真值可以用来评价slam建图结果,也可以直接给路径规划算法提供输入。

利用gazebo进行仿真时,有很多方法都可以获取静态仿真环境的二维地图真值,本文将对以下链接:

hyfan1116/pgm_map_creator

进行使用测试。

该仓库的README对安装编译和使用已经讲解得比较清楚了:

pgm_map_creator

Create pgm map from Gazebo world file for ROS localization

Environment

Tested on Ubuntu 16.04, ROS Kinetic, Boost 1.58

Usage

Add the package to your workspace

  1. Create a catkin workspace
  2. Clone the package to the src folder
  3. catkin_make and source devel/setup.bash

Add the map and insert the plugin

  1. Add your world file to world folder
  2. Add this line at the end of the world file, before </world> tag:
    <plugin filename="libcollision_map_creator.so" name="collision_map_creator"/>

Create the pgm map file

  1. Open a terminal, run gzerver with the map file
    gzserver src/pgm_map_creator/world/<map file>
  2. Open another terminal, launch the request_publisher node
    roslaunch pgm_map_creator request_publisher.launch
  3. Wait for the plugin to generate map. It will be located in the map folder

Map Properties

Currently, please update the argument value in launch/request_publisher.launch file.

Acknowledgements

Gazebo Custom Messages
Gazebo Perfect Map Generator

总结起来就是,将该ros程序编译好后,在你需要获取地图真值的gazebo world文件中添加一个插件:

<plugin filename="libcollision_map_creator.so" name="collision_map_creator"/>

再运行gazebo打开此world文件(一般我都是通过roslaunch启动gazebo并加载world文件的),以程序包自带的udacity_mtv环境为例:

最后执行本ros包中的

roslaunch pgm_map_creator request_publisher.launch

就可以在指定位置生成一张二维栅格地图(pgm格式):

其间,打开gazebo仿真环境的窗口会有反馈:


显示生成地图成功。

下面解析一下request_publisher.launch文件中的参数:

<arg name="map_name" default="map" />
<arg name="save_folder" default="$(find pgm_map_creator)/maps" />

这两项是输出的地图文件名和文件路径。

<arg name="xmin" default="-15" />
<arg name="xmax" default="15" />
<arg name="ymin" default="-15" />
<arg name="ymax" default="15" />

这几项是生成地图的仿真环境坐标范围。

<arg name="scan_height" default="5" />

这项指的是从多高的高度向下扫描仿真环境。这里涉及了本程序获取仿真环境二维地图真值的原理:在以上坐标范围内从“scan_height”高度均匀向下发射射线,如果碰到了障碍物,那么二维栅格地图上这一格就为Occupied,通俗来讲就是这一格是黑色的。

<arg name="resolution" default="0.01" />

最后是二维栅格地图的分辨率,此处0.01表示栅格边长为1厘米。

需要注意的是,本程序检测的是gazebo模型中的<collision>元素,并且是模型<collision>元素的上表面,所以首先要保证模型有合理的碰撞属性,其次要注意发射射线的scan_height高度,否则地图上无法如愿显示出应有物体。

另外,从代码中看collision_map_creator.cc#L89:

    double dist;std::string entityName;ignition::math::Vector3d start, end;start.Z(msg->height());end.Z(0.001);

射线的终点在0.001(1毫米)高度,也就是说如果地面ground_plane模型放置在0米高度,那么高度大于1mm的物体都会被检测到。换句话说,如果地面ground_plane模型或者其他充当地板的模型放置得高于1mm,那么二维地图中该地面范围内就会一片漆黑。可以通过修改代码中此处的射线终点高度,或者将终点高度也作为参数开放出来解决这一问题。

  • 最后附上github中另一个获取gazebo二维地图真值的程序:
    st_gazebo_perfect_map_generator

如何生成gazebo仿真环境的二维地图真值相关推荐

  1. gazebo+turtlebot3+gmapping建二维地图

    仿真环境 操作系统:ubuntu 18.04 ROS版本:melodic Gazebo版本:Gazebo9 仿真机器人:turtlebot3 安装一些包 sudo apt-get install ro ...

  2. UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)

    简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...

  3. asp.net 生成、解析条形码和二维码

    asp.net 生成.解析条形码和二维码 原文 asp.net 生成.解析条形码和二维码 一.条形码 一维码,俗称条形码,广泛的用于电子工业等行业.比如我们常见的书籍背面就会有条形码,通过扫描枪等设备 ...

  4. 微信生成专属海报(专属二维码)

    通过get请求获取专属海报 /*** 获取专属海报** @param mid 会议编号* @param openId 邀请人唯一码* @return*/@SneakyThrows@ApiOperati ...

  5. qrcode生成一个带有图片的二维码

    import qrcode     qr = qrcode.QRCode(     version=2,     error_correction=qrcode.constants.ERROR_COR ...

  6. 使用vue-qr生成带中间带图片的二维码

    1.安装 npm install vue-qr --save 2.在页面中使用 logoSrc:二维码中间的logo图 size:图片尺寸 text:二维码地址或内容 margin:二维码图片的空白边 ...

  7. 微信公众号怎么生成能追踪效果的二维码?

    微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...

  8. 生成带有红黄绿码的二维码,并转base64

    生成带有红黄绿码的二维码,并转base64 一.依赖(pom) <dependency><groupId>com.google.zxing</groupId>< ...

  9. ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )

    前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...

最新文章

  1. Android Stdio换源以及配置项目
  2. 【STM32】FreeRTOS 任务切换
  3. python加法怎么写_51NOD 大数加法以及python写法
  4. 小米6指主板图示_小米MIX2手机不开机,修过没修好,通病问题教你一坨锡就能搞定...
  5. mysql密码高级_mysql高级操作
  6. 用FileZilla Server搭建ftp服务器
  7. 分布问题(二元,多元变量分布,Beta,Dir)
  8. python常用代码入门-入门十大Python机器学习算法(附代码)
  9. 做python自动化得时候怎么添加断言_python接口自动化(二十四)--unittest断言——中(详解)...
  10. 计算机专业毕业设计题目大全
  11. 【疑难解决】将设备通过Ehome协议接入EasyCVR,级联后视频无法播放如何解决?
  12. PDF文件太大,如何将它压缩得更小一点?
  13. java 比较日期大小(方法之一compare to 备忘)
  14. 阿里云Landing Zone系列--1云治理中心使用
  15. java封装-猫狗宠物店案例
  16. Java查找算法-17-二分查找
  17. 微信小程序下拉加载更多 带后台 解决加载的内容 是新加载的view中最后一个view
  18. 网上办公自动化|OA系统
  19. 绝了,hutool导出excel 图片居然没有调用方法
  20. 学习servlet【续】

热门文章

  1. java中laber字体颜色设置,重写jxl中可用的颜色实现自定义颜色
  2. DEC6713开发板的摸索(1)
  3. 微信小程序跳转公众号
  4. mac 微信 QQ 截图 问题
  5. 电脑副业能做什么?一台电脑能做的副业
  6. 由浅入深,全面解析ThreadLocal
  7. 软件中存在的技术风险
  8. cad修改快捷键_【扮家家云渲染】CAD快捷键修改干货教程
  9. Vue Eslint语法检测工具
  10. 腾讯一面+二面+三面+HR面