GAZEBO构建室外环境地图之创建高度图

GAZEBO构建室外环境地图之创建高度图

  • 前言
    • 下载真实地形数据
    • 处理下载好的高度图

前言

  最近在搭建gazebo的室外仿真环境用于室外机器人的室外建图算法研究,发现网上说这方面的文章非常少,走dem来创建地形的路,我没走通,谁走通了,麻烦评论下方告知一下,在此先谢过了!我走通的是创建Heightmap(高度图)的方式,成功搞到了地形图,当然你可以渲染成带草地的山脉,海岸,沙漠等等,这些下一篇再讲,废话不多说,先创建一个高度图。参考链接可以轻松获取全球任意位置高度图的方案链接

下载真实地形数据

  打开网址https://terrain.party/,参考前言中链接的描述,一开始进去的不是中国位置,鼠标滚轮放缩地图,缩到最小就直接能看到中国位置了,如下图
GAZEBO构建室外环境地图之创建高度图_第1张图片  注意那个蓝色小框框,你移动地图什么的,方框不会移动,要鼠标拖着框走(待会取的就是框里的高度图),实在把框弄丢了,就重新刷新页面,然后就能看到那个蓝色框框了。同时还发现一个问题,如果操作很慢,页面停止刷新,那接下来地图就不放缩更新了,所以速度快一点,最快速度选好位置,地图放到最大,如下图
GAZEBO构建室外环境地图之创建高度图_第2张图片  框的大小,可以自己调整,右边的加减号进行调整,我上图中的是18km,也就是当前地图大小是18km*18km的大小,需要小地图就按减号进行缩小,OK,接下来点击+号上方的下载图标,自己取个名字就开始下载了(最喜欢的就是没有任何用户注册要求,下载控制要求等等,直接下载即可)。

处理下载好的高度图

  下载完成后是一个zip文件,解压后有四张png,README说明文档中的意思是如果使用一张高度图的话,选用(Merged).png那张,好吧,其他张,肉眼也看不出来差别,听文档的吧,选merged混合的那张。
  前言链接的文档里也说了,下载下来的png是16位的,不是8位的,所以需要处理,这里重复一下前言链接文档中gazebo对高度图的要求:

  1. 高度和宽度必须相等(上面下载的时候就是正方形,直接满足,github上也看到很多对高度图的处理,第一步就是cv2.imread,第二部就是cv2.resize);
  2. 边的大小必须满足像素=2^n+1, n = 1,2,3,…(常用像素129*129和513*513),像素取太高不一定gazebo 能渲染的起来;
  3. 图片必须是8位图片(uint8)(实际上就是0~255,0就是地面了,值越高越白,也就越高,你看那个下载下来的黑白图,白色就是山脉了)。

  好的,接下来改像素和图片编码(这个会玩opencv的,直接用opencv,如:hm=cv2.imread(img,cv2.IMREAD_GRAYSCALE),后面heightmap=cv2.resize(hm,(129,129)),最后cv2.imwrite(“heightmap.png”,heightmap)这样也可以),不想写代码的,就使用gimp软件(sudo apt-get install gimp安装)
GAZEBO构建室外环境地图之创建高度图_第3张图片  我的图片是1081*1081的,这样,最大只能截取1025*1025了(不懂的,重看一下上面写的图片边的要求)。 鼠标右击菜单–> image --> scale image,如下
GAZEBO构建室外环境地图之创建高度图_第4张图片  修改成1025*1025之后, 鼠标右击菜单–> file --> export as保存成一个新的png格式高度图(注意compression level选择0,减少地图精度损失)。OK,此时你已经拥有了一张8位正方形满足规定像素的高度图了,下一篇接着讲怎么加载到gazebo上显示出来。

你可能感兴趣的:(GAZEBO构建室外环境地图之创建高度图)