实时系统优化控制工具箱
参考视频:ETH 最优控制/MPC 实时求解器 OCS2 使用入门
参考文档:OCS2 求解器入门
选择OCS2
OCS2 是一个 MPC 实时求解器 (SLQ/iLQR),依赖 Pinocchio 构建机器人动力学模型,采用 RViz 或者 RaiSim 验证 (Rollout)。
OCS2介绍
(1)最优控制实时系统
(2)C++库:fast MPC 在高维系统
(3)提供了一个统一接口:先进的优化控制求解器
(4)提供了ROS接口,Python接口,通过CppADCodeGen实现自动区分和代码生成,与 Pinocchi等高性能刚体库的接口
(5)缓存友好:运动学和动力学能被快速计算并且重用在cost,约束,dynamics…
(6)在机器人平台上证实可用:球形机器人,固定/移动机械臂,四足机器人
OCS2能求解的问题
实时最优控制问题
定义:时间触发的最优控制序列问题
OCS2求解器和他们的特征
- DDP微分动态规划:
(1)连续时间SLQ (2)离散时间iLQR- SQP:Multiple shooting 多重动态规划
- Path INtegral Stochastic OC (PISOC)
算法拓展:
处理实时问题
处理约束:(1)状态输入等式约束(2)状态(only)等式和不等式约束(松弛屏障或增广拉格朗日量)
包含频域约束,如致动器带宽
如何对于给定的问题建立MPC
优化控制问题接口
定义优化控制问题
(1)定义好优化控制compoents
(2)优化控制问题三步定义:
设置控制compoents为优化控制问题
设置/共享 ReferenceManagerInterface
(可选)设置/共享 SolverSynchronizedModule
对于机器人例子,我们在一个名为RobotInterface的样板类中执行这些操作,检查这些例子:
- Ballbot接口
- CartpoleInterface
- DoubleIntegrator接口
- MobileManipulator接口
- LeggedRobot接口
构造最优控制问题
设置如下模块:
Cost,Soft Constraints, Hard Constraints, Dynamics, Pre-computation
OCS2缓存友好:在cost,constraints,dynamics和他们的近似值能够共享计算量。
使用PreComputation::request弥补一般不能弥补的计算量。
同步模块
MPC闭环
如何定义问题
OCS2机器人示例建模工具和界面
常见的机器人
一般:推杆、Double-Integrator
特殊的例子:球形机器人、四旋翼无人机
复杂、拓展的例子:机械臂、腿式机器人
从URDF到最优控制(OCP)问题