写在前面
我想用 ROS2 玩飞控,但不想一开始就买硬件、装机架、调电调、担心炸机。
所以这个系列先从仿真开始:
MuJoCo 四旋翼动力学 |
这不是一个“我已经全部学完然后来写教程”的系列,而是一个从零开始的公开实验日志。目标很简单:一点点把 ROS2、MuJoCo 和飞控控制链路跑通。
为什么先选 MuJoCo
飞控仿真有很多路线,比如 Gazebo、AirSim、jMAVSim、Isaac Sim、MuJoCo 等。PX4 官方生态里 Gazebo 更顺,但我这次更想先用 MuJoCo,原因有三个:
-
动力学仿真比较干净
MuJoCo 很适合研究刚体动力学、接触、执行器、传感器建模。对学习控制来说,反馈比较直接。 -
模型文件清晰
MJCF/XML 能直接描述 body、joint、actuator、sensor。对理解无人机模型很有帮助。 -
适合先学控制本身
一开始不急着接完整飞控栈,而是先理解:电机推力怎么产生、姿态怎么稳定、高度怎么闭环。
也就是说,MuJoCo 这条线更像是:
先把“飞机为什么能稳住”学明白, |
ROS2、MuJoCo、飞控分别负责什么
我先把角色关系粗略拆开:
MuJoCo
负责物理世界:
- 四旋翼机体质量、惯量。
- 螺旋桨/电机近似模型。
- 重力和动力学积分。
- IMU、位姿、速度等仿真传感器。
ROS2
负责软件系统:
- 节点组织。
- 话题通信。
- 参数管理。
- 可视化与日志。
- 后续和导航、感知、规划模块连接。
控制器
负责把目标变成动作:
- 给定目标高度,输出总推力。
- 给定目标姿态,输出滚转/俯仰/偏航力矩。
- 再把力和力矩分配到四个电机。
可以先简单理解成:
目标位置/姿态 |
第一阶段目标:让四旋翼悬停
最小闭环目标不是自主导航,也不是 SLAM,而是:悬停。
如果连悬停都没跑稳,后面的轨迹跟踪、避障、视觉导航都只是堆东西。
第一阶段我希望做到:
- 能加载一个四旋翼 MuJoCo 模型。
- 能读取机体位置、速度、姿态、角速度。
- 能给四个电机输入控制量。
- 写一个最基础的高度 PID。
- 写一个姿态稳定控制。
- 最后让飞机在空中稳定悬停几秒钟。
可能使用的开源项目
先记录几个后面会重点看的项目:
MuJoCo
https://github.com/google-deepmind/mujoco
官方物理引擎。本系列的底层仿真环境。
mujoco_menagerie
https://github.com/google-deepmind/mujoco_menagerie
Google DeepMind 维护的 MuJoCo 模型库。里面有很多质量比较高的机器人模型,可以参考它的建模方式。
mujoco_ros2_control
https://github.com/ros-controls/mujoco_ros2_control
把 MuJoCo 接到 ROS2 control 的项目。后面如果想更标准地接 ROS2 控制链路,这个项目很值得研究。
PX4-Autopilot
https://github.com/PX4/PX4-Autopilot
虽然这条系列先用 MuJoCo,但 PX4 仍然是后续值得接入的飞控生态。等基础控制熟悉后,可以再看 PX4 Offboard、uXRCE-DDS、MAVLink 等内容。
暂定学习路线
00:路线选择
也就是这篇:先把为什么用 MuJoCo、为什么从仿真开始说清楚。
01:环境搭建
计划包括:
- Ubuntu 版本选择。
- ROS2 Humble / Jazzy 选择。
- MuJoCo 安装。
- Python binding 测试。
- 简单模型加载。
02:四旋翼模型拆解
重点看:
- body 层级。
- mass / inertia。
- actuator。
- sensor。
- 电机推力和力矩怎么近似。
03:读取状态与传感器
包括:
- 世界系位置。
- 机体系速度。
- 四元数姿态。
- 角速度。
- IMU 数据。
04:高度控制
从最简单的高度 PID 开始:
目标高度 z_ref |
05:姿态控制
让飞机不乱翻:
- roll 控制。
- pitch 控制。
- yaw 控制。
- 角速度阻尼。
06:位置控制
在悬停基础上,让飞机前后左右移动。
07:ROS2 化
把仿真和控制拆成 ROS2 节点:
/mujoco_sim |
可能的话,先设计这些话题:
/imu |
先不做什么
为了避免一开始摊子太大,先不做这些:
- 不急着买真实飞控。
- 不急着接 PX4。
- 不急着做视觉 SLAM。
- 不急着做强化学习。
- 不急着追求漂亮 UI。
先把最核心的闭环跑通。
当前结论
这个系列的第一目标是:
用 MuJoCo 搭一个能跑起来的四旋翼仿真环境,再用 ROS2 逐步组织控制、状态和可视化。
如果一切顺利,后面可以自然扩展到:
- PX4 Offboard。
- MAVLink / MAVSDK。
- 轨迹跟踪。
- 视觉定位。
- 强化学习控制。
- 最终上真实小飞机。
但现在先别想太远。
第一步就是:让仿真里的飞机稳稳悬停。