跳转至

附录_项目全景调研

无人机运动规划与控制开源C++项目全景调研

本报告系统调研了GitHub上**85+个**无人机规划与控制领域的优秀开源C++项目,覆盖HKU MaRS Lab、ZJU FAST Lab、HKUST Aerial Robotics、ETH Zurich ASL/RPG、MIT ACL、KumarRobotics、PX4等顶级实验室。最核心发现:GCOPTER、ikd-Tree、voxblox、mav_trajectory_generation和agilicious这五个项目在C++工程教学价值上达到了满分(5/5),分别代表了header-only库设计、模板化并发数据结构、泛型空间索引、非类型模板参数以及现代C++17流水线架构的最佳实践。这些项目整体呈现出从C++11到C++17的演进趋势,Eigen模板表达式是贯穿所有项目的核心技术线索,而ROS1/ROS2双支持正成为新项目的标配。


一、项目总览清单

1.1 轨迹规划类

项目 GitHub Stars 核心算法 C++标准 C++工程亮点 教学评分
GCOPTER ZJU-FAST-Lab/GCOPTER ~1,100 MINCO轨迹表示+L-BFGS优化 C++11/14 Header-only全库设计,Eigen模板表达式,O(N)带状矩阵 ⭐⭐⭐⭐⭐
large_scale_traj_optimizer ZJU-FAST-Lab/large_scale_traj_optimizer 253 Minimum-jerk/snap双描述 C++11 仅2个头文件,极简API设计 ⭐⭐⭐⭐⭐
Fast-Planner HKUST-Aerial-Robotics/Fast-Planner ~3,200 动力学A*+B-spline优化 C++11 FSM模式,NLopt集成,ESDF flat array ⭐⭐⭐⭐
EGO-Planner ZJU-FAST-Lab/ego-planner ~1,800 无ESDF梯度B-spline优化 C++11 FSM+Manager模式,LBFGS-Lite ⭐⭐⭐⭐
SUPER hku-mars/SUPER ~828 双轨迹安全规划+CIRI走廊 C++14/17 ROS1/ROS2双支持,多包架构,shared_ptr工厂 ⭐⭐⭐⭐
EGO-Planner-v2 ZJU-FAST-Lab/EGO-Planner-v2 654 MINCO轨迹(Science Robotics) C++14 多工作空间架构,生产级代码 ⭐⭐⭐
Teach-Repeat-Replan HKUST-Aerial-Robotics/Teach-Repeat-Replan ~1,000 凸多面体走廊+minimum-jerk C++11 CUDA加速,完整自主飞行系统 ⭐⭐⭐⭐
FASTER mit-acl/faster ~1,200 JPS3D+凸分解+Gurobi优化 C++11/14 Gurobi C++集成,Docker支持 ⭐⭐⭐⭐
MADER mit-acl/mader ~300 MINVO基+Octopus搜索 C++14 CGAL集成,Gurobi/NLopt可切换后端 ⭐⭐⭐½
ewok VladyslavUsenko/ewok ~350 B-spline+3D环形缓冲区ESDF C++11/14 环形缓冲区数据结构,heavy Eigen模板 ⭐⭐⭐⭐
Btraj HKUST-Aerial-Robotics/Btraj ~300 Bernstein基多项式+Mosek QP C++11 Armadillo线性代数,Mosek QP集成 ⭐⭐⭐
TimeOptimizer HKUST-Aerial-Robotics/TimeOptimizer ~200 SOCP时间优化 C++11 轨迹基类继承模式,Mosek SOCP ⭐⭐⭐
am_traj ZJU-FAST-Lab/am_traj 交替最小化多项式轨迹 C++11 Header-only库 ⭐⭐⭐⭐½
EVA-Planner ZJU-FAST-Lab/EVA-planner ~150 环境自适应梯度规划 C++11 基于Teach-Repeat-Replan框架 ⭐⭐⭐
IPC hku-mars/IPC ~240 统一规划+MPC控制@100Hz C++14 OSQP/OSQP-Eigen集成,QP实时优化 ⭐⭐⭐⭐
EFOPT hku-mars/EFOPT ~18 SQP+\(\ell_1\)罚方法(尾座式) C++14/17 自定义SQP求解器,解析梯度 ⭐⭐⭐⭐
Primitive-Planner ZJU-FAST-Lab/Primitive-Planner 158 运动原语库+TOPP-RA C++14 离线/在线分离架构,线性复杂度选择 ⭐⭐⭐⭐
DDR-opt ZJU-FAST-Lab/DDR-opt 359 MINCO地面机器人轨迹优化 C++14 MINCO泛化应用 ⭐⭐⭐
Fast-Racing ZJU-FAST-Lab/Fast-Racing 无人机竞速规划 C++17 GCOPTER并行扩展 ⭐⭐⭐

1.2 自主探索类

