< >
Home » Ignition入门教程 » Ignition入门教程-添加演员

Ignition入门教程-添加演员

Ignition入门教程-添加演员

说明:

  • 我们将学习如何将演员添加到我们的世界以及如何创建脚本动画。
  • 您可以在此处找到本教程的最终世界
  • 如果我们想让实体在模拟中遵循预定义的路径而不受物理影响,动画将非常有用。
  • 这意味着它们不会因重力而坠落或与其他物体发生碰撞。
  • 然而,它们将具有可由 RGB 相机看到的 3D 可视化,以及可由基于 GPU 的传感器检测到的 3D 网格。
  • 本教程解释了如何创建不与模拟的其余部分交互的开环轨迹。

演员

  • 在 Ignition Gazebo 中,动画模型称为演员。

  • 有两种类型的动画可以单独使用或组合使用:

  • 骨架动画,它是一个模型中链接之间的相对运动:

请输入图片描述

  • 轨迹动画,它将演员在世界各地的所有链接作为一组沿着轨迹传送:

请输入图片描述

  • 结合起来,实现一个在世界中移动的骨架动画:

请输入图片描述

  • 演员具有以下属性:
没有对它们施加任何力,无论是来自重力、接触还是其他任何东西
Actor 支持从 COLLADA (.dae) 和 BVH (.bvh) 文件导入的骨骼动画。
Actor 可以直接在 SDF 中编写轨迹。
您可以在此处查看 <actor> 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:相对于初始演员姿势应该达到的姿势。
  • 运行世界,我们应该看到我们的演员在跟随航路点的正方形中移动。

请输入图片描述

  • 注意 :
  • 定义航点的顺序并不重要,它们将遵循给定的时间。
  • 轨迹整体平滑。 这意味着您将获得流畅的运动,但可能无法达到航点中包含的确切姿势。

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ignition入门教程