OCS2 入门教程(五)- 从 URDF 到 OCP、配置求解器、MPC - Net

系列文章目录


前言

阻碍 MPC 在机器人任务中广泛应用的主要挑战之一是设置最优控制问题的负担。OCS2 提供了多个辅助类,用于定义一些常用模型、成本和约束条件,以减轻这一问题。为此,OCS2 提供了多个第三方软件包接口,如 RobCoGen、CppADCodeGen、Pinocchio 和 HPP-FCL。我们在此重点介绍 Pinocchio 接口。本页讨论的所有软件包都可以在元软件包 ocs2_pinocchio 中找到。


一、从 URDF 到 OCP

1.1 中心模型

多关节浮动基座系统(如足式机器人)可建模为一个未驱动的刚体,该刚体上连接着一组完全驱动的肢体。在对机器人关节有足够控制权的温和假设下,在 MPC 公式中独立考虑中心点动力学作为简化模板模型是合理的。该模型的状态空间包括归一化中心动量、基本坐标和关节位置。输入空间是所有接触扭矩和关节速度的组合。为了捕捉广义坐标变化率对向心动量的影响,该模型使用了向心动量矩阵,并在基础扭转和关节速度之间引入了正确的映射。有关实现的更多详情,请参阅软件包 ocs2_centroidal_model。

1.2 运动学

OCS2 为 URDF 模型中基于 Pinocchio 库的任何已命名坐标系提供了一个运动学接口。该接口为已命名的坐标系列表提供位置、方向误差和速度的一阶模型。OCS2 提供两个接口: 基于分析偏差的 PinocchioEndEffectorKinematics 接口和基于自动微分的 PinocchioEndEffectorKinematicsCppAd 接口。当需要使用 OCS2 的缓存功能时,通常使用前者;否则,应使用 CppAd 变体。

1.3 避免自碰撞

OCS2 库提供了用于定义避免自碰撞约束的辅助类。通过 URDF 模型和用户定义的碰撞体列表可以方便地定义这些约束条件。该列表应是 URDF 模型碰撞体的子集。该列表用于避免在所有碰撞体之间进行碰撞检查,并减少计算开销。碰撞约束计算需要 HPP-FCL 和 Pinocchio 库。有关实现的更多详情,请参阅软件包 ocs2_self_collision。

二、MPC-Net

MPC-Net 是一种模仿学习方法,它使用 MPC 的解决方案来指导策略搜索。其主要思想是通过最小化控制哈密顿来模仿 MPC,同时用参数化策略来表示相应的控制输入。MPC-Net 可用于将模型预测控制器克隆为神经网络策略,其评估速度比 MPC 快得多。因此,MPC-Net 是 MPC 的有用替代品,适用于不需要最精确解决方案的计算要求较高的应用。

多线程数据生成和策略评估与策略训练异步运行。数据生成和策略评估用 C++ 实现,在 CPU 上运行,而策略训练用 Python 实现,在 GPU 上运行。控制哈密顿由线性二次近似表示。因此,训练可以在 GPU 上运行,无需回调在 CPU 上运行的 OCS2 C++ 代码来评估哈密顿方程,而且可以利用 GPU 上的批处理功能。

2.1 机器人

MPC-Net 已在以下机器人示例中实现:

Robot Recom. CPU Cores Recom. GPU Memory RaiSim Training Time
ballbot 4 2 GB No 0m 20s
legged_robot 12 8 GB Yes / No 7m 40s

2.2 设置

确保按照安装页面进行操作。按照所有相关说明进行安装。关于可选依赖项,请务必按照 ONNX Runtime 和虚拟环境的说明进行操作,并可选择设置 RaiSim。

要编译所有 MPC-Net 软件包,请编译元软件包:

cpp 复制代码
cd <path_to_catkin_ws>
catkin_build ocs2_mpcnet

# Example:
cd ~/catkin_ws
catkin_build ocs2_mpcnet

要构建机器人专用软件包,请将 <robot> 替换为机器人名称:

bash 复制代码
cd <path_to_catkin_ws>
catkin_build ocs2_<robot>_mpcnet

# Example:
cd ~/catkin_ws
catkin_build ocs2_ballbot_mpcnet

2.3 训练

要训练 MPC-Net 策略,请运行