项目 GitHub Stars 核心算法 C++工程亮点 教学评分
FUEL HKUST-Aerial-Robotics/FUEL ~1,300 增量前沿信息结构+层级规划 增量数据结构维护,层级规划架构 ⭐⭐⭐⭐
RACER SYSU-STAR/RACER ~715 去中心化多机探索+LKH TSP 外部求解器集成(LKH文件I/O),T-RO 2023最佳论文 ⭐⭐⭐⭐
FC-Planner HKUST-Aerial-Robotics/FC-Planner ~337 骨架引导覆盖规划 OMPL集成,并行子问题求解 ⭐⭐⭐⭐
FALCON HKUST-Aerial-Robotics/FALCON ~261 覆盖路径引导探索 T-RO 2024 ⭐⭐⭐½
nbvplanner ethz-asl/nbvplanner ~263 RRT次优视角规划 OctoMap C++ API使用,git子模块管理 ⭐⭐⭐
mav_active_3d_planning ethz-asl/mav_active_3d_planning ~633 模块化信息路径规划 虚函数插件框架,工厂模式 ⭐⭐⭐⭐
LARGE (large_scale_traj_optimizer的探索扩展) ZJU-FAST-Lab/LARGE 大规模自主探索 待验证 待验证

1.3 MPC与控制类

项目 GitHub Stars 核心算法 C++工程亮点 教学评分
agilicious uzh-rpg/agilicious ~549 MPC/DFBC/INDI多控制器 C++17流水线架构,工厂模式+YAML配置,Guard安全模式 ⭐⭐⭐⭐⭐
control-toolbox (CT) ethz-adrl/control-toolbox ~1,600 iLQR/GNMS/NMPC/LQR 极致模板元编程,编译期维度参数,CppAD自动微分 ⭐⭐⭐⭐⭐
rpg_mpc uzh-rpg/rpg_mpc ~422 ACADO代码生成+qpOASES Eigen::Map零拷贝,三层包装架构 ⭐⭐⭐⭐
rpg_quadrotor_control uzh-rpg/rpg_quadrotor_control ~696 SE(3)几何控制+差分平坦 ControllerBase抽象接口(Strategy模式) ⭐⭐⭐⭐
PX4-Autopilot PX4/PX4-Autopilot ~11,000 级联PID+EKF2+状态机 CRTP(ModuleBase),uORB发布-订阅,无堆分配 ⭐⭐⭐⭐
acados acados/acados ~1,300 NMPC/SQP-RTI C核心+C++封装,代码生成模式,静态内存分配 ⭐⭐⭐⭐
mav_control_rw ethz-asl/mav_control_rw ~300 线性/非线性MPC对比 扰动观测器,LAPACK集成 ⭐⭐⭐
mavros_controllers Jaeyoung-Lim/mavros_controllers ~500 SE(3)几何跟踪控制 PX4 SITL集成 ⭐⭐⭐
control_toolbox (ros) ros-controls/control_toolbox ~172 PID(反积分饱和) 干净的PID实现,ROS2参数处理 ⭐⭐⭐⭐
data_driven_mpc uzh-rpg/data_driven_mpc ~302 GP增强MPC Python为主,C++有限 ⭐⭐

1.4 集群协同类

项目 GitHub Stars 核心算法 C++工程亮点 教学评分
EGO-Swarm ZJU-FAST-Lab/ego-planner-swarm ~900 去中心化B-spline共享 多进程ROS架构,异步轨迹交换 ⭐⭐⭐⭐
Swarm-Formation ZJU-FAST-Lab/Swarm-Formation ~300 MINCO+图论编队代价 可微分图论代价函数,Docker支持 ⭐⭐⭐½
RACER SYSU-STAR/RACER ~715 去中心化协作探索 见探索类 ⭐⭐⭐⭐
MADER mit-acl/mader ~300 多智能体动态环境规划 CGAL+Gurobi ⭐⭐⭐½
mrs_uav_system ctu-mrs/mrs_uav_system ~400 多机全栈系统 极其模块化的ROS架构,Docker/Apptainer ⭐⭐⭐⭐

1.5 地图/数据结构类

项目 GitHub Stars 核心算法 C++工程亮点 教学评分
ikd-Tree hku-mars/ikd-Tree ~779 增量KD树+后台重建 模板类+std::thread+mutex,独立无ROS依赖 ⭐⭐⭐⭐⭐
voxblox ethz-asl/voxblox ~1,600 TSDF/ESDF体素映射 Layer<VoxelType>模板,三种线程模式,Protobuf序列化 ⭐⭐⭐⭐⭐
FIESTA HKUST-Aerial-Robotics/FIESTA 快速增量ESDF BFS+双向链表+增量更新 ⭐⭐⭐⭐⭐
OctoMap OctoMap/octomap ~1,800 概率八叉树3D映射 高效内存管理,序列化 ⭐⭐⭐⭐
ROG-Map hku-mars/ROG-Map 机器人中心占据栅格 增量更新,A*/RRT*示例 ⭐⭐⭐⭐
BDM hku-mars/BDM ~97 边界地图 内存高效大规模占据映射 ⭐⭐⭐
DecompUtil sikang/DecompUtil ~200 椭球凸分解 Header-only,Eigen-based ⭐⭐⭐⭐
LBFGS-Lite ZJU-FAST-Lab/LBFGS-Lite L-BFGS优化器 单文件header-only,~800行,非光滑支持 ⭐⭐⭐⭐⭐
minvo mit-acl/minvo ~100 最小体积单纯形包络 Header-only数学实现 ⭐⭐⭐

