Gazebo之Actors简介

1. 源由

在仿真环境添加角色(人、物等),并为之创建脚本动画,可以使得模拟更加贴合实际应用场景,从而验证自动驾驶,避障等相关程序逻辑。

这些仿真内容将被RGB摄像头看到,进而通过ROS节点接收,通过图形算法进行分析,做出相应判断、动作实现自动驾驶等高级应用功能。

而仿真环境最重要的一点就是为此提供一个验证平台,从而更高效的验证逻辑算法的正确性。

2. Actors简介

在Gazebo环境下,两种类型Actors:

  • Skeleton animation
  • Trajectory animation(Combined)

注:Gazebo Sim 支持两种不同的骨骼动画文件格式:COLLADA (.dae) 和 Biovision Hierarchy (.bvh)。

角色具有以下属性:

  • 不受任何力的作用,无论是来自重力、接触还是其他任何来源。
  • 角色支持从COLLADA (.dae)和BVH (.bvh)文件导入的骨骼动画。
  • 角色可以在SDF中直接编写轨迹脚本。

3. Skeleton

打开empty.sdf,并添加一个名为 actor_walking 的角色,如下所示:

<actor name="actor_walking">
    <skin>
        <filename>https://fuel.gazebosim.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae</filename>
        <scale>1.0</scale>
    </skin>
    <animation name="walk">
        <filename>https://fuel.gazebosim.org/1.0/Mingfei/models/actor/tip/files/meshes/walk.dae</filename>
        <interpolate_x>true</interpolate_x>
    </animation>
</actor>

3.1 Skin

  • <skin> 标签中,加载了一个 COLLADA 文件 walk.dae,该文件指定了我们的角色的外观。当在 <skin> 标签中使用 COLLADA 文件时,其动画也会被加载。
  • <scale> 用于调整皮肤的大小。

3.2 Animation

  • <animation> 标签中,我们使用 <filename> 标签指定我们的角色如何移动。
  • <interpolate_x> 用于在跟随轨迹时在路径点之间插值动画。将其设置为 true 可以实现更真实和流畅的动画。

4. Scripted trajectory

脚本动画,它包括指定在特定时间要达到的一系列姿势。Gazebo Sim 负责在这些姿势之间插值运动,使运动流畅。

4.1 脚本参数

    <script>
        <loop>true</loop>
        <delay_start>0.000000</delay_start>
        <auto_start>true</auto_start>

脚本在 <actor> 标签内定义。在 <script> 标签中可用以下参数:

  • loop:设置为 true 时,脚本将重复循环。为了实现流畅的连续运动,请确保最后一个路径点与第一个路径点匹配,正如我们将要做的那样。
  • delay_start:这是脚本开始前等待的时间(以秒为单位)。如果在循环运行中,则每个循环开始前都将等待这段时间。
  • auto_start:设置为 true 时,动画将在仿真开始播放时立即开始。如果希望动画仅在被插件触发时开始播放,则可以将其设置为 false。

4.2 轨迹移动

轨迹定义为一系列路径点:

        <trajectory id="0" type="walk" tension="0.6">
            <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>

<trajectory> 标签内,我们定义了一系列路径点供角色跟随。<trajectory> 有三个属性:idtypetension

  • type 应与 <animation> 标签的 name 属性中指定的值相同。因此,在本例中它被指定为 walk
  • tension 参数用于控制轨迹与给定路径点的贴合程度。默认的 tension 值为零,相当于 Catmull-Rom 样条,这可能会导致动画超越路径点。tension 值为一将使动画紧贴路径点。tension 值应在 0 到 1 的范围内。

<trajectory> 标签下,我们定义以下内容:

  • waypoint:轨迹中可以有任意数量的路径点。每个路径点由时间和姿态组成:
    • time:从脚本开始计时,表示到达该姿态的时间(以秒为单位)。
    • pose:相对于初始角色姿态应该达到的姿态。

5. 简单测试

  • 路径点定义的顺序并不重要,它们将按照给定的时间顺序执行; 定义在
  • 轨迹作为一个整体被平滑处理。这意味着Gazebo做了平滑插值处理,但路径点中包含的确切姿态可能不会完全达到。
$ gz sim actor_demo.sdf

在这里插入图片描述

测试资料:[SnapLearnGazebo/lesson_03_actors}(https://github.com/SnapDragonfly/SnapLearnGazebo/tree/main/lesson_03_actors)

6. 参考资料

【1】ArduPilot开源代码之ROS2Humble+CartographerSLAM+SITL+Gazebo
【2】ArduPilot飞控之Gazebo + SITL + MP的Jetson Orin环境搭建
【3】ArduPilot飞控之ubuntu22.04-Gazebo模拟
【4】PX4模块设计之七:Ubuntu 20.04搭建Gazebo模拟器

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值