开源一个无人机MINCO轨迹规划库,纯C++,支持2D和3D以及多种变形

最近整理并开源了一个 MINCO 轨迹优化库:traj_opt。

它基于原有 GCOPTER 代码优化而来,支持 2D / 3D 轨迹和多种优化问题变形,并刻意做成与 ROS 解耦的纯 C++ 头文件库,方便集成到 ROS 1、ROS 2 或普通 CMake 项目中。

项目地址:

1. 项目来源与主要改进

原始项目是浙江大学 FAST Lab 的 GCOPTER:

GCOPTER 是一个基于 MINCO 的多旋翼轨迹优化器,支持动力学约束和用户自定义约束。traj_opt 在此基础上主要做了这些整理:

  • 统一支持 2D 和 3D 轨迹;
  • 增加多种时间约束和优化目标;
  • 提供 optimize_v1()、optimize_v2()、optimize_v3() 三种接口;
  • 做成纯头文件 C++ 库,不依赖 ROS;
  • 补充详细的头文件注释、参数说明和测试示例。

核心库使用 C++17 和 Eigen3。位置约束通过回调函数传入,因此不会绑定某一种地图或 ESDF 实现。

2. 先看测试示例:2D、3D 都能直接跑

仓库的 test 目录提供了比较完整的使用参考:

  • test_minco_optimizer_v1.cpp
  • test_minco_optimizer_v2.cpp
  • test_minco_optimizer_v3.cpp
  • plot_minco_result.py

测试程序覆盖了:初始状态、目标位置、中间航路点、时间分配、物理约束、位置违反量、梯度回调、优化和 JSON 结果绘图。2D 示例使用圆形障碍物,3D 示例使用球形障碍物。

编译并运行:

bash 复制代码
mkdir build && cd build
cmake .. -DBUILD_TESTING=ON
make
cd ../test

# v1:自由总时间,分别运行 3D 和 2D
./../build/test/test_minco_optimizer_v1
./../build/test/test_minco_optimizer_v1 2d

# v2:固定总时间
./../build/test/test_minco_optimizer_v2
./../build/test/test_minco_optimizer_v2 2d

绘制结果:

bash 复制代码
python plot_minco_result.py minco_result_2d.json 2d
python plot_minco_result.py minco_result_3d.json 3d

3. 三种优化形式和约束接口

optimize_v1():轨迹总时间自由

起点PVA固定,优化每段时间、中间航路点和末端 PVA 状态,目标主要是:

text 复制代码
时间代价 + 能量代价

适合在轨迹耗时、平滑性和能量之间自动权衡。

和gcopter不同,此处末端 PVA 状态也作为优化变量没有固定,但被限制在一个球形区域内,可以设置该球形区域半径为零来达到固定末端状态的目的,因此比直接固定末端位置更加通用。

optimize_v2():固定轨迹总时间

总时间固定,优化中间航路点、末端 PVA 和段时间分配,目标主要是:

text 复制代码
末端位置误差 + 能量代价

适合任务已经规定总时长的情况。

optimize_v3():自由时间 + 末端位置代价

总时间不固定,同时考虑时间代价、能量代价和末端位置误差:

text 复制代码
时间代价 + 末端位置误差 + 能量代价

三个版本都支持 2D / 3D,通过模板参数指定维度:

cpp 复制代码
minco_optimizer::MINCO_Optimizer<2> optimizer2d;
minco_optimizer::MINCO_Optimizer<3> optimizer3d;

库还提供速度、角速度、倾角、推力和位置等约束配置。位置约束回调返回违反量、位置梯度和时间梯度,可以接入圆形/球形障碍物、ESDF、栅格地图或动态障碍物。

4. 安装与集成到 ROS 1 / ROS 2

编译测试

bash 复制代码
git clone https://github.com/shupx/traj_opt.git
cd traj_opt
./compile.sh
# 或:./compile.sh -c

如果使用 Gitee:

bash 复制代码
git clone https://gitee.com/shu-peixuan/traj_opt.git

作为子目录集成

这是 README 推荐的方式。把仓库放到自己的工程中:

cmake 复制代码
add_subdirectory(traj_opt)
target_link_libraries(your_target PRIVATE traj_opt::traj_opt)

源码中直接包含:

cpp 复制代码
#include "traj_opt/minco_optimizer.hpp"

这种方式适合放进 ROS 1 catkin、ROS 2 ament / colcon 或普通 CMake 工程一起编译,不需要库本身依赖 ROS。

安装后使用

bash 复制代码
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
make install

在其他工程中:

cmake 复制代码
find_package(traj_opt REQUIRED)
target_link_libraries(your_target PRIVATE traj_opt::traj_opt)

如果安装路径不是系统默认路径,可以设置:

bash 复制代码
cmake .. -DCMAKE_PREFIX_PATH=/path/to/traj_opt/install

5. 适用场景

traj_opt 更适合作为轨迹规划后端,接在 A*、RRT 等路径搜索器后面,用于:

  • 无人机轨迹平滑和优化;
  • 2D 移动机器人轨迹优化;
  • 3D 无人机避障;
  • 编队和多旋翼轨迹生成;
  • 带速度、推力和倾角约束的轨迹规划;
  • ROS 1 / ROS 2 之间复用同一套 C++ 优化代码。

它本身不负责路径搜索、建图或发布 ROS topic,提供的是一个独立、可嵌入的 MINCO 轨迹优化后端。

如果你正在使用 GCOPTER,或者想在 ROS 工程中接入 MINCO,可以先运行 test 示例,再把示例中的位置约束回调替换成自己的地图查询接口。

项目地址:

参考资料:

相关推荐
零基础12317 小时前
卡车—无人机协同路径规划:八篇前沿论文选读
无人机
QYR-分析18 小时前
算力下沉,低空新支点:全球无人机机载计算盒市场竞争与发展研判
云计算·无人机
YOLO数据集集合18 小时前
道路与桥梁灾后损伤检测数据集 | 道路损伤 桥梁损坏 灾后评估 无人机巡检 目标检测 YOLO格式 深度学习数据集 计算机视觉10551期
yolo·目标检测·计算机视觉·无人机·桥梁损害·灾后评估
菜鸟1号!!1 天前
无人机仿真与真机开发基础_小白友好版
无人机
不做无法实现的梦~2 天前
基于 PX4 的全仓库架构、无人机算法解析与开发学习规划
算法·架构·无人机
workflower2 天前
AI 产业链带动效应加速,催生AI 原生企业
人工智能·机器学习·机器人·云计算·无人机
集智飞行2 天前
无人机集群通信架构剖析,以及对未来发展的几点判断
架构·无人机
YOLO数据集集合3 天前
江西九江地区洪涝无人机高分辨率影像数据集 | 洪涝监测 语义分割 无人机遥感 淹没识别 灾害评估9157期
人工智能·yolo·目标检测·无人机·洪涝·洪水灾害
沈阳昊天环宇无人机小编辑3 天前
实战外业实训|10 月中旬,沈阳周边无人机巡检 + 测绘项目实操,跟着项目练真本事
无人机