网格可以在视觉和传感器上增加真实性。本教程演示了用户如何用自定义的网格来定义模拟中他们的模型怎么出现。
Attach a Mesh as Visual
对网格最典型的用法是生成一个视觉上更加真实。1.进入目录:
cd ~/.gazebo/models/my_robot
2.打开model.sdf文件。
gedit ~/.gazebo/models/my_robot/model.sdf
3.我们将添加视觉给网格。找到名字visual,看起来如下:
<visual name='visual'>
<geometry>
<box>
<size>.4 .2 .1</size>
</box>
</geometry>
</visual>
4.一个网格可以来自磁盘中的或者其他模式。在这个例子中,我们将用来自pioneer2dx模型的网格。改变视觉单元(保留文件的其余的完整部分)
<visual name='visual'>
<geometry>
<mesh>
<uri>model://pioneer2dx/meshes/chassis.dae</uri>
</mesh>
</geometry>
</visual>
则model.sdf变成如下:
<pre name="code" class="html"><?xml version='1.0'?>
<sdf version='1.4'>
<model name="my_robot">
<static>false</static>
<link name='chassis'>
<pose>0 0 .1 0 0 0</pose>
<collision name='collision'>
<geometry>
<box>
<size>.4 .2 .1</size>
</box>
</geometry>
</collision>
<visual name='visual'>
<geometry>
<mesh>
<uri>model://pioneer2dx/meshes/chassis.dae</uri>
</mesh>
</geometry>
</visual>
<collision name='caster_collision'>
<pose>-0.15 0 -0.05 0 0 0</pose>
<geometry>
<sphere>
<radius>.05</radius>
</sphere>
</geometry>
<surface>
<friction>
<ode>
<mu>0</mu>
<mu2>0</mu2>
<slip1>1.0</slip1>
<slip2>1.0</slip2>
</ode>
</friction>
</surface>
</collision>
<visual name='caster_visual'>
<pose>-0.15 0 -0.05 0 0 0</pose>
<geometry>
<sphere>
<radius>.05</radius>
</sphere>
</geometry>
</visual>
</link>
<link name="left_wheel">
<pose>0.1 0.13 0.1 0 1.5707 1.5707</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
<link name="right_wheel">
<pose>0.1 -0.13 0.1 0 1.5707 1.5707</pose>
<collision name="collision">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</collision>
<visual name="visual">
<geometry>
<cylinder>
<radius>.1</radius>
<length>.05</length>
</cylinder>
</geometry>
</visual>
</link>
<joint type="revolute" name="left_wheel_hinge">
<pose>0 0 -0.03 0 0 0</pose>
<child>left_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
<joint type="revolute" name="right_wheel_hinge">
<pose>0 0 0.03 0 0 0</pose>
<child>right_wheel</child>
<parent>chassis</parent>
<axis>
<xyz>0 1 0</xyz>
</axis>
</joint>
</model>
</sdf>
5.查看你的本地缓存模型数据库,看你是否有上边所指的pioneer2dx的模型。
ls -l ~/.gazebo/models/pioneer2dx/meshes/chassis.dae
6.在gazebo中,拖拽My Robot模型到world中。视觉将看起来像pioneer2dx。
1.对于我们的机器人来说,机箱实在是太多了。所有我们需要标定。
2.用一个比例因子来标定视觉。
<visual name='visual'>
<geometry>
<mesh>
<uri>model://pioneer2dx/meshes/chassis.dae</uri>
<scale>0.9 0.5 0.5</scale>
</mesh>
</geometry>
</visual>
视觉也有点太低了(在Z轴上)。通过对视觉指定一个姿势来提高一点。
<visual name='visual'>
<pose>0 0 0.05 0 0 0</pose>
<geometry>
<mesh>
<uri>model://pioneer2dx/meshes/chassis.dae</uri>
<scale>0.9 0.5 0.5</scale>
</mesh>
</geometry>
</visual>
需要主要的是,我们姿势修改了机器人的<visual>元素,所以通过用户界面和基于用户界面的摄像头,深度相机和GPU激光器,使机器人将看起来像pioneer2DX模型。由于我们没有修改<collison>单元,盒子仍然会用物理引擎,用于碰撞动力学和基于CPU的光传感器。
Collada format -- .dae