bash 复制代码
cd <path_to_ocs2_repo>/ocs2_mpcnet/ocs2_<robot>_mpcnet/python/ocs2_<robot>_mpcnet
source <path_to_catkin_ws>/devel/setup.bash
source <path_to_venvs>/mpcnet/bin/activate
python3 train.py

# Example:
cd ~/git/ocs2/ocs2_mpcnet/ocs2_ballbot_mpcnet/python/ocs2_ballbot_mpcnet
source ~/catkin_ws/devel/setup.bash
source ~/venvs/mpcnet/bin/activate
python3 train.py

要使用 Tensorboard 监控训练进度,请运行

bash 复制代码
cd <path_to_ocs2_repo>/ocs2_mpcnet/ocs2_<robot>_mpcnet/python/ocs2_<robot>_mpcnet
source <path_to_venvs>/mpcnet/bin/activate
tensorboard --logdir=runs

# Example:
cd ~/git/ocs2/ocs2_mpcnet/ocs2_ballbot_mpcnet/python/ocs2_ballbot_mpcnet
source ~/venvs/mpcnet/bin/activate
tensorboard --logdir=runs

如果使用 RaiSim,您可以使用 RaiSim Unity 对数据生成和策略评估滚动进行可视化,RaiSim 的 raisimUnity 文件夹中提供了预构建的可执行文件。例如,在 Linux 上运行

bash 复制代码
<path_to_raisimLib_repo>/raisimUnity/linux/raisimUnity.x86_64

# Example:
~/git/raisimLib/raisimUnity/linux/raisimUnity.x86_64

2.4 部署

要部署存储在机器人专用软件包策略文件夹中的默认策略,请运行

bash 复制代码
cd <path_to_catkin_ws>
source devel/setup.bash
roslaunch ocs2_<robot>_mpcnet <robot>_mpcnet.launch

# Example:
cd ~/catkin_ws
source devel/setup.bash
roslaunch ocs2_ballbot_mpcnet ballbot_mpcnet.launch

要部署存储在机器人专用软件包的 python/ocs2_<robot>_mpcnet/runs 文件夹中的新策略,请将 <path> 替换为最终策略的绝对文件路径,然后运行:

bash 复制代码
cd <path_to_catkin_ws>
source devel/setup.bash
roslaunch ocs2_<robot>_mpcnet <robot>_mpcnet.launch policyFile:=<path>

# Example:
cd ~/catkin_ws
source devel/setup.bash
roslaunch ocs2_ballbot_mpcnet ballbot_mpcnet.launch policyFile:='/home/user/git/ocs2/ocs2_mpcnet/ocs2_ballbot_mpcnet/python/ocs2_ballbot_mpcnet/runs/2022-04-01_12-00-00_ballbot_description/final_policy.onnx'

2.5 如何设置新机器人

为新机器人设置 MPC-Net 相对容易,因为 ocs2_mpcnet_core 软件包负责数据生成和策略评估,并实现重要的学习组件,如内存、策略和损失函数。

本节假定您已经拥有机器人专用 MPC 实现的软件包:

  1. ocs2_<robot>: 提供机器人专用 MPC 实现库。
  2. ocs2_<robot>_ros: 用 ROS 封装 MPC 实现,以定义 ROS 节点。
  3. ocs2_<robot>_raisim:(可选)机器人专用 MPC 实现与 RaiSim 之间的接口。

对于实际的 ocs2_<robot>_mpcnet 软件包,请遵循现有机器人专用 MPC-Net 软件包的结构。必须实现的最重要类/文件有

  • <Robot>MpcnetDefinition: 定义如何将 OCS2 状态变量转换为策略观测值,以及如何将策略动作转换为 OCS2 控制输入。
  • <Robot>MpcnetInterface: 提供 C++ 和 Python 之间的接口,允许交换数据和策略。
  • <robot>.yaml: 存储配置参数。
  • mpcnet.py: 为 MPC-Net 训练添加机器人专用方法,例如实现机器人应执行的任务。
  • train.py: 启动主训练脚本。
相关推荐
HPC_fac1305206781642 分钟前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
小陈phd3 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
Guofu_Liao4 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
ZHOU_WUYI8 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1238 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界9 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221519 小时前
机器学习系列----关联分析
人工智能·机器学习
Robot2519 小时前
Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速
人工智能·机器人·微信公众平台
浊酒南街10 小时前
Statsmodels之OLS回归
人工智能·数据挖掘·回归
畅联云平台10 小时前
美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设
人工智能·物联网