如何生成gazebo仿真环境的二维地图真值
在移动机器人仿真中,二维地图真值可以用来评价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
- Create a catkin workspace
- Clone the package to the src folder
catkin_make
and sourcedevel/setup.bash
Add the map and insert the plugin
- Add your world file to world folder
- 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
- Open a terminal, run gzerver with the map file
gzserver src/pgm_map_creator/world/<map file>
- Open another terminal, launch the request_publisher node
roslaunch pgm_map_creator request_publisher.launch
- 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仿真环境的二维地图真值相关推荐
- gazebo+turtlebot3+gmapping建二维地图
仿真环境 操作系统:ubuntu 18.04 ROS版本:melodic Gazebo版本:Gazebo9 仿真机器人:turtlebot3 安装一些包 sudo apt-get install ro ...
- UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)
简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...
- asp.net 生成、解析条形码和二维码
asp.net 生成.解析条形码和二维码 原文 asp.net 生成.解析条形码和二维码 一.条形码 一维码,俗称条形码,广泛的用于电子工业等行业.比如我们常见的书籍背面就会有条形码,通过扫描枪等设备 ...
- 微信生成专属海报(专属二维码)
通过get请求获取专属海报 /*** 获取专属海报** @param mid 会议编号* @param openId 邀请人唯一码* @return*/@SneakyThrows@ApiOperati ...
- qrcode生成一个带有图片的二维码
import qrcode qr = qrcode.QRCode( version=2, error_correction=qrcode.constants.ERROR_COR ...
- 使用vue-qr生成带中间带图片的二维码
1.安装 npm install vue-qr --save 2.在页面中使用 logoSrc:二维码中间的logo图 size:图片尺寸 text:二维码地址或内容 margin:二维码图片的空白边 ...
- 微信公众号怎么生成能追踪效果的二维码?
微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...
- 生成带有红黄绿码的二维码,并转base64
生成带有红黄绿码的二维码,并转base64 一.依赖(pom) <dependency><groupId>com.google.zxing</groupId>< ...
- ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )
前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...
最新文章
- Android Stdio换源以及配置项目
- 【STM32】FreeRTOS 任务切换
- python加法怎么写_51NOD 大数加法以及python写法
- 小米6指主板图示_小米MIX2手机不开机,修过没修好,通病问题教你一坨锡就能搞定...
- mysql密码高级_mysql高级操作
- 用FileZilla Server搭建ftp服务器
- 分布问题(二元,多元变量分布,Beta,Dir)
- python常用代码入门-入门十大Python机器学习算法(附代码)
- 做python自动化得时候怎么添加断言_python接口自动化(二十四)--unittest断言——中(详解)...
- 计算机专业毕业设计题目大全
- 【疑难解决】将设备通过Ehome协议接入EasyCVR,级联后视频无法播放如何解决?
- PDF文件太大,如何将它压缩得更小一点?
- java 比较日期大小(方法之一compare to 备忘)
- 阿里云Landing Zone系列--1云治理中心使用
- java封装-猫狗宠物店案例
- Java查找算法-17-二分查找
- 微信小程序下拉加载更多 带后台 解决加载的内容 是新加载的view中最后一个view
- 网上办公自动化|OA系统
- 绝了,hutool导出excel 图片居然没有调用方法
- 学习servlet【续】