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>
有三个属性:id
、type
和 tension
。
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模拟器