仿真环境:认识你的第一架无人机¶
学习目标
在仿真环境中启动一架完整的无人机,建立对无人机系统的直观认知
理解智能无人机硬件系统的组成与各子系统的职责
了解本章的学习路线,明确从”能飞”到”智能”的升级路径
在开始深入学习无人机的各个硬件子系统之前,让我们先启动一架完整的仿真无人机。正如学习编程时的第一个”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(以管理员身份运行),执行以下命令导入镜像:
# 导入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发行版,可以设置刚导入的为默认:
# 设置默认WSL发行版
wsl --set-default Ubuntu-Prometheus
步骤4:启动WSL并验证环境
导入完成后,启动WSL:
# 启动WSL
wsl -d Ubuntu-Prometheus
在WSL终端中,验证关键环境是否已正确安装:
# 检查Ubuntu版本
lsb_release -a
# 检查ROS环境
echo $ROS_DISTRO
# 检查Gazebo版本
gazebo --version
# 检查Prometheus工作空间
ls ~/Prometheus
如果所有命令都能正常执行无错误输出,说明环境配置成功。
使用tmux管理多个终端窗口¶
在WSL中运行无人机仿真时,通常需要同时打开多个终端窗口来执行不同的命令。使用tmux(Terminal
Multiplexer)可以在一个终端窗口中管理多个会话和窗口,提高工作效率。
安装tmux:
# 更新软件包列表
sudo apt update
# 安装tmux
sudo apt install tmux -y
tmux基本操作:
启动tmux会话:
# 启动一个新的tmux会话
tmux
# 或者为会话指定名称(推荐)
tmux new -s prometheus
tmux快捷键(所有快捷键都需要先按Ctrl+b作为前缀键):
快捷键 |
功能说明 |
|---|---|
|
创建新窗口(window) |
|
切换到下一个窗口 |
|
切换到上一个窗口 |
|
直接切换到指定编号的窗口 |
|
水平分割窗口(创建上下两个面板) |
|
垂直分割窗口(创建左右两个面板) |
|
在面板间切换 |
|
关闭当前面板 |
|
分离会话(detach),会话在后台继续运行 |
重新连接tmux会话:
# 列出所有tmux会话
tmux ls
# 重新连接到指定会话
tmux attach -t prometheus
启动仿真¶
打开终端,执行以下命令启动无人机仿真环境:
# 启动Gazebo仿真环境
roslaunch prometheus_gazebo sitl_outdoor_1uav_P450.launch
等待约30秒,你将看到Gazebo窗口中出现一架四旋翼无人机,静静地停在Prometheus开发环境中。
查看无人机状态¶
在tmux中创建新窗口(Ctrl+b +
c),或打开新的终端窗口,使用以下命令查看无人机发布的ROS话题:
# 列出所有ROS话题
rostopic list
你会看到大量的话题输出,这些话题就是无人机各个硬件组件向外发布的数据。例如:
/mavros/imu/data # IMU惯性测量数据
/mavros/local_position/pose # 本地位置和姿态
/mavros/state # 飞控状态
每一个话题背后,都对应着一个真实的硬件传感器或控制器。在后续的章节中,我们将逐一认识这些硬件。
让无人机起飞¶
在tmux中创建新窗口(Ctrl+b +
c),或打开另一个终端,运行起飞降落的示例程序:
# 运行自动起飞降落程序
roslaunch prometheus_demo takeoff_land.launch
观察Gazebo窗口,你将看到无人机缓缓升空,悬停片刻后自动降落。
恭喜! 你已经完成了第一次无人机仿真飞行。
无人机硬件系统全景¶
刚才的仿真飞行虽然只有短短几十秒,但背后涉及了无人机的所有硬件子系统协同工作。让我们用一个”人体类比”来理解这些系统:
人体部位 |
功能 |
无人机硬件 |
作用 |
|---|---|---|---|
眼睛、耳朵 |
感知外界 |
相机、激光雷达 |
感知系统:获取环境信息 |
前庭、小脑 |
平衡与定位 |
IMU、GPS、UWB |
定位系统:知道”我在哪” |
大脑 |
思考与决策 |
机载计算机 |
决策系统:处理信息、做出决策 |
神经中枢 |
协调控制 |
飞控(Pixhawk) |
控制系统:执行飞行控制 |
四肢、肌肉 |
执行动作 |
电机、螺旋桨 |
执行系统:产生升力与推力 |
躯干、心脏 |
支撑与供能 |
机架、电池 |
机体与能源:承载与供电 |
这六大系统构成了无人机的完整硬件架构。
数据流向¶
当无人机执行自主飞行任务时,数据在各系统间流动:
感知系统采集环境数据(图像、点云)
定位系统融合传感器数据,计算当前位置与姿态
决策系统根据任务目标,规划飞行路径
控制系统将路径转换为电机控制指令
执行系统驱动电机旋转,产生升力与推力
机体与能源为整个系统提供结构支撑和电力供应
理解这个数据流向,是掌握无人机系统的关键。
认识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文件,了解无人机模型的组成:
# 查看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 |
综合实践 |
系统集成 |
构建完整智能无人机模型 |
小结¶
本节我们完成了以下学习目标:
启动了第一次仿真飞行:使用Prometheus和Gazebo环境,运行P450无人机模型
理解了硬件系统架构:通过人体类比,认识了感知、定位、决策、控制、执行、机体能源六大子系统
认识了P450平台:了解了本课程学习平台的基本参数和模型结构
明确了学习路线:从”能飞”到”智能”的渐进式升级路径
在接下来的章节中,我们将深入每一个硬件子系统,学习: - 它解决什么问题(使用场景) - 如何选择合适的硬件(核心参数) - 硬件输出什么数据(数据接口) - 如何在仿真中添加和使用它(实践操作)
练习题¶
基础练习¶
环境验证:在你的环境中启动P450仿真,截图记录Gazebo窗口和终端输出。
话题探索:使用
rostopic list命令,找出至少5个与传感器相关的话题,并使用rostopic echo命令查看其中一个话题的数据内容。模型查看:找到P450的SDF模型文件,列出模型中包含的主要组件(links)名称。
思考题¶
如果要让无人机在完全黑暗的环境中自主飞行,你认为需要添加或替换哪些硬件?为什么?
对比消费级无人机(如DJI Mini)和科研平台(如P450),你认为它们在硬件系统上的主要差异是什么?
在人体类比中,我们将飞控比作”神经中枢”,机载计算机比作”大脑”。请思考:为什么需要两个独立的计算单元,而不是合并为一个?