1.5Gazebo
Gazebo
Gazebo是一款开源的3D仿真软件,用于模拟机器人在复杂环境中的行为。它提供了丰富的物理引擎和传感器模型,可以模拟机器人的运动、碰撞、传感器数据等。
# 安装gz
sudo apt-get install ros-jazzy-ros-gz
# 测试(参数 empty.sdf 表示空场景)
# 测试能否正常启动且无卡顿,gz_args:=empty.sdf表示使用空场景
ros2 launch ros_gz_sim gz_sim.launch.py gz_args:=empty.sdf
# 我的Gazebo版本
"""
Gazebo Sim, version 8.9.0
Copyright (C) 2018 Open Source Robotics Foundation.
Released under the Apache 2.0 License.
"""
gazebosim有大量下载好的模型(models)与场景(worlds)可以使用。
想简单点就选一个自带摄像头的机器人模型(model),如果有中意的机器人模型没摄像头的,可以自己加一个摄像头。
选赛道类的,有明显的车道线,可以较好的测试算法。如果场景过于简单可以适当的添加一些模型,例如:路灯、树木、箱子等。
从结构上来说,场景(world)包含 N 个模型(model),模型包含 M 个传感器(sensor)。
虚拟仿真的世界观和Blender的世界观类似,一个世界需要有物理引擎、光源、模型等等。首先我们需要简单了解下这样的世界观。
sdf格式中世界可接收的子元素:http://sdformat.org/spec?ver=1.4&elem=world
sdf格式中模型可接收的子元素:http://sdformat.org/spec?ver=1.4&elem=model
gazebo的传感器库:https://gazebosim.org/libs/sensors/
sdf格式中传感器可接收的子元素:http://sdformat.org/spec?ver=1.4&elem=sensor
这种结构化的文档可读性要比传统的纯文档观感好很多。
URDF
URDF(Unified Robot Description Format)是一种用于描述机器人模型的XML格式。
一个两轮机器人运动示例官方教程
通过这个部分的学习,你可以学会如何操纵你的小车运动。
其中pose
标签有6个参数,官方文档认为比较简单没讲,这里提一下:
- 前三个参数表示三维空间坐标(取值范围为空间内即可)
- 后三个参数表示绕某个轴的角度(控制物体面朝什么方向)
轴 | 方向 | 正值含义 | 颜色标识 |
---|---|---|---|
X 轴 | 前后方向 | 向前(North) | 🔴 红色 |
Y 轴 | 左右方向 | 向左(West) | 🟢 绿色 |
Z 轴 | 上下方向 | 向上 | 🔵 蓝色 |
角度 | 轴 | 旋转方向 | 常用值 |
Roll | 绕 X 轴旋转 | 翻滚 | 通常为 0 |
Pitch | 绕 Y 轴旋转 | 俯仰 | 通常为 0 |
Yaw | 绕 Z 轴旋转 | 左右转头 | 0, 1.57, 3.14, -1.57 |
Yaw 角度对照表:
Yaw (弧度) | 角度 | 朝向 | 示意 |
---|---|---|---|
0 | 0° | 朝向 +X(前) | → |
1.57 | 90° | 朝向 +Y(左) | ↑ |
3.14 | 180° | 朝向 -X(后) | ← |
-1.57 | -90° | 朝向 -Y(右) | ↓ |
传感器
基于不同的目的,我们会选择不同的传感器结合不同的算法来实现。
传感器 | 应用场景 | 优势 | 劣势 |
---|---|---|---|
激光雷达 | SLAM建图、避障 | 精度高,不受光照影响 | 价格贵,无颜色信息 |
摄像头 | 目标识别、视觉SLAM | 成本低,信息丰富 | 受光照影响,计算量大 |
深度相机 | 室内SLAM、3D重建 | 提供RGB+深度,实时性好 | 仅室内可用,范围有限(5m) |
IMU | 姿态估计、传感器融合 | 高频输出,不依赖环境 | 存在漂移,需融合其他传感器 |
机器人专业可以参考官方文档教程,其中使用的是IMU 传感器、接触式传感器和激光雷达传感器。