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

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

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

项目地址:

1. 项目来源与主要改进

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

  • GCOPTER:https://github.com/ZJU-FAST-Lab/GCOPTER
  • MINCO 论文:https://arxiv.org/abs/2103.00190

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 示例使用球形障碍物。

编译并运行:

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

绘制结果:

python plot_minco_result.py minco_result_2d.json 2d
python plot_minco_result.py minco_result_3d.json 3d

2D轨迹优化效果

3D轨迹优化效果

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

optimize_v1():轨迹总时间自由

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

时间代价 + 能量代价

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

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

optimize_v2():固定轨迹总时间

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

末端位置误差 + 能量代价

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

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

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

时间代价 + 末端位置误差 + 能量代价

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

minco_optimizer::MINCO_Optimizer<2> optimizer2d;
minco_optimizer::MINCO_Optimizer<3> optimizer3d;

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

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

编译测试

git clone https://github.com/shupx/traj_opt.git
cd traj_opt
./compile.sh
# 或:./compile.sh -c

如果使用 Gitee:

git clone https://gitee.com/shu-peixuan/traj_opt.git

作为子目录集成

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

add_subdirectory(traj_opt)
target_link_libraries(your_target PRIVATE traj_opt::traj_opt)

源码中直接包含:

#include "traj_opt/minco_optimizer.hpp"

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

安装后使用

mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../install
make install

在其他工程中:

find_package(traj_opt REQUIRED)
target_link_libraries(your_target PRIVATE traj_opt::traj_opt)

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

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

项目地址:

参考资料:

  • MINCO 论文:https://arxiv.org/abs/2103.00190
  • GCOPTER 论文:https://doi.org/10.1109/TRO.2022.3160022
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值