IsaacLab从入门到精通(二) 导入自定义机器人

IsaacLab从入门到精通(二) 导入自定义机器人

1.1 URDF与USD简介

现在有很多资料介绍这些文件格式,作者在这里就简单进行一下介绍,URDF(Unified Robot Description Format)文件是一种基于XML的文件格式,用于描述机器人的模型,包括其物理和视觉属性,重点在关节(Joint)和连杆(Link),没有基础的同学可以先学习一下《机器人学》,利用ROS简单测试一下各个机器人的URDF文件。

USD(Universal Scene Description)是一种由皮克斯动画工作室开发的开源框架和文件格式,用于描述和交换3D场景的丰富数据。Isaac 平台的USD一般是二进制文件,也可以称为USDc,我们没有办法直接查看它,需要将其导入IsaacSim才能进行查看。如果我们想像查看urdf文件一样查看它,该怎么做呢?这时候可以将其转换为USDa文件,usda文件是可以直接进行查看的。转换方法可以参考USD文件的文档:

https://openusd.org/release/tut_converting_between_layer_formats.html

由于Isaac平台的特性,我们是没有办法直接导入urdf文件的,因此需要将URDF文件转换为USD后,再进行导入。此外,URDF转换工具似乎不能直接转换xarco这种宏格式,因此建议通过一些流程将各个宏变量合并到一个统一的urdf中,当然如果有其他的方法,也可以尝试。

1.2 URDF转USD

在开始之前,有些同学是直接在IsaacSim里面创建了自己的机器人,并保存机器人描述文件为USD格式,如果是这种情况,那么不需要进行格式转换,可以直接跳过。当然,很多同学之前用的是Pybullet、Gazebo、MuJoco等环境,这些环境一般使用的是Urdf格式的机器人描述文件,或者xarco格式的urdf宏文件,这些文件不能直接导入IsaacSim,这就需要进行格式的转换。其中,官方提供了一段代码:

# create a directory to clone
mkdir ~/git && cd ~/git
# clone a repository with URDF files
git clone [email protected]:isaac-orbit/anymal_d_simple_description.git

cd IsaacLab
conda activate isaaclab
python source/standalone/tools/convert_urdf.py \
  ~/git/anymal_d_simple_description/urdf/anymal.urdf \
  source/extensions/omni.isaac.lab_assets/data/Robots/ANYbotics/anymal_d.usd \
  --merge-joints \
  --make-instanceable

其中,重点是这个python脚本convert_urdf.py,它接收urdf文件,并且导出为usd。此外,它还有一些指令,例如官方代码中的–merge-joints和–make-instanceable。在文档中有它所有的指令和用途:

https://isaac-sim.github.io/IsaacLab/source/how-to/import_new_asset.html

我们再详细解释一下:

fix_base指令会把机器人固定在原点,如果你需要机器人移动就不用选这个了;

make_instanceable功能会生成一个机器人示例,这个功能在官方后续的更新中进行了优化,可以不选(作者没有测试过);

merge_fixed_joints选项会合并所有在urdf文件中具有fix属性的关节,这样可以简化一些物理计算,但是如果你有几个关节通过fix的方式串联,在导入isaacsim时虽然没有问题,在isaaclab强化学习执行的时候则可能会遇到bug。具体而言,可能会有几个关节还卡在原地,没有被刷新位置,这个问题作者遇到过,后面没有选这个选项,就正常了,因此如果你的机器人如果有串联的fix关节,最好不要选这个选项。

剩下的三个指令一般情况下都不需要选择,如果你需要对机器人模型进行特殊调整,那么请按照官方的提示进行。转换完成后,会出现一个界面显示你转换完成的模型,但是官方的默认脚本似乎没有添加光照,因此你转换完成的界面会是全黑的,这时候可以直接关掉,然后单独用isaacsim打开一下usd就能看到转换后的模型了,点PLAY键进行模拟,如果物理效果正常,则说明转换成功。

这里有个小Tips,如果你的机器人有成环连接的关节,这里要用Isaacsim打开,如果物理效果正常,需要点保存覆盖掉原来的文件,原因是某些组件转换后的参数未设置,在导入Isaacsim后再保存会自动设置(猜测)。

1.3 在IsaacLab中导入机器人及物体的USD

在将自己的机器人urdf文件转为USD文件后,就可以通过代码来引用usd文件了,官方文档的引用方式较为简洁,缺少很多设置,因此我们来看一段笔者仓库的代码:https://github.com/NathanWu7/isaacLab.manipulation/blob/main/isaacLab/manipulation/assets/config/kinova_gripper.py

我们可以看到,机器人的名称为KINOVA_ROBOTIQ,机器人属性通过 ArticulationCfg 进行管理,它有几个主要的设置:(1)spawn (2)init_state (3)actuators. 当然,它还具有其他的属性,可以参考官方文档:
https://isaac-sim.github.io/IsaacLab/source/api/lab/omni.isaac.lab.assets.html#omni.isaac.lab.assets.ArticulationCfg

我们接下来会介绍的是以上三个主要属性设置。

第一个 spawn 部分会通过 sim_utils.UsdFileCfg 导入机器人的usd文件,并进行一些基本的设置,这些设置中fix_root_link可以将你导入的机器人固定在原地,如果你需要机械臂或者其他机器人基座不动的话可以使用这个选项。此外,如果实际的机械臂在速度控制时没有重力补偿,那么disable_gravity建议关闭,这会在实际策略的训练过程中引入重力,如果有,那么可以尝试开启。此外,solver_position和solver_velocity的选项会在两个物体接触时计算物理效果,如果你的机械手或者夹爪很难把物体夹起来,建议把物体的这两个选项开高一点(例如都为16),但代价是引入了很多额外的计算,增加了训练时间。最后,如果你在你的机器人上加入了触觉传感器或力传感器,那么需要把activate_contact_sensors打开,这样接触力信息就会单独进行储存,这一点我们后面再说。

第二个init_state部分顾名思义,就是初始化各个关节的角度。

第三个actuators部分,我们会在这里进行关节控制,这里需要设置每个关节的控制器。stiffness通常代表PD控制中的P,而damping代表D,所有的关节都通过PD控制,因此这里的参数需要额外进行调整,以使得仿真和真实的运动情况一致。此外,effort_limit选项和velocity选项也需要根据实际情况进行一些调整。值得注意的是,目前isaacsim已经支持了mimic joint关节的仿真和自动计算,我们只需要在urdf文件中设置好,转换后即可直接使用了,这在一些夹爪(robotiq)比较常见。

在主要属性设置后,我们就能够通过引入你定义的机器人名称,例如KINOVA_ROBOTIQ,实现自定义机器人的引入了,它会具有我们设置的所有属性,后面的教程中将会教大家如何使用引入的机器人进行强化学习。

猜你喜欢

转载自blog.csdn.net/DejaWu33/article/details/140380827