1.6 仿真类

项目 GitHub Stars 核心特征 C++工程亮点 教学评分
rotors_simulator ethz-asl/rotors_simulator ~1,500 Gazebo MAV仿真 Gazebo插件架构,FirstOrderFilter<T>模板 ⭐⭐⭐⭐
flightmare uzh-rpg/flightmare ~1,300 Unity渲染+C++物理 C++17,VecEnv<T>模板,ZeroMQ IPC,pybind11 ⭐⭐⭐⭐½
AirSim microsoft/AirSim ~17,000 UE4高保真仿真 Header-only物理引擎,Factory/Strategy模式,RPC架构 ⭐⭐⭐⭐
MARSIM hku-mars/MARSIM ~520 轻量级点云LiDAR仿真 PCL渲染,多机多线程仿真 ⭐⭐⭐⭐
mockamap HKUST-Aerial-Robotics/mockamap ~206 程序化3D地图生成 PCL+ROS入门级代码 ⭐⭐⭐
Fast-Drone-250 ZJU-FAST-Lab/Fast-Drone-250 2,300 完整250mm无人机方案 硬件+软件全栈集成 ⭐⭐⭐⭐⭐(系统)
mrs_multirotor_simulator ctu-mrs/mrs_multirotor_simulator ~50 Header-only动力学仿真 Header-only C++,ODE求解器 ⭐⭐⭐½

1.7 全栈自主框架与基础设施

项目 GitHub Stars 核心功能 C++工程亮点 教学评分
kr_autonomous_flight KumarRobotics/kr_autonomous_flight ~763 GPS拒止全自主飞行 .clang-format代码规范,Docker部署,CI/CD,Nodelet零拷贝 ⭐⭐⭐⭐⭐
CERLAB-UAV-Autonomy Zhefan-Xu/CERLAB-UAV-Autonomy ~634 CMU全栈自主框架 模块化C++/ROS/PX4,视频教程 ⭐⭐⭐⭐
mav_voxblox_planning ethz-asl/mav_voxblox_planning ~400 voxblox+OMPL+轨迹规划 OMPL集成模式,ESDF碰撞检测 ⭐⭐⭐⭐
mav_trajectory_generation ethz-asl/mav_trajectory_generation ~636 多项式轨迹生成(minimum-snap) PolynomialOptimization<N>非类型模板 ⭐⭐⭐⭐⭐
mavros mavlink/mavros ~1,800 MAVLink-ROS桥接 C++17插件架构,Boost.ASIO网络通信 ⭐⭐⭐⭐
MAVSDK mavlink/MAVSDK ~1,500 无人机SDK C++17,gRPC,跨平台 ⭐⭐⭐½
OMPL ompl/ompl ~1,100 采样运动规划库 干净抽象接口,Boost依赖 ⭐⭐⭐⭐
pinocchio stack-of-tasks/pinocchio ~3,100 刚体动力学及解析导数 C++17/20/23,模板元编程,CasADi自动微分 ⭐⭐⭐⭐⭐
crocoddyl loco-3d/crocoddyl ~1,200 FDDP最优控制 Pinocchio后端,Boost.Python绑定 ⭐⭐⭐⭐

二、明星项目深度剖析(20个最具教学价值的项目)

2.1 GCOPTER — Header-only轨迹优化的教科书

GitHub: https://github.com/ZJU-FAST-Lab/GCOPTER | Stars: ~1,100 | 论文: IEEE T-RO 2022 (Regular Paper) | 许可: MIT

GCOPTER代表了C++ header-only数学库设计的最高水准。整个轨迹优化框架完全由gcopter/include/gcopter/目录下的头文件构成:minco.hpp(MINCO轨迹表示)、firi.hpp(快速迭代区域膨胀走廊生成)、flatness.hpp(含非线性阻力的差分平坦)、lbfgs.hpp(集成的L-BFGS求解器)、gcopter.hpp(优化器编排)。

核心C++亮点: 所有计算通过**带状矩阵操作达到O(N)复杂度**,避免了密集矩阵求逆。Eigen模板表达式被用到极致——block<1,3>()固定大小块操作、JacobiSVD<Matrix3d, FullPivHouseholderQRPreconditioner>用于走廊生成、.cwiseAbs()/.cwiseQuotient()逐元素运算。轨迹阶数s可作为模板参数实现编译期策略选择。API设计堪称典范:reset()generate()getObjective()getGradT()getTraj()的流水线式调用链清晰自然。

推荐精读文件: minco.hpp(MINCO数学核心)、firi.hpp(SVD+线性规划的几何算法)、flatness.hpp(差分平坦的代码化推导)


2.2 ikd-Tree — 并发数据结构的完美教学范本

GitHub: https://github.com/hku-mars/ikd-Tree | Stars: ~779 | 论文: arXiv:2102.10808, 集成于FAST-LIO2 (IEEE T-RO 2022)

ikd-Tree是本次调研中C++模板与多线程教学价值最高的单一项目。template <typename PointType> class KD_TREE实现了完全泛型的增量KD树,支持任意点类型(PCL PointXYZINormal、自定义类型均可)。并发设计采用**双线程架构**:主线程处理插入/删除/搜索操作,专用重建线程在后台异步执行局部再平衡。std::threadpthread_mutex的混合使用、惰性删除标记机制、以及Eigen::aligned_allocator<PointType>的对齐分配器都是绝佳教学素材。

