时间:2026-03-18 10:26
人气:
作者:admin
我将开启系统性介绍OCS2,该包重点面向机器人应用,并支持 ROS 接口以及 URDF/Pinocchio。这个工具箱通过模块化的包,每个包都有明确的职责,适合用来解决机器人控制与动态系统建模问题。

ocs2_core:基础数据结构、线性代数封装、自动求导、约束/成本接口、预计算框架等。
包括:OptimalControlProblem、SystemDynamicsBase、CostCollection、ConstraintCollection 等。
这些模块为整个工具箱提供底层支持,其他模块与求解器均依赖它们进行问题求解。
ocs2_oc:负责定义和建模最优控制问题。
OptimalControlProblem(如:ocs2_oc/include/ocs2_oc/oc_problem/OptimalControlProblem.h)用于描述成本、约束、动力学、预计算、目标轨迹等核心组成部分。
ocs2_ddp + ocs2_mpc:
ocs2_ddp:实现 DDP(离散二次规划)与 SLQ(顺序二次规划)求解器。
ocs2_mpc:MPC 工具链,包括闭环执行、在线重新规划、数据接口、线程/实时控制等。
其他求解器(如:ocs2_sqp/、ocs2_slp/、ocs2_ipm/)提供不同的数值性能和约束处理方式,适用于不同场景。
ocs2_pinocchio/ 及相关子包:
URDF → 机器人动力学/运动学模型构建。
自碰撞约束、质心模型、可视化接口等。
负责将机器人问题快速生成并与MPC求解器对接。
ocs2_ros_interfaces + ocs2_msgs:
ROS 1(默认)消息、节点、可视化、数据发布订阅、控制接口。
ocs2_robotic_examples/:包括具体的机器人任务示例,如移动操作机器人、四足机器人、球形机器人等,包含 ROS 节点封装。
例如,ocs2_mobile_manipulator_ros/src/MobileManipulatorTarget.cpp 是一个示例组件,负责目标生成与跟踪。
ocs2_python_interface:Python 绑定,支持快速试验、可视化和数据分析。
ocs2_mpcnet:MPC-Net 将 MPC 解作为训练数据,训练神经网络策略(用于加速执行与学习控制)。
ocs2_doc:Sphinx/Doxygen 文档源。
ocs2_test_tools:测试辅助工具。
ocs2_thirdparty:依赖的第三方库,如 HPIPM、BLASFEO、Pinocchio 等。
定义问题:OptimalControlProblem
包含成本、约束、动力学、预计算、轨迹等核心内容。
OptimalControlProblem 结构体组合了控制问题的所有数据,但本身不涉及求解逻辑,求解由求解器处理。
求解器:DDP/SLQ + MPC
GaussNewtonDDP 等求解器通过迭代优化求解最优控制问题,包括线性化、二次化、Ricatti 迭代等过程。
MPC 运行时:
读取当前状态(通常来自传感器或 ROS)。
更新参考轨迹、约束和初始值。
调用求解器获得控制轨迹,执行首个控制量。
实现实时闭环控制。
机器人建模流
使用 URDF 文件构建机器人模型,并通过 Pinocchio 生成动力学模型(如:SystemDynamicsBase)。
生成约束(如:自碰撞约束)和成本(如:终端位置误差、能量、平滑度等)。
将这些模型与约束装入 OptimalControlProblem,交由求解器进行优化。
下一篇:没有了