.. _sec_simulation: 仿真环境:认识你的第一架无人机 ============================== **学习目标** - 在仿真环境中启动一架完整的无人机,建立对无人机系统的直观认知 - 理解智能无人机硬件系统的组成与各子系统的职责 - 了解本章的学习路线,明确从”能飞”到”智能”的升级路径 在开始深入学习无人机的各个硬件子系统之前,让我们先启动一架完整的仿真无人机。正如学习编程时的第一个”Hello World”程序,这架无人机将帮助你建立对整个系统的直观感受。 动手实践:启动你的第一次仿真飞行 -------------------------------- 我们将使用Prometheus项目中的P450无人机模型进行演示。P450是阿木实验室专为科研和教学设计的开源无人机平台,它在Gazebo仿真环境中有完整的数字孪生模型。 环境准备 ~~~~~~~~ 确保你已经完成以下环境配置(详见附录A): - Ubuntu 20.04 LTS - ROS Noetic - Gazebo 11 - Prometheus仿真环境 WSL镜像导入 ~~~~~~~~~~~ 本课程提供了一个预配置好的WSL镜像安装包 ``Ubuntu-Prometheus.tar``\ ,其中已包含所有必要的开发环境。如果你使用Windows11系统,可以通过以下步骤导入该镜像: **步骤1:准备镜像文件** 确保你已经下载了课程提供的 ``Ubuntu-Prometheus.tar`` 文件,并记住其存放路径。 **步骤2:导入WSL镜像** 打开PowerShell(以管理员身份运行),执行以下命令导入镜像: .. raw:: latex \diilbookstyleinputcell .. code:: powershell # 导入WSL镜像(替换为你的实际路径) wsl --import Ubuntu-Prometheus <安装路径> <镜像文件路径>\Ubuntu-Prometheus.tar # 示例:如果镜像在D盘根目录,安装到D:\WSL\Ubuntu-Prometheus # wsl --import Ubuntu-Prometheus D:\WSL\Ubuntu-Prometheus D:\Ubuntu-Prometheus.tar **参数说明**\ : - ``Ubuntu-Prometheus``\ :WSL发行版的名称(可自定义) - ``<安装路径>``\ :WSL系统文件的存放位置(建议选择一个有足够空间的磁盘) - ``<镜像文件路径>``\ :\ ``Ubuntu-Prometheus.tar`` 文件的完整路径 **步骤3:设置默认发行版(可选)** 如果你有多个WSL发行版,可以设置刚导入的为默认: .. raw:: latex \diilbookstyleinputcell .. code:: powershell # 设置默认WSL发行版 wsl --set-default Ubuntu-Prometheus **步骤4:启动WSL并验证环境** 导入完成后,启动WSL: .. raw:: latex \diilbookstyleinputcell .. code:: powershell # 启动WSL wsl -d Ubuntu-Prometheus 在WSL终端中,验证关键环境是否已正确安装: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 检查Ubuntu版本 lsb_release -a # 检查ROS环境 echo $ROS_DISTRO # 检查Gazebo版本 gazebo --version # 检查Prometheus工作空间 ls ~/Prometheus 如果所有命令都能正常执行无错误输出,说明环境配置成功。 使用tmux管理多个终端窗口 ~~~~~~~~~~~~~~~~~~~~~~~~ 在WSL中运行无人机仿真时,通常需要同时打开多个终端窗口来执行不同的命令。使用\ ``tmux``\ (Terminal Multiplexer)可以在一个终端窗口中管理多个会话和窗口,提高工作效率。 **安装tmux**\ : .. raw:: latex \diilbookstyleinputcell .. code:: bash # 更新软件包列表 sudo apt update # 安装tmux sudo apt install tmux -y **tmux基本操作**\ : 启动tmux会话: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 启动一个新的tmux会话 tmux # 或者为会话指定名称(推荐) tmux new -s prometheus **tmux快捷键**\ (所有快捷键都需要先按\ ``Ctrl+b``\ 作为前缀键): ======================= ====================================== 快捷键 功能说明 ======================= ====================================== ``Ctrl+b`` + ``c`` 创建新窗口(window) ``Ctrl+b`` + ``n`` 切换到下一个窗口 ``Ctrl+b`` + ``p`` 切换到上一个窗口 ``Ctrl+b`` + ``数字键`` 直接切换到指定编号的窗口 ``Ctrl+b`` + ``"`` 水平分割窗口(创建上下两个面板) ``Ctrl+b`` + ``%`` 垂直分割窗口(创建左右两个面板) ``Ctrl+b`` + ``方向键`` 在面板间切换 ``Ctrl+b`` + ``x`` 关闭当前面板 ``Ctrl+b`` + ``d`` 分离会话(detach),会话在后台继续运行 ======================= ====================================== **重新连接tmux会话**\ : .. raw:: latex \diilbookstyleinputcell .. code:: bash # 列出所有tmux会话 tmux ls # 重新连接到指定会话 tmux attach -t prometheus 启动仿真 ~~~~~~~~ 打开终端,执行以下命令启动无人机仿真环境: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 启动Gazebo仿真环境 roslaunch prometheus_gazebo sitl_outdoor_1uav_P450.launch 等待约30秒,你将看到Gazebo窗口中出现一架四旋翼无人机,静静地停在Prometheus开发环境中。 查看无人机状态 ~~~~~~~~~~~~~~ 在tmux中创建新窗口(\ ``Ctrl+b`` + ``c``\ ),或打开新的终端窗口,使用以下命令查看无人机发布的ROS话题: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 列出所有ROS话题 rostopic list 你会看到大量的话题输出,这些话题就是无人机各个硬件组件向外发布的数据。例如: :: /mavros/imu/data # IMU惯性测量数据 /mavros/local_position/pose # 本地位置和姿态 /mavros/state # 飞控状态 每一个话题背后,都对应着一个真实的硬件传感器或控制器。在后续的章节中,我们将逐一认识这些硬件。 让无人机起飞 ~~~~~~~~~~~~ 在tmux中创建新窗口(\ ``Ctrl+b`` + ``c``\ ),或打开另一个终端,运行起飞降落的示例程序: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 运行自动起飞降落程序 roslaunch prometheus_demo takeoff_land.launch 观察Gazebo窗口,你将看到无人机缓缓升空,悬停片刻后自动降落。 **恭喜!** 你已经完成了第一次无人机仿真飞行。 无人机硬件系统全景 ------------------ 刚才的仿真飞行虽然只有短短几十秒,但背后涉及了无人机的所有硬件子系统协同工作。让我们用一个”人体类比”来理解这些系统: ========== ========== =============== ================================== 人体部位 功能 无人机硬件 作用 ========== ========== =============== ================================== 眼睛、耳朵 感知外界 相机、激光雷达 **感知系统**\ :获取环境信息 前庭、小脑 平衡与定位 IMU、GPS、UWB **定位系统**\ :知道”我在哪” 大脑 思考与决策 机载计算机 **决策系统**\ :处理信息、做出决策 神经中枢 协调控制 飞控(Pixhawk) **控制系统**\ :执行飞行控制 四肢、肌肉 执行动作 电机、螺旋桨 **执行系统**\ :产生升力与推力 躯干、心脏 支撑与供能 机架、电池 **机体与能源**\ :承载与供电 ========== ========== =============== ================================== 这六大系统构成了无人机的完整硬件架构。 数据流向 ~~~~~~~~ 当无人机执行自主飞行任务时,数据在各系统间流动: 1. **感知系统**\ 采集环境数据(图像、点云) 2. **定位系统**\ 融合传感器数据,计算当前位置与姿态 3. **决策系统**\ 根据任务目标,规划飞行路径 4. **控制系统**\ 将路径转换为电机控制指令 5. **执行系统**\ 驱动电机旋转,产生升力与推力 6. **机体与能源**\ 为整个系统提供结构支撑和电力供应 理解这个数据流向,是掌握无人机系统的关键。 认识P450:我们的学习平台 ------------------------ P450(Prometheus 450)是本课程的学习平台。让我们了解它的基本参数: P450硬件参数 ~~~~~~~~~~~~ ============ ================ ===================== 参数项 数值 说明 ============ ================ ===================== 轴距 410mm 对角电机轴间距离 整机重量 约2086g 含电池 最大起飞重量 约2200g 含负载 悬停时间 约9min 取决于电池容量和负载 飞控 Pixhawk 6C 开源飞控,运行PX4固件 机载计算机 Jetson Xavier NX NVIDIA边缘AI计算平台 标配相机 D435i 可扩展双目/深度相机 ============ ================ ===================== P450在Gazebo中的模型结构 ~~~~~~~~~~~~~~~~~~~~~~~~ 在Gazebo仿真中,P450的模型文件采用SDF(Simulation Description Format)格式描述。模型文件位于: :: Prometheus/Simulator/gazebo_simulator/models/P450/ ├── model.config # 模型配置文件 ├── model.sdf # 模型描述文件(主文件) ├── meshes/ # 3D网格文件 │ ├── P450_body.dae │ ├── propeller.dae │ └── ... └── materials/ # 材质文件 我们可以通过查看\ ``model.sdf``\ 文件,了解无人机模型的组成: .. raw:: latex \diilbookstyleinputcell .. code:: bash # 查看P450模型文件结构 cat ~/Prometheus/Simulator/gazebo_simulator/models/P450/model.sdf 在后续章节中,我们将学习如何修改这个SDF文件,为无人机添加不同的传感器。 从”能飞”到”智能”:本章学习路线 ------------------------------ 一架基础的无人机只需要\ **控制系统**\ 、\ **执行系统**\ 和\ **机体能源**\ 就能实现飞行。但要让无人机具备”智能”,还需要添加\ **感知系统**\ 、\ **定位系统**\ 和\ **决策系统**\ 。 本章各节内容 ~~~~~~~~~~~~ ==== ========== ============== ====================== 节号 标题 学习内容 实践目标 ==== ========== ============== ====================== 2.1 仿真环境 建立全局认知 启动仿真飞行 2.2 感知系统 相机与激光雷达 在Gazebo中添加传感器 2.3 定位系统 IMU、GPS、UWB 读取定位数据话题 2.4 决策系统 机载计算机 理解算力需求 2.5 控制系统 Pixhawk飞控 理解飞控接口 2.6 执行系统 电机与螺旋桨 动力估算实验 2.7 机体与能源 机架与电池 负载续航计算 2.8 综合实践 系统集成 构建完整智能无人机模型 ==== ========== ============== ====================== 小结 ---- 本节我们完成了以下学习目标: 1. **启动了第一次仿真飞行**\ :使用Prometheus和Gazebo环境,运行P450无人机模型 2. **理解了硬件系统架构**\ :通过人体类比,认识了感知、定位、决策、控制、执行、机体能源六大子系统 3. **认识了P450平台**\ :了解了本课程学习平台的基本参数和模型结构 4. **明确了学习路线**\ :从”能飞”到”智能”的渐进式升级路径 在接下来的章节中,我们将深入每一个硬件子系统,学习: - 它解决什么问题(使用场景) - 如何选择合适的硬件(核心参数) - 硬件输出什么数据(数据接口) - 如何在仿真中添加和使用它(实践操作) 练习题 ------ 基础练习 ~~~~~~~~ 1. **环境验证**\ :在你的环境中启动P450仿真,截图记录Gazebo窗口和终端输出。 2. **话题探索**\ :使用\ ``rostopic list``\ 命令,找出至少5个与传感器相关的话题,并使用\ ``rostopic echo``\ 命令查看其中一个话题的数据内容。 3. **模型查看**\ :找到P450的SDF模型文件,列出模型中包含的主要组件(links)名称。 思考题 ~~~~~~ 1. 如果要让无人机在完全黑暗的环境中自主飞行,你认为需要添加或替换哪些硬件?为什么? 2. 对比消费级无人机(如DJI Mini)和科研平台(如P450),你认为它们在硬件系统上的主要差异是什么? 3. 在人体类比中,我们将飞控比作”神经中枢”,机载计算机比作”大脑”。请思考:为什么需要两个独立的计算单元,而不是合并为一个? 延伸阅读 -------- - `Prometheus项目GitHub仓库 `__ - `P450产品Wiki `__ - `PX4官方文档 `__ - `Gazebo仿真教程 `__