在Gazebo中使用DEM構建起伏地形環境
所需資料下載地址:
1. https://bitbucket.org/osrf/gazebo_tutorials/raw/default/dem/files/
数字高程模型(致謝谷歌翻譯)
概述
数字高程模型(DEM)是地形表面的3D表示,不包括任何对象,如建筑物或植被。 DEM通常通过使用传感器的组合来创建,诸如LIDAR,雷达或照相机。地面位置的地形海拔以规则间隔的水平间隔进行采样。维基百科是获取更多有关DEM的详细信息的好资源。术语DEM仅是通用面值,而不是特定格式。事实上,DEM可以表示为高程网格(光栅)或基于矢量的三角形不规则网络(TIN)。目前,Gazebo仅支持GDAL中支持的格式的栅格数据。
在Gazebo中支持DEM的主要动机是能够模拟逼真的地形。救援或农业应用可能有兴趣使用与真实世界匹配的模拟地形来测试他们的机器人行为。
带DEM支持Gazebo(ROS kinetic和Gazebo 7)
为了使用DEM文件,您应该安装GDAL库。
$ sudo apt-get install gdal-bin libgdal-dev libgdal1i python-gdal
DEM文件和定义转换为SDF格式
有几个组织提供高程数据。作为一个例子,让我们下载圣海伦山的DEM文件在它的喷发之前或之后在80年代。这些文件在公共领域,由USGS分发。
解压缩文件并将其重命名为mtsthelens.dem,如下所示:
參考命令,依據實際情況調整
cd 〜/下载
wget https://bitbucket.org/osrf/gazebo_tutorials/raw/default/dem/files/mtsthelens_before.zip
unzip〜/ Downloads / mtsthelens_before.zip -d / tmp
mv /tmp/30.1.1.1282760.dem /tmp/mtsthelens.dem
通常,DEM文件具有大分辨率,Gazebo无法处理它,因此调整DEM的分辨率是个好主意。下一个命令将地形缩放到129x129,并将复制到對應目录中。
$ gdalwarp -ts 129 129 mtsthelens.dem mtsthelens_129.dem
Gazebo中的DEM文件以与加载高度图图像相同的方式加载。 Gazebo自动检测文件是纯文本还是DEM文件。创建文件volcano.world并复制下一个内容。将文件保存到任何位置,例如/ gazebo_dem。
<?xml version="1.0" ?> <sdf version="1.4"> <world name="default"> <!-- A global light source --> <include> <uri>model://sun</uri> </include> <model name="heightmap"> <static>true</static> <link name="link"> <collision name="collision"> <geometry> <heightmap> <uri>file://mtsthelens_129.dem</uri> <size>150 150 50</size> <pos>0 0 0</pos> </heightmap> </geometry> </collision> <visual name="visual_abcedf"> <geometry> <heightmap> <texture> <diffuse>file://media/materials/textures/dirt_diffusespecular.png</diffuse> <normal>file://media/materials/textures/flat_normal.png</normal> <size>1</size> </texture> <texture> <diffuse>file://media/materials/textures/grass_diffusespecular.png</diffuse> <normal>file://media/materials/textures/flat_normal.png</normal> <size>1</size> </texture> <texture> <diffuse>file://media/materials/textures/fungus_diffusespecular.png</diffuse> <normal>file://media/materials/textures/flat_normal.png</normal> <size>1</size> </texture> <blend> <min_height>2</min_height> <fade_dist>5</fade_dist> </blend> <blend> <min_height>4</min_height> <fade_dist>5</fade_dist> </blend> <uri>file://media/dem/mtsthelens_129.dem</uri> <size>150 150 50</size> <pos>0 0 0</pos> </heightmap> </geometry> </visual> </link> </model> </world> </sdf>
上面代码中的<heightmap> <size>元素告诉Gazebo是否加载具有原始尺寸(当<size>不存在时)的DEM或缩放它(当存在<size>时)。如果你喜欢缩放DEM,<size>元素告诉Gazebo地形在模拟中将以米为单位的大小。如果要保持正确的宽高比,请务必正确计算宽度,高度和高程(这是<size>中的第三个数字)。在我们的示例中,DEM将缩放为150×150米的正方形,最大高程为50米。
启动Gazebo与DEM文件的世界,你应该看到火山。在我们的示例中,该文件位于/ gazebo_dem目录中。
#确保在您自己的安装路径中采购gazebo setup.sh
$ source /usr/share/gazebo/setup.sh
$ gazebo volcano.world
如何获得我感兴趣的区域的DEM文件?
接下来,我们将描述一种用于获得特定感兴趣区域的DEM文件的方法。
全球土地覆盖设施维护着地球的高分辨率数字地形数据库。转到其搜索和预览工具,您会看到类似下面的图像。每个地形补丁都有一个唯一的路径和行,您应该在使用该工具之前知道。我们将使用QGIS来发现我们感兴趣区域的路径/行。
QGIS是一个跨平台的开源地理信息系统程序,提供数据查看,编辑和分析功能。按照QGIS网站上详细说明下载QGIS。
打开QGIS,点击左边的列图标WMS / WMTS层,点击添加默认服务器,选择Lizardtech服务器,然后,按下连接按钮。选择MODIS值,然后按添加。关闭弹出窗口。下一步是添加具有所有不同补丁的另一个层。下载此shapefile并在任何文件夹中解压缩。回到QGIS并按添加矢量图层(左列图标)。按浏览,然后选择以前未压缩的wrs2descending.shp文件。在打开的窗口中按打开。现在,您将在主窗口看到两个图层。让我们改变wrs2descending图层的透明度,以便能够同时看到这两个图层。双击wrs2_descending图层,然后将其透明度值修改为大约85%。
使用滚动和左按钮导航到您感兴趣的区域。然后点击顶部栏上标识为“功能”的图标。单击您感兴趣的区域,该区域周围的所有地形块将突出显示。新的弹出窗口将显示每个突出显示的修补程序的路径/行值。在下面的图片中,您可以看到包含拉斯帕尔马斯的DEM修补程序的路径和行,这是西班牙加那利群岛的天堂之一。
使用GLCF搜索工具返回到浏览器,并在标记为开始路径和开始行的列中写入路径/行值。然后点击Submit Query;按下预览并下载以查看您的结果。选择您的地形文件,然后按下载。最后,选择扩展名为.gz的文件,并在您喜欢的文件夹中解压缩。全球土地覆盖设施文件采用GeoTiff格式,是最常见的可用DEM文件格式之一。
准备在Gazebo中使用的DEM数据
DEM数据通常以非常高的分辨率创建。在Gazebo中使用gdalwarp之前,请使用gdalwarp将地形的分辨率降低到更易于管理的大小。
$ gdalwarp -ts <width> <height> <srcDEM> <targetDEM>
DEM数据通常包含“洞”或“空”区域。这些部分对应于在创建DEM时无法收集数据的区域。在数据“hole”的情况下,将为该孔分配在该DEM中使用的数据类型的最小或最大值。
始终尝试下载已完成的DEM数据集的“完成”版本。如果您的DEM地形包含漏洞(也称为NODATA值),请尝试使用gdal工具手动修复它,例如gdal_fillnodata.py。
在Gazebo中使用多个DEM
虽然Gazebo不直接支持多个DEM,但GDAL有一套用于将一组DEM合并成一个DEM的实用程序。第一步是下载要合并的DEM集。注意,补丁甚至可以彼此重叠; GDAL将无缝地合并它们。假设当前目录包含一组可以合并的Geotiff文件,请运行下一个命令。
$ gdal_merge.py * .tif -o dem_merged.tif
现在,你可以使用dem_merged.tif在你的世界文件和Gazebo将加载地形与所有的补丁合并。在下一个截图中,您可以看到合并加那利群岛周围四个地形补丁的结果。