在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将加载地形与所有的补丁合并。在下一个截图中,您可以看到合并加那利群岛周围四个地形补丁的结果。
在Gazebo中使用DEM構建起伏地形環境的更多相关文章
- Gazebo機器人仿真學習探索筆記(五)環境模型
環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...
- Buildroot構建指南--Overview【转】
本文转载自:http://www.unixlinux.online/unixlinux/linuxjc/gylinux/201703/65218.html Buildroot構建指南--Overvie ...
- 如何在一个项目中同时包含mvc建站、webapi接口
项目做得多了..就会发现有些小项目不想建太多的项目..现在思明在这里和大家分享一下如果再一个项目中同时包含mvc建站以及实现webapi接口 1.新建项目 aps.net web 应用程序 2 新建模 ...
- ROS_Kinetic_25 在ubuntu16.04使用Leap_motion并作为手势输入控制Gazebo中的机器人
ROS_Kinetic_25 在ubuntu16.04使用Leap_motion并作为手势输入控制Gazebo中的机器人 先附上资料网址: 1. https://developer.leapmoti ...
- 安卓手机与ROS通信遥控Gazebo中仿真机器人小车运动(ROS_indigo)
首先,先列出需要用到的一些文件: Gazebo中机器人模型及说明: http://wiki.ros.org/grizzly_simulator https://github.com/g/grizzly ...
- Python中3种内建数据结构:列表、元组和字典
Python中3种内建数据结构:列表.元组和字典 Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中 ...
- GIS中DTM/DEM/DSM/DOM的含义
DTM(Digital Terrain Model):数字地面模型,是一个表示地面特征空间分布的数据库,一般用一系列地面点坐 标(x,y,z)及地表属性(目标类别.特征等)绗成数据阵列,以此组成数字地 ...
- ASP.NET MVC + MySQL で開発環境構築
from:http://qiita.com/midori44/items/ef7cdd1d37c353e44b5f ASP.NET MVC & EntityFramework によるコードファ ...
- IOSアプリケーション開発環境の構築
IOSアプリケーション開発環境の要求 1) IOSシステムの構造はそのようになっています: 2) ハードウエアの方の要求: コンピューター a) デュアルコアCPU b) 8 gメモリ(開 ...
随机推荐
- 直接插入排序算法:ArrayList实现和数组实现
直接插入排序算法思想: 排序区间R[1..n]: 在排序的过程中,整个排序区间被分为两个子区间: 有序区R[ 1 ... i-1 ]和无序区R[ i ... n ]: 共进行n-1趟排序,每趟排序都是 ...
- luogu 3413 SAC#1 - 萌数
题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只有满足“存在长度至少为2的回文子串”的数是萌的——也就是说,101是萌的,因为101本身就是一个回文数:1 ...
- HDU 5412 CRB and Queries 动态整体二分
Problem Description There are N boys in CodeLand.Boy i has his coding skill Ai.CRB wants to know who ...
- 例10-3 uva10375(唯一分解定理)
题意:已知C(m,n) = m!/(n!(m-n)!),已知p,q,r,s,求C(p,q)/C(r,s) 思路: 全部分解成质因子,相乘则加,除则减 #include <iostream> ...
- [BZOJ]4650 优秀的拆分(Noi2016)
比较有意思的一道后缀数组题.(小C最近是和后缀数组淦上了?) 放在NOI的考场上.O(n^3)暴力80分,O(n^2)暴力95分…… 即使想把它作为一道签到题也不要这么随便啊摔(╯‵□′)╯︵┻━┻ ...
- Mybatis整合Spring实现事务管理的源码分析
一:前言 没有完整看完,但是看到了一些关键的地方,这里做个记录,过程会有点乱,以后逐渐补充最终归档为完整流程:相信看过框架源码的都知道过程中无法完全确定是怎样的流程,毕竟不可能全部都去测试一遍 ,但是 ...
- Java连接FTP成功,但是上传是失败,报错:Connected time out
Java代码在本机上传文件到FTP服务器的时候成功,但是部署到测试服务器的时候出现,连接FTP成功但是上传失败,并且报Connected time out错误: 测试服务器和FTP服务都在阿里云上:( ...
- 通过实例理解 RabbitMQ 的基本概念
先说下自己开发的实例. 最近在使用 Spring Cloud Config 做分布式配置中心(基于 SVN/Git),当所有服务启动后,SVN/Git 中的配置文件更改后,客户端服务读取的还是旧的配置 ...
- easyui datagrid 得到冻结列跟非冻结列
var head = $('#ClassManagement').datagrid("options").columns; var fhead=$('#ClassManagemen ...
- monitoring with Prometheus
Prometheus是一款开源的监控工具,支持k8s metrics的数据格式,同时也支持通过k8s api进行服务发现从而实现对自定义的metrics进行监控.下面通过一个示例来介绍如何将Prome ...