整个库仅ikd_Tree.hikd_Tree.cpp两个文件,外加3个standalone示例程序(速度测试、搜索演示、异步演示),无需ROS依赖。社区已有中文注释版本(KennyWGH/ikd-Tree-detailed)。

推荐精读: ikd_Tree.h(模板类定义+节点结构)、ikd_Tree.cpp(插入/删除/重建/搜索完整实现)、examples/ikd_tree_async_demo.cpp(异步重建演示)


2.3 voxblox — 泛型空间数据结构与多线程集成的标杆

GitHub: https://github.com/ethz-asl/voxblox | Stars: ~1,600 | 论文: IROS 2017 | 许可: BSD-3-Clause

voxblox的Layer<VoxelType>Block<VoxelType>是**C++模板泛型空间数据结构的最佳实践**。同一套空间哈希基础设施可以承载TsdfVoxel、EsdfVoxel、OccupancyVoxel或任意自定义体素类型。多线程模式是另一大亮点:TSDF积分器提供三种并行策略(Simple单线程、Merged多线程合并射线、Fast近似哈希并行),通过TsdfIntegratorType枚举实现**工厂/策略模式**的经典组合。

线程安全文档标注在每个函数级别,使用std::thread+std::mutex+std::atomic完整三件套。EIGEN_MAKE_ALIGNED_OPERATOR_NEW宏的使用展示了Eigen对齐分配的标准做法。Protobuf用于地图序列化是工程化的加分项。核心库(voxblox/)完全不依赖ROS,ROS封装在独立的voxblox_ros/包中——这种**库/ROS分离架构**值得所有项目学习。

推荐精读: voxblox/include/voxblox/core/layer.h(模板体素层+空间哈希)、voxblox/include/voxblox/integrator/tsdf_integrator.h(多线程+工厂模式)、voxblox/include/voxblox/core/voxel.h(体素类型定义)


2.4 mav_trajectory_generation — 非类型模板参数的经典案例

GitHub: https://github.com/ethz-asl/mav_trajectory_generation | Stars: ~636 | 论文: ISRR 2013(Springer, Robotics Research STAR vol.114, 2016)(Richter, Bry & Roy) | 许可: Apache-2.0

**PolynomialOptimization<N>**是C++非类型模板参数在机器人学中的教科书案例——N为编译时确定的多项式阶数(通常为10),贯穿整个库的类型系统。数据结构设计层次分明:Vertex(带导数约束的航路点,使用std::map<int, Eigen::VectorXd>存储约束)→Segment(每维一个多项式)→Polynomial(系数向量)→Trajectory(段序列)。NLopt集成展示了C++调用C风格回调的标准模式(静态成员函数+void* user data转this指针)。

README提供了完整的代码使用示例,从waypoint设置到轨迹生成的每一步都有清晰说明。多包结构将核心库、ROS封装、可视化、示例分离得非常干净。

推荐精读: polynomial_optimization_linear.h(QP建立+非类型模板)、polynomial_optimization_nonlinear.h(NLopt回调封装)、vertex.h(约束映射设计)、polynomial.h(多项式求根的数值算法)


2.5 agilicious — 现代C++17工程架构的最佳示范

GitHub: https://github.com/uzh-rpg/agilicious | Stars: ~549 | 论文: Science Robotics 2022 | 许可: 需注册

agilicious是**C++17在机器人控制系统中应用的标杆项目**。其核心创新在于**Pipeline架构**:控制器(MPC/DFBC/INDI)、估计器(多种EKF)、参考轨迹源可运行时通过YAML配置文件动态组合切换。这通过**工厂模式**从配置文件创建模块实例来实现。

agilib是核心C++库,仅依赖Eigen,不依赖ROS;agiros提供ROS绑定。**Guard安全模式**是独特亮点——一个备用流水线在主流水线失败时接管,这是实际飞行系统必须的安全设计。BEM(叶素动量理论)螺旋桨模型提供了比简单推力系数更精确的气动仿真。项目已被30+篇论文使用。

推荐精读: 各模块的接口定义文件(控制器、估计器基类)、Pilot状态机实现、Guard安全模块


2.6 ethz-adrl/control-toolbox — 模板元编程的极致应用

GitHub: https://github.com/ethz-adrl/control-toolbox | Stars: ~1,600 | 论文: IEEE SIMPAR 2018 (最佳学生论文) | 许可: BSD-2

这是**本次调研中模板使用最密集的项目**。典型类签名:template <size_t STATE_DIM, size_t CONTROL_DIM, size_t P_DIM, size_t V_DIM, typename SCALAR, bool CONTINUOUS>——所有维度在编译期确定,实现**零开销抽象**。模块化设计分为ct_core(系统动力学、积分器)、ct_optcon(iLQR/GNMS/NMPC求解器)、ct_rbd(刚体动力学)、ct_models(包含四旋翼模型)。

**自动微分集成**是独特教学点:通过CppAD和CppADCodeGen支持动力学函数的自动求导,消除了手工推导雅可比矩阵的需要。Policy/Strategy模式用于求解器选择,CRTP用于静态多态。可独立于ROS构建。

