开源一个无人机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 示例,再把示例中的位置约束回调替换成自己的地图查询接口。

项目地址:

参考资料:

相关推荐
workflower6 小时前
人形机器人“手”是关键
人工智能·机器学习·机器人·无人机
qq_25294131681 天前
无人机目标检测数据集(UAV Detection Dataset)| 无人机检测 反无人机 低空安防5001期
人工智能·yolo·目标检测·计算机视觉·视觉检测·无人机·反无人机
ShiMetaPi1 天前
厦大 + Meta 最新开源 M²E-UAV 数据集:破解机载“动对动“无人机检测难
开源·无人机·事件相机·evs
tianxuanjg1 天前
工业 / 协作机器人手腕手掌零部件采购指南|轻量化复杂结构件如何平衡精度与加工效率
经验分享·机器人·无人机·制造
可编程芯片开发1 天前
基于李雅普诺夫算法的四旋翼无人机姿态跟踪控制系统simulink建模与仿真
matlab·无人机·制造·四旋翼无人机·李雅普诺夫·姿态跟踪控制
GongYeRunHuaYou2 天前
无人机旋翼固定用胶怎么选?从结构粘接角度谈选型思路
无人机·工业胶粘剂·3m胶粘·旋翼粘接
HXSYS2 天前
无人机库房管理标准化,《无人机装调维修师》规范存储运维
运维·无人机
qq_25294131682 天前
航拍垃圾堆检测数据集 | 航拍垃圾检测 固废管理 无人机巡检 环保监测9025期
yolo·目标检测·计算机视觉·分类·无人机·垃圾检测·垃圾
科技小E2 天前
把人从百米高空拉下来:自动化AI算法训练服务器DLTM+无人机巡检让风机光伏缺陷无所遁形
人工智能·自动化·无人机