IsaacLab从入门到精通(六)真机部署与Sim2real

CSDN 2024-08-18 12:01:03 阅读 51

在之前的教程中,我们已经完成了整个强化学习任务流程,现在我们需要将自己训练的策略迁移到真机上

1.1 Sim2real简要方法

强化学习的Sim2real问题一直以来是非常难解决的问题,在仿真环境中训练的policy往往很难迁移到实际的机器人系统上,因此我们需要用一些特殊的方法协助来实现这个过程。

1.1.1 建立数字孪生(Digital twin)

在仿真环境中,我们建立的环境需要尽可能与真实世界对齐,因此尽量让仿真环境和真实环境一模一样,包括机器人的一些初始状态,地图上物体的初始位置等。我们可以利用ROS或者Python相关的多线程通信方式,实现对仿真和真实世界机器人发送相同的指令,然后我们需要保证在相同的指令下,仿真机器人与真实机器人的运动状态一致。这里可以参考官方的轨迹规划器:

https://isaac-sim.github.io/IsaacLab/source/tutorials/05_controllers/run_diff_ik.html

举例来说,对于一条指令,在相同的时间内,以同样的方式运动相同的距离。这就需要我们不断调整仿真环境中的相关参数。这些参数包括信息通讯的间隔,机器人的stiffness,damping,最大速度,运动速度,重力补偿等。在面对同一条指令时,仿真与真实机器人系统能够以同样的方式完成同样的事情,那么我们就初步达到了目标,建立了digital twin。此外,可以多测试一些指令,使机器人的速度变快或者变慢,某些极端情况等,尽量让这些情况也有比较好的对应。

1.1.2 域随机化 (Domain Randomization)

在上一节中,我们提到事件类型EventTerm能够进行一定程度上的随机,这也包括域随机化方法。这个方法通俗来说。就是会在每次任务(episode)中,使用随机的物理参数,使得策略能够适应不同物理参数的情况,包括现实世界。参考链接:

https://isaac-sim.github.io/IsaacLab/source/tutorials/03_envs/create_direct_rl_env.html#domain-randomization

在这里我们可以看到,在事件设置中随机了仿真世界的静摩擦力,动摩擦力等,随机了机器人的刚度和阻尼等,也随机了重力分布。通过这种方式训练出来的策略适应性较强,结合我们上面建立的数字孪生系统,训练的策略能够很好地迁移到真实世界中。

1.1.3 其他方法

除了上面的两种方法,我们还有一些方法有助于提高sim2real的表现,例如特权学习(Privilege Learning),非对称演员—评论家算法,RMA(rapid motor adaptation)等。当然,所有的方法需要统一在isaaclab框架中,这里就不一一讲解了,感兴趣的同学可以阅读相关的论文。

1.2 真实机器人的部署

在有一个表现还不错的策略时,我们可以将其部署在真实机器人系统上。如果我们希望将训练好的策略模型直接部署在机器人的边缘计算设备上,则可以通过onnx格式中转,然后使用效率更高的推理框架进行一些优化,例如量化和蒸馏等,然后进行部署,这样可以减少单次模型推理的时间,使策略更具有实时性。

如果我们希望通过上位机给机器人发送指令然后机器人执行这样的方式运行,我们可以利用ROS或Python多线程通信,构建接收obs和发送action的节点,以实现对机器人的控制。IsaacSim有单独的对于ROS的支持:

https://developer.nvidia.com/isaac/ros

此外,我们也可以参考一些比较好的工程(宇树):

https://github.com/abizovnuralem/go2_omniverse

当然,在实际的部署流程中,我们也可以用ROS话题订阅需要的观测量,在进行转换后输入policy,将得到的action单独转换,最后通过ROS话题发布,从而实现一套真机测试流程。同样,利用机器人的Python sdk,用Python多线程接收观测量,再进行发送,也可以实现相同的流程。

结尾

整体来说,IsaacLab的使用体验还是不错的,很多人形机器人相关的研究在未来也会陆陆续续迁移到Isaaclab中,相信未来会有越来越多的研究者基于这个平台进行研究。这个系列的教程到此也就结束了,后续可能会补充一些特别篇,例如RSL-RL强化学习参数的调整经验,奖励函数的设置经验和isaacsim可变形物体操作任务等(如果笔者有时间的话)。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。