Ignition入门教程-添加演员
Ignition入门教程-添加演员
说明:
- 我们将学习如何将演员添加到我们的世界以及如何创建脚本动画。
- 您可以在此处找到本教程的最终世界。
- 如果我们想让实体在模拟中遵循预定义的路径而不受物理影响,动画将非常有用。
- 这意味着它们不会因重力而坠落或与其他物体发生碰撞。
- 然而,它们将具有可由 RGB 相机看到的 3D 可视化,以及可由基于 GPU 的传感器检测到的 3D 网格。
- 本教程解释了如何创建不与模拟的其余部分交互的开环轨迹。
演员
在 Ignition Gazebo 中,动画模型称为演员。
有两种类型的动画可以单独使用或组合使用:
骨架动画,它是一个模型中链接之间的相对运动:
- 轨迹动画,它将演员在世界各地的所有链接作为一组沿着轨迹传送:
- 结合起来,实现一个在世界中移动的骨架动画:
- 演员具有以下属性:
没有对它们施加任何力,无论是来自重力、接触还是其他任何东西
Actor 支持从 COLLADA (.dae) 和 BVH (.bvh) 文件导入的骨骼动画。
Actor 可以直接在 SDF 中编写轨迹。
您可以在此处查看 <actor> SDF 元素的完整规范。
- 您可以在此处查看
SDF 元素的 完整规范。
骨架
Ignition Gazebo 支持两种不同的骨架动画文件格式:COLLADA (.dae) 和 Biovision Hierarchy (.bvh)。
打开任意世界,例如 empty.sdf 世界,并添加一个名为 actor_walking 的演员,如下所示:
<actor name="actor_walking">
<skin>
<filename>https://fuel.ignitionrobotics.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae</filename>
<scale>1.0</scale>
</skin>
<animation name="walk">
<filename>https://fuel.ignitionrobotics.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae</filename>
</animation>
</actor>
Skin/皮肤
在
标签中,我们刚刚加载了一个 COLLADA 文件 walk.dae,它指定了我们的演员的外观。 在
标签中使用 COLLADA 文件时,会加载其动画。 缩放皮肤的大小。 Animation/动画
在
标签中,我们指定了演员将如何移动。 我们可以将不同的皮肤与不同的动画结合起来,只要它们具有兼容的骨骼即可。
现在运行世界,我们应该看到我们的模型在移动。
- 注意:您可以在 Ignition Fuel 上找到许多演员和模特。
脚本轨迹
- 这是演员的高级动画,包括指定在特定时间要达到的一系列姿势。
- Ignition Gazebo 负责在它们之间插入运动,因此运动是流畅的。
- 在 X 轴上有位移的动画,如 walk.dae,将在跟随轨迹时使骨架动画。
- 但是对于不支持的动画,例如talk_b.dae,如果有轨迹,它们的骨架就不会移动。
- 我们可以让我们的演员永远遵循指定的轨迹,并在世界加载后立即开始播放,如下所示:
<script>
<loop>true</loop>
<delay_start>0.000000</delay_start>
<auto_start>true</auto_start>
- 该脚本在
- 在
<script>
标记内,可以使用以下参数:
loop将此设置为 true 以使脚本在循环中重复。 对于流畅的连续运动,确保最后一个航路点与第一个航路点匹配,就像我们将做的那样。
delay_start这是在启动脚本之前等待的时间(以秒为单位)。 如果在循环中运行,则在开始每个循环之前将等待此时间。
auto_start如果动画应该在模拟开始播放后立即开始,则设置为 true。 例如,如果动画仅在由插件触发时才开始播放,则将此设置为 false 很有用。
- 让我们将轨迹定义为一系列航点:
<trajectory id="0" type="walk">
<waypoint>
<time>0</time>
<pose>0 0 1.0 0 0 0</pose>
</waypoint>
<waypoint>
<time>2</time>
<pose>2.0 0 1.0 0 0 0</pose>
</waypoint>
<waypoint>
<time>2.5</time>
<pose>2 0 1.0 0 0 1.57</pose>
</waypoint>
<waypoint>
<time>4</time>
<pose>2 2 1.0 0 0 1.57</pose>
</waypoint>
<waypoint>
<time>4.5</time>
<pose>2 2 1.0 0 0 3.142</pose>
</waypoint>
<waypoint>
<time>6</time>
<pose>0 2 1 0 0 3.142</pose>
</waypoint>
<waypoint>
<time>6.5</time>
<pose>0 2 1 0 0 -1.57</pose>
</waypoint>
<waypoint>
<time>8</time>
<pose>0 0 1.0 0 0 -1.57</pose>
</waypoint>
<waypoint>
<time>8.5</time>
<pose>0 0 1.0 0 0 0</pose>
</waypoint>
</trajectory>
</script>
- 在
标签中,我们定义了一系列我们的演员将遵循的航路点。 有两个属性:id 和 type。 该类型应与动画行走具有相同的名称。 - 在轨迹标签下,我们定义以下内容:
waypoint:轨迹中可以有任意数量的航路点。 每个航点由时间和姿势组成:
time:应该达到姿势的时间,以秒为单位,从脚本的开头开始计算。
pose:相对于初始演员姿势应该达到的姿势。
- 运行世界,我们应该看到我们的演员在跟随航路点的正方形中移动。
- 注意 :
- 定义航点的顺序并不重要,它们将遵循给定的时间。
- 轨迹整体平滑。 这意味着您将获得流畅的运动,但可能无法达到航点中包含的确切姿势。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号