注意: 项目自2021年后维护较少,但其C++架构设计仍是最优秀的参考。

推荐精读: ct_optcon/include/ct/optcon/nloc/algorithms/ilqr/iLQR.hppct_core/include/ct/core/systems/(系统动力学模板)、ct_models/include/ct/models/Quadrotor/


2.7 large_scale_traj_optimizer — 极简API设计的典范

GitHub: https://github.com/ZJU-FAST-Lab/large_scale_traj_optimizer | Stars: 253 | 论文: ICRA 2021

整个项目仅2个头文件traj_min_jerk.hpptraj_min_snap.hppJerkOpt/SnapOpt类提供了极其优雅的API:reset()generate()getObjective()getGradT()getGradInnerP()getTraj()所有计算O(N)复杂度,通过多项式的"双描述"实现——可能是目前最快的minimum snap轨迹生成器。每个函数返回值直接可微分,可嵌入下游优化。C++ 99.5%的语言占比说明了其纯粹性。

这是教学中讲解"如何设计高效C++数学库API"的完美案例。


2.8 Fast-Planner — 理解完整规划管线的最佳入口

GitHub: https://github.com/HKUST-Aerial-Robotics/Fast-Planner | Stars: ~3,200 | 论文: RA-L 2019 / ICRA 2020 / T-RO (RAPTOR)

Fast-Planner是**UAV规划领域引用率最高、Star数最多的项目**(3,200+星),也是EGO-Planner、FUEL、RACER等后续项目的代码基础。其FSM模式(KinoReplanFSM:INIT→WAIT_TARGET→GEN_NEW_TRAJ→REPLAN_TRAJ→EXEC_TRAJ)和Manager模式(FastPlannerManager协调path_searching、bspline_opt、plan_env)是ROS C++机器人系统的经典架构。

**SDFMap的flat array实现**值得深入研究:使用std::vector<double>存储3D体素数据并通过idx = x + y * dim_x + z * dim_x * dim_y手动索引——这是**缓存友好型3D数据布局**的经典做法。KinodynamicAstar使用自定义NodeHashTable(为Eigen::Vector3i定制的哈希函数)展示了如何为特定场景优化标准库容器。NLopt集成通过静态成员函数+void*用户数据的C/C++桥接模式实现。

推荐精读: path_searching/kinodynamic_astar.cpp(动力学A*完整实现)、bspline_opt/bspline_optimizer.cpp(NLopt优化封装)、plan_env/sdf_map.cpp(ESDF构建)、plan_manage/kino_replan_fsm.cpp(FSM状态机)


2.9 EGO-Planner — ESDF-free设计的工程突破

GitHub: https://github.com/ZJU-FAST-Lab/ego-planner | Stars: ~1,800 | 论文: IEEE RA-L 2021

EGO-Planner的核心创新是**去除了ESDF构建步骤**——直接在占据栅格上通过碰撞检测计算近似梯度,将单次规划时间压缩到~1ms。代码架构继承了Fast-Planner的FSM+Manager模式但更精简。**LBFGS-Lite**的集成展示了如何使用header-only C++库简化依赖管理。多包ROS工作空间组织(plan_manage、bspline_opt、path_searching、plan_env、traj_utils)是教学中演示"关注点分离"的理想案例。

推荐精读: bspline_opt/src/bspline_optimizer.cpp(核心优化逻辑:代价函数、梯度计算、calcDistanceCostRebound)、plan_manage/src/ego_replan_fsm.cpp(FSM实现)


2.10 PX4-Autopilot — 嵌入式C++工程的工业标准

GitHub: https://github.com/PX4/PX4-Autopilot | Stars: ~11,000 | 许可: BSD-3-Clause

PX4是**飞控领域最大的开源项目**,其C++工程实践代表了安全关键嵌入式系统的行业标准。三个核心C++亮点:

第一,CRTP模式**在ModuleBase<T>中的应用——每个模块继承ModuleBase<DerivedModule>实现编译期静态分派,避免虚函数开销。第二,**uORB发布-订阅中间件**采用共享内存零拷贝设计,消息从.msg文件自动生成为固定大小C/C++结构体,uORB::SubscriptionuORB::Publication<T>提供类型安全的泛型接口。第三,**无堆分配策略——控制回路中不使用std::vectornew,所有矩阵使用自定义的编译期固定大小Matrix<Type, M, N>模板类。

自定义矩阵库src/lib/matrix/是独立于Eigen的教学素材,展示了如何从零设计支持Quaternion<Type>Dcm<Type>Euler<Type>的航空数学库。Commander.cpp的状态机和Navigator的策略模式(NavigatorMode基类→Mission/Loiter/RTL/Land派生类)也极具教学价值。

推荐精读: src/lib/matrix/matrix/Quaternion.hpp(模板四元数类)、src/modules/mc_att_control/(级联PID)、src/modules/commander/Commander.cpp(状态机)、src/modules/navigator/navigator_main.cpp(Strategy模式)


2.11 rpg_mpc — Eigen::Map零拷贝封装的最佳案例

