「 Gazebo仿真 」地图创建、多模型显示、基本指令
一、前言
小白最近在Gazebo仿真平台中更换了使用.txt生成的虚拟物理地图(非刚体),并在新的环境布置多个物体,将过程记录下来分享。
首先知道地图由二部分构成,一部分是在物理环境中实际的接触形状(.txt文件描述,由灰度图像生成),另一部分是可视化形状,即模型的贴纸(.png文件描述,主要包括颜色和纹理)。在实际操作中,我们当然会将这两部分设置一致,图片的分辨率越高越好。
二、如何生成/修改地图
(1)查看Params文件夹的**.yaml文件,如:simulate_params.yaml,得知目前仿真平台使用的地图文件名,例如:
# topics
heightmap_name : "./models/height_map/materials/textures/flats_mars.png"
mechanicalmap_name : "XXX"
代码中,flats_mars.png为地图名称。
(2)在world文件夹的.word文件中,声明地图信息,例如:
<actor name="model"><pose>0 0 0 0 0 0</pose><link name="link"><visual name="visual_abcedf"><geometry><heightmap>
<uri>model://height_map/materials/textures/flats_mars.png</uri><size>123.5 123.5 5</size><pos>0 0 0</pos><texture><diffuse>model://height_map/materials/textures/colormap.jpg</diffuse>
<normal>model://height_map/materials/textures/sand_nor1.png</normal><size>123.5</size></texture></heightmap></geometry></visual></link></actor><include><uri>model://my_robot</uri></include>
其中,/my_robot保存了使用的.sdf模型文件,告诉世界需要显示的模型;colormap.jpg文件为地图模型的RGB颜色贴纸;sand_nor1.png文件为地图的纹理贴纸,注意此文件的颜色需要设置为如下:
地图尺寸为(123.5*2, 123.5*2, 5)。
(3)生成.txt文件是全过程的关键环节,此处不详尽展示代码。主要思想为,在scripts文件夹下的创建 **.py文件,如:generate_terrain.py,编写生成.txt文件的代码。
1)首先,打开第一步设置好的.yaml文件,这里有指向地图的灰度图片,此图片为三维地图在二维上的投影,可通过此图在代码(需要单独编下,在下一步讲解)中还原三维地图模型。事例代码如下:
import sysimport cv2import numpy as npimport yamlyaml1=open('./params/simulate_params.yaml')yaml_data=yaml.load(yaml1)map_name=yaml_data['heightmap_name']
2)然后,设置地图整体的尺寸,例如:
height_map=cv2.imread(map_name,cv2.IMREAD_UNCHANGED)height_map=(height_map).astype('float')height_map=height_map*5/255 //z高度height_map=height_map[::-1,:]x_start=-123.5/2 //x半宽度x_end=123.5/2 y_start=-123.5/2 //y半宽度y_end=123.5/2
需要注意的是,代码中的x和y的长度为123.5*2,高度为5。
3)接下来,确定Map地图的每一个点的n个属性元素,x,y,z以及n-3个地面力学的参数,可数学描述为n维张量。
4)通过循环编写MAP地图的 .txt文件。如下:
with open("./data/terrain_data_big.txt",'w') as f:f.write(str(x_0))f.write('\n')f.write(str(y_0))f.write('\n')f.write(str(x_step))f.write('\n')f.write(str(x_step))f.write('\n')f.write(str(Node_Coef))f.write('\n')for i in range(513):for j in range(513):for k in range(10):f.write(str(terrain_map[k,j,i]))f.write('\n')
5)最后,在终端跳转到 catkin_ws/src/(项目文件名) 文件夹下,执行上一步写好的 .py 代码,指令如下:
python ./scripts/generate_terrain.py
按照事例,生成的地图文件存放于data文件夹。
三、如何在世界中显示新的模型
需要将模型文件(如 Rover.sdf)保存至models文件夹,然后在世界文件**.world中添加如下代码即可:
<!--<include><uri>model://Rover</uri> <pose>5 2 2 0 0 0</pose><static>0</static>
</include> -->
如上,在世界地图中添加了名为Rover的模型。值得注意的是<static>1<static>表示固定在世界中的静态模型,<static>0<static>表示相对于世界的动态模型。
四、其它相关指令
(1)绘制Gazebo仿真中数据的图像。使用代码指令如下,在弹出的窗口中选者话题即可。
rqt_plot
(2)查看仿真中,正在执行的话题。指令代码如下:
rostopic list
(3)查看仿真中某一话题具体传输的数据。指令代码如下:
rostopic echo /(话题名)eg:rostopic echo /ft_sensor_topic_l
五、Joint知识
在Joint中,parent是相对静止的对象,child为运动的对象,插件plugin会自动安装在动的对象上,具体实例:
parent为电机,child为车轮,如果增加力传感器,则会自动添加到车轮上,但我们实际想获得电机(轮轴)的受力情况,为解决此问题,一种方法为 使用基于车轮滚动角度的坐标转换。
「 Gazebo仿真 」地图创建、多模型显示、基本指令相关推荐
- 「最小细胞」的3D数字模型,计算揭示生命最基本的要求
来源:ScienceAI 编辑:萝卜皮 无论是海洋深处的奇异生物还是我们体内的细菌,地球上的所有生命都是由细胞组成的.但我们对这些细胞中最简单的细胞如何运作只有一个非常粗略的了解. 伊利诺伊大学厄巴纳 ...
- 「caffe速成」caffe图像分类从模型自定义到测试
https://www.toutiao.com/a6697741728985645581/ 这一次我们讲讲 Caffe 这个主流的开源框架从训练到测试出结果的全流程.到此,我必须假设大家已经有了深度学 ...
- java创建数组并赋值_「java 数组」Java创建数组的方法 - seo实验室
java 数组 最近学java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章! Java创建数组的方法大致有三种 说明:这里以int为数据类型以arr ...
- 如何在gazebo仿真环境中给sumit_xl模型添加多线激光雷达
一 :下载以sumit_xl模型 $ cd ~/catkin_ws/src $ git clone https://TheConstruct@bitbucket.org/theconstructcor ...
- 「小程序」——————————swiper引入图片不显示解决方案
我是直接从官方文档直接搬运过去的 ,然后出现了问题,经过排查是wxml文件的问题. 将在这里插入图片描述 后来改动为 问题解决. 后面图片显示不全 样式存在问题,所以我直接在样式文件里对样式进行了 修 ...
- 黑科技DeepFake检测方法:利用心跳做信号,还能「揪出」造假模型
本文转载自机器之心. 选自arXiv 作者:Umur Aybars Ciftci等 机器之心编译 编辑:陈萍 DeepFake 真的可以达到以假乱真的效果吗?未必.来自宾汉姆顿大学.英特尔公司的研究人 ...
- 兴能元创建「晒啦」社交圈子·共建Web3数字篮球时代!
从融入5G.VR.AR等数字手段的"文创+IP",到拥有广袤想象空间的元宇宙--Web3互联网作为数字经济新的增长点之一,已进入发展的快车道,成为众多知名品牌把握数字经济发展机遇, ...
- 最新成果!超越AlphaZero!DeepMind让AI制霸「元宇宙」
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:新智元 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 Al ...
- 内购订单进行二次处理_「物流图表」复杂业务场景下的订单管理系统搭建
销售流程中的订单管理是业务管理的重点.公司内部需要多部门协同.多资源整合才能顺利地完成订单交付:公司外部需要实时有效的共享订单状态,响应客户的诉求,提升客户的满意度.基于这个目标,订单管理就是要以客户 ...
最新文章
- mysql中日志的特点_mysqlbinlog的日志类型
- adreno-gpu-profiler
- bulkwrite 批量插入_SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
- CNN几种经典模型比较
- c++ cout头文件_C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
- DataFrame字符串之分割split()、清洗drop()、合并concat()、重新建立索引reset_index() - (Python)
- Android设计模式系列-组合模式
- apache2配置rewrite_module
- matlab分析电梯,一种基于Matlab/Simulink的电梯驱动系统建模方法
- 关于DES加密内部收费版
- 我理解的myisam引擎之六 MYI、MYD文件的解析
- 做一个学(chou)习(ka)游戏(一)
- CentOS等保三级安全加固方案
- 发现IGame中又一个大坑
- 正态分布以及推测统计简述
- FOC:在MCU上检验Clark和Park坐标变换是否正确
- c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据
- OC10_数组的内存管理
- 吾父马达加斯加之旅-2
- 习惯养成android软件,小小成长(习惯养成)app
热门文章
- 如何配置无线WiFi短信认证登录?
- 联想Y430P换屏记
- matplotlib:图形绘制常用增加修饰和设置参数
- Linux下切换capslock和control键
- codeforces 849B Tell Your World(计算几何)
- 【python】使用pyautogui进行屏幕捕捉实现自动化操作
- ChromeFK插件推荐系列十九:网站图片批量下载插件推荐
- 【BlueZ】【蓝牙】跨平台实现Ble MasterSlaveMesh 之Linux篇-1
- DeepLearing—CV系列(二十二)——DCGAN生成动漫卡通人脸的Pytorch实现
- 编程课程_您可以从今天开始的300项免费在线编程课程