系列文章目录
前言
欢迎访问 TinyMPC 文档!
TinyMPC 是为凸模型预测控制量身定制的开源求解器,能以较小的内存占用进行高速计算。TinyMPC 使用 C++ 实现,依赖性极小,特别适合资源受限平台上的嵌入式控制和机器人应用。TinyMPC 可以处理状态和输入边界以及二阶锥约束。提供 Python、Julia 和 MATLAB 接口,帮助生成嵌入式系统的代码。
🏆 TinyMPC 已入围 IEEE ICRA 2024 最佳会议论文奖、最佳学生论文奖和自动化最佳论文奖!感谢所有使用过 TinyMPC 并提供反馈意见的人!
一、机器人演示
TinyMPC 有助于缩小计算密集型凸模型预测控制与资源有限的处理平台之间的差距。将 TinyMPC 集成到计算能力不足的机器人中,可使它们执行敏捷的机动动作并表现出安全的行为。
1.1 动态避障
TinyMPC 的运行速度足够快,可以在每个时间步重新线性化约束条件,使其能够推理移动的障碍物。左图中,以摇杆末端为中心的虚拟球体在每个时间步被线性化为一组新的超平面约束。此外,该算法还能处理任意数量的线性约束。例如,在右图中,它避开了棍子的末端,同时保持在 yz 平面上。
1.2 极端姿态恢复
TinyMPC 可以从极端初始条件下恢复姿势。在这个例子中,它与 Crazyflie 2.1 的三个现有控制器进行了比较。只有 TinyMPC 能够推理出控制极限,从而实现干净利落的恢复操作。
1.3 图 8 跟踪
我们将相同的控制器与不可行的快速 "8 "字形跟踪任务进行了比较(完成一个 "8 "字形所需的时间只有在无人机的功率大得多的情况下才能达到)。TinyMPC 和 PID 都能保持直立,但 TinyMPC 的轨迹更接近 "8 "字形。
二、微控制器基准
在微控制器基准测试中,TinyMPC 在速度和内存占用方面都优于最先进的求解器。
在这里,我们解决了随机生成的基于 QP 的 MPC 问题,并与 OSQP 比较了迭代时间和内存占用。与 OSQP 相比,TinyMPC 的最大速度提高了 8 倍,而内存占用却少得多。
TinyMPC 现在还能处理圆锥约束!在(b)中,我们在火箭柔性着陆问题上对 TinyMPC 与现有的两个嵌入式圆锥求解器 SCS 和 ECOS 进行了基准测试。TinyMPC 的平均速度是 SCS 的 13 倍,是 ECOS 的 137 倍。
实时控制要求求解器在严格的时间窗口内返回解。我们比较了 TinyMPC 与 SCS 和 ECOS 在火箭柔性着陆问题上的轨迹跟踪性能,同时人为地改变了每次求解的可用时间。在所有控制持续时间内,TinyMPC 比 SCS 和 ECOS 违反约束更少,跟踪误差更低。
三、开发者
四、引用
@inproceedings{tinympc,
title={TinyMPC: Model-Predictive Control on Resource-Constrained Microcontrollers},
author={Khai Nguyen and Sam Schoedel and Anoushka Alavilli and Brian Plancher and Zachary Manchester},
year={2024},
booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
}
@misc{tinympc-conic-codegen, title={Code Generation for Conic Model-Predictive Control on Microcontrollers with TinyMPC}, author={Sam Schoedel and Khai Nguyen and Elakhya Nedumaran and Brian Plancher and Zachary Manchester}, year={2024}, eprint={2403.18149}, archivePrefix={arXiv}, }
五、如何安装 TinyMPC?
我们提供用户友好的高级语言界面,以实现低级 C++ 代码生成和验证,使其可在嵌入式硬件上部署。我们还提供各种机器人控制示例,包括 Crazyflie 纳米四旋翼机器人。
请查看我们的 GitHub 存储库,了解实施细节: C++、Python、MATLAB、Julia
请访问我们的 GitHub 讨论页面,了解与求解器相关的任何问题!
要开始使用,只需选择您的语言界面,然后按照下面的简易安装说明进行操作即可(在 Ubuntu 上进行了测试)
C++
克隆 GitHub 仓库
git clone https://github.com/TinyMPC/TinyMPC.git
导航至根目录并运行
cd TinyMPC && mkdir build && cd build
运行 CMake 配置步骤
cmake .
构建 TinyMPC
cmake --build .
运行示例
./examples/quadrotor_hovering
Python
克隆 GitHub 仓库
git clone https://github.com/TinyMPC/TinyMPC.git
导航至根目录并运行
cd TinyMPC && mkdir build && cd build
运行 CMake 配置步骤
cmake .
构建 TinyMPC
cmake --build .
运行示例
./examples/quadrotor_hovering
Julia
用子模块克隆 GitHub 仓库
git clone --recurse-submodules https://github.com/TinyMPC/tinympc-julia.git
运行 interactive_cartpole_ext.ipynb 示例
MATLAB
用子模块克隆 GitHub 仓库
git clone --recurse-submodules https://github.com/TinyMPC/tinympc-matlab.git
运行 interactive_cartpole.mlx 示例