GitHub: https://github.com/uzh-rpg/rpg_mpc | Stars: ~422 | 论文: IROS 2018 (PAMPC)

rpg_mpc的**三层架构设计**是C++封装模式的教科书案例:底层mpc_solver是ACADO自动生成的列优先C数组代码;中间层mpc_wrapper使用**Eigen::Map在不拷贝数据的情况下将原始C数组映射为Eigen矩阵对象**;顶层mpc_controller提供完整ROS控制器接口并继承ControllerBase。这个从自动生成C代码到类型安全C++接口的渐进封装过程,是讲解"如何优雅地包装遗留C代码"的绝佳案例。

推荐精读: mpc_wrapper/(Eigen::Map核心用法)、model/(ACADO模型描述→代码生成工作流)


2.12 FIESTA — 自定义空间数据结构的精品案例

GitHub: https://github.com/HKUST-Aerial-Robotics/FIESTA | 论文: IROS 2019

FIESTA的ESDF实现展示了**如何用BFS队列+双向链表+增量索引实现高效的距离场更新**。与voxblox的全量更新不同,FIESTA直接在占据栅格上操作,通过维护障碍物的链表结构实现O(changed_voxels)的增量更新。ESDFMap类使用flat buffer存储配合BFS队列遍历,是数据结构课程中"将理论算法应用于实际3D空间问题"的完美案例。

推荐精读: src/ESDFMap.cpp(增量ESDF的完整实现)


2.13 kr_autonomous_flight — 专业级ROS C++工程实践

GitHub: https://github.com/KumarRobotics/kr_autonomous_flight | Stars: ~763 | 论文: JFR 2018, RA-L 2022

在所有调研项目中,kr_autonomous_flight展现了**最成熟的软件工程实践**。.clang-format.cmake-format.yaml强制代码风格一致;GitHub Actions实现**CI/CD自动化测试**;Docker化部署将state_machine、control、map_plan、sim分离为独立容器;Nodelet用于**零拷贝消息传递**。分层架构autonomy_core/(核心算法)/ autonomy_sim/(仿真)/ autonomy_real/(硬件接口)清晰分离关注点。

这是讲解"从学术原型到工程化产品"的最佳案例。


2.14 flightmare — C++17与跨语言集成

GitHub: https://github.com/uzh-rpg/flightmare | Stars: ~1,300 | 论文: CoRL 2020 | 许可: MIT

flightmare的flightlib展示了**现代C++17的多项高级特性**。template<typename EnvBase> VecEnv**实现了向量化并行RL环境——可同时模拟数百架无人机。**ZeroMQ**用于C++物理引擎与Unity渲染器之间的进程间通信,UnityBridge采用**Singleton模式(getInstance())。**pybind11**实现了完整的Python绑定接口。自定义类型别名Vector<3>Vector<4>简化了Eigen使用。

项目的CMake构建完全独立于ROS,但可选集成catkin——这种灵活的构建策略是现代C++机器人库的发展方向。

推荐精读: flightlib/src/envs/vec_env.cpp(模板化环境)、flightlib/src/bridges/unity_bridge.cpp(ZeroMQ通信)


2.15 LBFGS-Lite — 单文件优化器的极简之美

GitHub: https://github.com/ZJU-FAST-Lab/LBFGS-Lite

约**800行C++**的header-only L-BFGS优化器,被ZJU FAST Lab几乎所有项目使用。支持Lewis-Overton线搜索、非光滑C0分段C2函数优化、非凸情况下的cautious更新。这是一个"小而完美"的教学组件——学生可以在一节课内完整阅读并理解整个优化器的实现。


2.16 SUPER — ROS1/ROS2双支持的工程参考

GitHub: https://github.com/hku-mars/SUPER | Stars: ~828 | 论文: Science Robotics 2025

SUPER的最大工程亮点是**同时支持ROS1(Noetic)和ROS2(Foxy)**。通过scripts/select_ros_version.sh脚本实现版本切换,多包工作空间结构(super_planner、rog_map、mission_planner、mars_uav_sim)展示了如何组织大型ROS项目。ROGMap::Ptr使用std::make_shared<rog_map::ROGMap>(nh)的共享指针工厂模式。


2.17 IPC — OSQP实时QP求解的集成案例

GitHub: https://github.com/hku-mars/IPC | Stars: ~240 | 论文: IEEE RA-L 2023

IPC将规划与控制统一为**100Hz的QP求解问题**,通过**OSQP-Eigen**库将安全飞行走廊约束编码为QP的线性约束。这是讲解"如何在C++中集成QP求解器实现实时控制"的理想案例。项目附带论文PDF,代码与论文可对照阅读。


2.18 AirSim — 大型C++项目架构的工业案例

GitHub: https://github.com/microsoft/AirSim | Stars: ~17,000

AirSim的**三层架构**(AirLib平台无关核心→Unreal Engine插件→MavLinkCom通信库)是大型C++项目解耦设计的典范。AirLib的物理引擎和传感器模型全部为**header-only设计**,可用任何C++11编译器独立编译。Factory模式创建不同飞行器配置,Strategy模式适配不同固件(PX4/ArduPilot/SimpleFlight),rpclib实现跨语言API调用。


2.19 rotors_simulator — Gazebo插件架构的标准参考

