ROS 2教程:让机械臂动起来

们将深入探讨软件堆栈,不仅涵盖实时硬件控制,还包括完全相同的系统如何接入模拟后端、统一的数据收集管道,以及最终用于端到端控制的推理设置。

ROS 2教程:让机械臂动起来
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

在我上一篇文章中,我概述了构建视觉-语言-动作模型测试平台的目标。现在,我们进入系统的核心:让机器人动起来。

在AI驱动机器人技术的行业中,快速测试和部署新模型的能力至关重要。一个关键瓶颈通常是模拟与现实世界之间的脱节。为开发和验证下一代机器人学习而构建的强大高效管道,需要在数字孪生和物理硬件之间建立无缝桥梁。

本文详细介绍了我开发的控制架构,以创建这一桥梁。我们将深入探讨软件堆栈,不仅涵盖实时硬件控制,还包括完全相同的系统如何接入模拟后端、统一的数据收集管道,以及最终用于端到端控制的推理设置。

1、控制UFactory Lite6机械臂

UFactory让他们的机械臂与ROS1和ROS2集成变得非常容易。我将使用他们在xarm_ros2仓库中提供的代码。

如果您想亲自尝试,请确保检出与您的ROS发行版对应的分支。我正在使用ROS2 Jazzy,并且只测试了该分支,因此我无法保证在ROS1下会有相同的表现。

该仓库包含将机器人接入基于ROS2的应用程序和控制系统所需的一切。它带有示例和启动文件,经过少量修改后,我的机器人很快就运行起来了。UFactory通过启动参数对代码、xacro文件和ROS节点进行了大量参数化,因此相同的代码库可以用于他们所有的机械臂和夹爪。正因为如此,弄清楚这些参数如何在不同层之间传播所花费的时间,实际上比了解高级架构的概览还要长。

2、ROS2 Control、MoveIt Servo和Isaac Sim接口

自从我多年前对三菱PA10进行视觉伺服以来,已经发生了很大变化。感谢ROS2 Control框架和UFactory提供的硬件驱动程序,无需与机械臂的硬件控制器进行任何低级别通信,而且由于MoveIt Servo,推导解析形式或雅可比矩阵、处理Moore-Penrose反演、奇异性以及笛卡尔速度控制的所有其他丑陋细节的日子已经一去不复返了。

我以前没有使用过MoveIt Servo,但我必须说它非常容易上手。有一个单独的yaml配置文件(像这样),允许您指定如何控制机器人(关节速度、某个坐标系中的笛卡尔速度或末端执行器姿态控制)、应该发布哪些控制循环信息以及其他许多内容。一旦我正确设置了它,MoveIt Servo就会自动处理大项:

  • 通过反转雅可比矩阵计算微分逆运动学
  • 检查奇异性
  • 检查碰撞(如果配置,包括自碰撞和环境碰撞)
  • 运动平滑
  • 强制执行关节位置和速度限制

像这样结合ROS2 Control和MoveIt Servo:

ROS2和MoveIt Servo控制UFactory Lite6。

给我一个控制系统,允许我以高速向Moveit Servo发送6D速度螺旋(ROS术语中的Twist消息),并让机器人执行这些运动。

如果我还没有让您感到困惑,您可能已经注意到来自MoveIt Servo的关节速度被controller_manager节点内的JointTrajectoryController消耗。这不应该有效。我将MoveIt Servo配置为返回增量JointTrajectory消息而不是原始关节速度。在这种模式下,MoveIt Servo在小时间窗口上对原始关节速度进行积分,并将结果输出为微小的JointTrajectory。这允许JointTrajectoryController通过混合传入的轨迹片段来创建平滑路径。将其想象成告诉汽车"前往这些精确的GPS坐标"(轨迹)与"保持这个精确的速度和航向"(速度)之间的区别。前者通常对小扰动更稳健——而且这使得以下操作变得容易得多:

ROS2和MoveIt Servo控制NVIDIA Isaac Sim中的模拟机器人。

ROS2 Control的插件架构强制高级控制器与硬件接口的低级实现(例如UFRobotSystemHardware)分离。这意味着只要接口匹配,您可以用其他东西替换其中任何一个。

TopicBasedSystem插件为支持通过ROS主题进行双向通信的机器人和模拟器提供接口——这正是Isaac Sim ROS桥用于将机器人位置命令传送到其模拟引擎并将机器人状态传回所使用的。

我在启动文件中用一个参数将所有这些连接起来,这样我可以在"REAL"或"SIM"模式下启动所有内容,分别控制我的真实Lite6机械臂或它在Isaac Sim中的数字孪生。通过这种设置,我可以为真实和模拟机器人运动以及数据生成/收集保持单一控制系统。

值得注意的是,我最初探索了一种更直接的"教科书式"速度控制方法。这涉及配置MoveIt Servo以向JointGroupVelocityController输出原始关节速度。

虽然这对真实硬件完美运行,但在模拟中引入了重大的实际挑战。Isaac Sim中的速度控制需要手动调整每个关节底层力PD控制器的刚度和阻尼参数。这条路径需要大量时间投入来防止重力下的关节漂移等问题,而不会增加太多价值。

最终,我回到了轨迹片段方法。它证明是一个更简单、更稳健的解决方案,用于实现主要目标:在真实和模拟机器人之间保持单一的统一控制系统。

我还没有对两个系统执行轨迹的准确性进行深入分析,但两个系统的控制性能在质量上非常相似。一旦我可以确认两者的表现足够接近,我将继续在Isaac Sim中对真实相机进行建模,这样我就可以使用模拟器进行合成数据生成和基于强化学习的VLA模型微调。

控制真实机器人及其在NVIDIA Isaac Sim中的数字孪生。

3、整合一切

从机器人控制层放大,您可以看到各个部分如何组合在一起形成完整的工作流。现代机器人开发通常因跨工具和调试、模拟、数据收集和部署的分散流程而放缓。根据我领导机器人团队的经验,我经常看到这种碎片化是摩擦、项目延迟和重复工作的主要来源。因此,我的方法建立在核心哲学之上:用于调试、数据收集、模拟和执行的统一架构不是便利,而是必需品。通过为数字孪生和物理机器人创建单一控制和数据管道,我们可以大幅加速训练和验证学习模型的迭代周期。以下部分展示了这一哲学如何付诸实践。

3.1 数据收集

使用核心机器人控制模块,我添加了几个节点来与Realsense相机和SpaceMouse接口,并将它们连接到自定义的DataRecorder节点:

收集用于VLA微调的数据。

SpaceMouse的按钮和6D Twist连接到DataRecorder节点,所以我可以在基座坐标系或末端执行器坐标系速度中控制机器人,打开/关闭夹爪,以及开始/停止数据记录——这使得在短时间内记录多段数据会话变得非常容易。记录器将所有必要的主题(例如操作员命令的末端执行器Twist、相机图像、TF帧和其他一些内容)写入rosbag MCAP文件以供后续处理。

3.2 推理和实时控制

将数据收集设置更改为实时控制和推理并不复杂。所需的只是移除手动控制和记录部分,并将其替换为消耗相机图像和描述任务的文本指令的节点,并将返回的末端执行器速度注入MoveIt Servo:

推理和实时控制。

这种统一架构是拼图的最后一块,为开发和部署下一代智能机器人创建了一个真正的端到端系统。


原文链接:Sim-to-Real in Practice: A Pragmatic ROS2 Architecture for Robot Learning

汇智网翻译整理,转载请标明出处