【学习笔记】ROS Gazebo map生成插件 collision_map_creator_plugin

背景:之前从Gazebo三维地图生成二维图片(.png)的方法主要是通过跑一遍SLAM,耗时费力,且效果不好。该插件可直接由.world文件生成.png文件。

一、参考资料

  1. Gazebo API官网:
  2. 源码:
  3. 安装及使用:

二、安装(官方插件)

  1. 安装依赖:

    sudo apt-get install protobuf-compiler
    
  2. 下载和编译插件

    git clone https://github.com/osrf/collision_map_creator_plugin
    cd collision_map_creator_plugin
    mkdir build
    cd build
    cmake ../
    make
    
  3. 进行一些修改(直接执行会报错)
    collision_map_creator_plugin-master/msgs/CMakeLists.txt中的

    	set (msgs
    	collision_map_request.proto
    	${PROTOBUF_IMPORT_DIRS}/vector2d.proto
    	${PROTOBUF_IMPORT_DIRS}/header.proto
    	${PROTOBUF_IMPORT_DIRS}/time.proto
    	)
    

    修改为

    	set (msgs
    	collision_map_request.proto
    	)
    

    后,再重新编译(make一下)

    直接执行会报错:[libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: vector2d.proto

    参考:protobuf error for custom messages transport tutorial

三、使用

  1. 先在.world文件中添加该插件
    即在文末添加:

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

    在这里插入图片描述

  2. 把该插件添加至GAZEBO_PLUGIN_PATH环境
    有两种方法:

    • 把该插件编译生成的文件添加至默认位置:
      即,把libcollision_map_creator.so文件添加至/opt/ros/kinetic/lib/
      sudo cp ./libcollision_map_creator.so /opt/ros/kinetic/lib/
      
    • 把编译文件的生成位置添加至环境变量:
      GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:~/collision_map_creator_plugin/build/
      
  3. 使用Gazebo打开待处理的地图

    gazebo ./cloister.world --verbose
    

    其中--verbose参数能够显示启动的详细信息,看到加载插件的信息。
    在这里插入图片描述

  4. 进行绘图
    再开一个终端,执行

    ./request_publisher "(-10,-10)(10,10)" 10 0.01 $(pwd)/cloister.png 255 office_desk::link::collision
    

    其中,

    • "(-10,-10)(10,10)"表示要建图的范围(单位:米),通常等于Gazebo中的栅格数;
    • 10表示从多高的高度进行投影;
    • 0.01地图分辨率,即每个像素代表0.01m;
    • $(pwd)/cloister.png生成地图图片的位置和名称
    • office_desk::link::collision被视为地面,以白色显示,其余位置以黑色(255-255=0)着色。

    各参数详细释义参见Github
    在gazebo的终端中可以看到建图的进度,
    在这里插入图片描述

四、遇到问题

  1. 安装问题:
    自己的电脑上make总是报错,提示protobuf版本不匹配。未解决
    问题细节参见之前的记录

  2. 坐标选择问题:
    存在生成地图坐标轴与图片(.png)边界坐标轴不匹配的问题:未解决
    在这里插入图片描述

五、生成用于导航的yaml文件

参考:用python规模化生成gazebo中 .world .png 和 .yaml文件

  1. yaml文件内容注释:
    image: cloister.pgm		# 像素图的文件名,支持.pgm和.png格式的图片
    resolution: 0.050000	# 分辨率,当前表示一个像素点是0.05m
    origin: [-15.400000, -12.200000, 0.000000]		# 像素图左下角在Gazebo世界坐标系下的坐标
    negate: 0		# 默认0
    occupied_thresh: 0.65		# 当像素占据的概率大于0.65时候认为是完全占据的
    free_thresh: 0.196			# 当像素占据的概率小于0.196时候认为是完全空的
    
  2. 参数配置
    • image:与当前路径下的图片文件保持一致
    • resolution:与三、4.中分辨率参数保持相同
    • origin:根据三、4.中生成图片的坐标范围和Gazebo中三维地图的坐标原点确定

例如:

  • Gazebo地图:
    在这里插入图片描述
  • 图片生成指令
    ./request_publisher "(-10,-10)(10,10)" 10 0.01 $(pwd)/cloister.png 255 office_desk::link::collision
    
  • 地图文件:
    在这里插入图片描述
  • 进行一步旋转(直接用Ubuntu的Image Viewer):
    在这里插入图片描述
  • 最终的yaml文件
    image: cloister.png
    resolution: 0.010000
    origin: [-10.000000, -10.000000, 0.000000]
    negate: 0
    occupied_thresh: 0.65
    free_thresh: 0.196
    
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值