GitHub: https://github.com/ethz-asl/rotors_simulator | Stars: ~1,500 | 论文: Springer 2016

rotors_simulator遵循Google C++风格指南,是学习**Gazebo插件开发**的标准参考。每个传感器/执行器独立实现为ModelPluginGazeboMotorModel使用FirstOrderFilter<T>模板模拟电机动力学、GazeboIMUPlugin实现带噪声模型的IMU传感、GazeboWindPlugin模拟风场扰动。boost::bind用于Gazebo事件回调注册,Protobuf用于Gazebo内部消息传输。


2.20 DecompUtil — Header-only几何工具库

GitHub: https://github.com/sikang/DecompUtil | Stars: ~200

UPenn GRASP Lab开发的header-only凸分解库,被FASTER、MADER等多个规划器使用。提供椭球分解、种子分解、线段分解、迭代分解等多种自由空间建模方法。纯Eigen实现,API简洁,是讲解"如何设计可复用的C++计算几何库"的优秀案例。


三、可提炼的C++中高级教学主题

3.1 模板编程专题

主题一:非类型模板参数与编译期计算 - 最佳案例: mav_trajectory_generationPolynomialOptimization<N>将多项式阶数作为编译期参数 - 进阶案例: ethz-adrl/control-toolbox<STATE_DIM, CONTROL_DIM, P_DIM, V_DIM, SCALAR, CONTINUOUS>六参数模板 - 嵌入式案例: PX4 Matrix库 — Matrix<Type, M, N>替代Eigen实现零堆分配

主题二:类模板与泛型数据结构 - 最佳案例: ikd-Treetemplate <typename PointType> class KD_TREE支持任意点类型 - 进阶案例: voxbloxLayer<VoxelType>/Block<VoxelType>泛型空间索引 - 应用案例: flightmaretemplate<typename EnvBase> VecEnv向量化RL环境

主题三:CRTP(奇异递归模板模式) - 最佳案例: PX4 — ModuleBase<T>实现静态分派的模块生命周期管理 - 对比案例: rpg_quadrotor_controlControllerBase使用传统虚函数多态 - 讨论点: 静态多态 vs 动态多态的性能与灵活性权衡

3.2 并发与多线程专题

主题四:std::thread与互斥锁的实战用法 - 最佳案例: ikd-Tree — 主线程操作+后台重建线程的双线程架构 - 进阶案例: voxblox — 三种TSDF积分线程模式(Simple/Merged/Fast),每个函数标注线程安全性 - 嵌入式案例: PX4 uORB — 无锁共享内存发布-订阅

主题五:发布-订阅与事件驱动架构 - 最佳案例: PX4 uORB — 类型安全的uORB::Publication<T>/uORB::Subscription - ROS1案例: EGO-Planner — Timer驱动FSM + Subscriber回调 - 跨进程案例: flightmare — ZeroMQ实现C++↔Unity进程间通信

3.3 设计模式专题

主题六:有限状态机(FSM)模式 - 最佳案例: Fast-Planner — KinoReplanFSM五状态机(INIT→WAIT_TARGET→GEN_NEW_TRAJ→REPLAN_TRAJ→EXEC_TRAJ) - 复杂案例: PX4 Commander — 含arming/failsafe/mode切换的完整飞行器状态机 - 系统案例: agilicious Pilot — 含Guard安全备份的双流水线状态机

主题七:工厂模式与策略模式 - 工厂案例: agilicious — 从YAML配置动态创建控制器/估计器实例 - 策略案例: voxblox — TsdfIntegratorType枚举选择不同积分器实现 - 策略案例: PX4 Navigator — NavigatorMode基类+Mission/RTL/Loiter派生类

主题八:流水线架构与模块化组合 - 最佳案例: agilicious — 控制器/估计器/参考源运行时可组合切换 - 数据流案例: rpg_mpc三层架构 — 生成的C代码→Eigen封装→ROS控制器 - 工程案例: kr_autonomous_flight — Docker容器化的模块分离

3.4 Eigen高级用法专题

主题九:Eigen模板表达式与性能优化 - Block操作: GCOPTER — block<1,3>(i,j)固定大小块访问 vs block(i,j,m,n)动态块 - 逐元素操作: GCOPTER — .cwiseAbs(), .cwiseQuotient(), .cwiseProduct() - 分解算法: GCOPTER — JacobiSVD用于走廊生成 - 对齐分配: ikd-Tree — std::vector<PointType, Eigen::aligned_allocator<PointType>>

主题十:Eigen::Map与零拷贝接口 - 最佳案例: rpg_mpc — Eigen::Map将ACADO生成的列优先C数组映射为Eigen矩阵 - 应用场景: 封装遗留C代码、与GPU内存交互、避免不必要的数据拷贝

3.5 内存管理与性能专题

主题十一:无堆分配与嵌入式C++ - 最佳案例: PX4 — 控制回路中禁止newstd::vector,全部使用固定大小栈分配 - 对比案例: acados生成代码 — 静态内存分配的优化控制求解器 - 讨论: 安全关键系统中的内存确定性要求

主题十二:缓存友好的数据布局 - 最佳案例: Fast-Planner SDFMap — std::vector<double> flat array + 手动3D索引计算 - 对比案例: voxblox — 空间哈希分块存储 vs 连续数组 - 进阶案例: ewok — 3D环形缓冲区(circular buffer)实现高效的滑动窗口ESDF

3.6 库设计与构建系统专题

主题十三:Header-only库设计 - 最佳案例: GCOPTER — 完整轨迹优化框架全头文件实现 - 极简案例: large_scale_traj_optimizer — 仅2个头文件 - 单文件案例: LBFGS-Lite — ~800行的完整优化器 - 讨论: 编译时间 vs 使用便捷性的权衡,何时选择header-only

主题十四:库/ROS分离架构 - 最佳案例: voxblox — voxblox/(纯C++库) + voxblox_ros/(ROS封装) - 现代案例: agilicious — agilib(Eigen依赖) + agiros(ROS绑定) - 仿真案例: flightmare — flightlib(CMake独立) + flightros(catkin可选)

主题十五:跨语言绑定与代码生成 - pybind11: flightmare — C++物理引擎的Python RL接口 - ACADO代码生成: rpg_mpc — 符号化OCP→C代码→C++封装 - Protobuf序列化: voxblox — 地图持久化与跨节点传输 - RPC通信: AirSim — rpclib实现C++/Python/C#多语言API

3.7 优化库集成专题

主题十六:数值优化器的C++集成方法

优化库 代表项目 集成方式 问题类型
LBFGS-Lite GCOPTER, EGO-Planner Header-only直接包含 无约束非线性
NLopt Fast-Planner, mav_trajectory_generation C回调+void*用户数据 约束/无约束非线性
OSQP/OSQP-Eigen IPC C++封装,稀疏矩阵接口 二次规划(QP)
ACADO+qpOASES rpg_mpc, agilicious 代码生成离线+编译集成 MPC(OCP→QP)
Gurobi FASTER, MADER C++ API直接调用 LP/QP/MIP
Mosek Btraj, TimeOptimizer C API封装 QP/SOCP
CppAD/CppADCodeGen control-toolbox 模板化自动微分 动力学求导
CasADi data_driven_mpc, pinocchio Python接口+C代码生成 符号化NLP

四、关键发现与教学路径建议

从简单到复杂的推荐学习路径

第一阶段(C++基础强化):LBFGS-Lite(单文件优化器)和large_scale_traj_optimizer(2个头文件)入手,理解header-only库设计和数学库API设计范式。配合mockamap学习基础ROS C++节点开发。

第二阶段(核心数据结构): 精读ikd-Tree学习C++模板类、std::thread和mutex;精读FIESTA学习BFS+链表的增量空间数据结构;精读voxblox学习模板化泛型容器和多线程策略选择。

第三阶段(规划系统架构):EGO-Planner学习FSM+Manager架构模式和B-spline优化;从GCOPTER学习MINCO轨迹表示和Eigen高级用法;从Fast-Planner学习完整的感知-规划管线。

第四阶段(控制与MPC):rpg_mpc学习Eigen::Map和代码生成工作流;从PX4学习CRTP、uORB和嵌入式C++;从agilicious学习C++17流水线架构和工厂模式。

第五阶段(系统集成):kr_autonomous_flight学习专业级C++工程实践(CI/CD、Docker、代码规范);从EGO-Swarm/RACER学习分布式多机协同;从flightmare学习跨语言绑定和现代C++17模式。

项目生态的演进趋势

调研显示无人机规控C++项目正在经历三个明显趋势:一是**从C++11向C++17迁移**(agilicious、flightmare、MAVSDK已使用C++17,pinocchio支持C++23);二是**从ROS1-only向ROS1/ROS2双支持过渡**(SUPER、kr_param_map、ego-planner-swarm已提供ROS2分支);三是**从catkin_make向更灵活的CMake独立构建演进**(voxblox、agilicious、flightmare的核心库均可脱离ROS独立构建)。这些趋势直接影响教学内容的设计——现代C++特性和构建系统的灵活性应作为重点。

数据说明:Star数据和活跃度信息基于2026年4月调研时的GitHub公开信息,部分数据为近似值。EFOPT(~18星)等极新项目的star数和文档完整度可能快速变化。agilicious的完整代码可能需要注册获取。ethz-adrl/control-toolbox自2021年后维护有限但架构设计仍具参考价值。


以上项目调研提供了"哪些代码值得读、为什么值得读"的工程全景。接下来的四篇深度技术叙述则从**算法演进史**的角度,对教学大纲中最核心的四个专题进行十年尺度的全景分析。每篇叙述都是独立可读的技术报告,与主大纲章节的对应关系如下:附录 A(轨迹生成)对应 D3-D5,梳理从 Min-Snap 到 MINCO 的十五年演化;附录 B(感知-规划一体)对应 D6-D7,覆盖环境表征、自主探索与 3DGS 新范式;附录 C(MPC 与几何控制)对应 D1-D2,追溯从 SE(3) 控制到神经动力学 MPC 的控制器发展脉络;附录 D(RL 敏捷飞行)对应 D8-D9,复盘从勉强悬停到击败世界冠军的强化学习十年史。建议在学完对应大纲章节后精读相应附录,以获得更深层的理论脉络理解。