通过入门指南(2)的学习,我们已经能构建出比较真实的物理场景与仿真对象的设置,接下来我们要在场景中构建机器人系统并对其添加必要的传感设备。Isaac Sim仿真环境中提供了充分的传感设备信息,这一点还是很不错的。

1.组装机器人

在Isaac Sim中组装一个带传感器的机器人需要一些基本的步骤:

  1. 创建各部件的3D模型
  2. 将各部件组建起来

在本章节中,我们将学习如何组装最简单的一个两轮差速机器人,下图中的机器人可以视作由三个杆件(links)和两个转动关节(revolute joints)组成的。

1.1:导入测试环境

机器人组装需要一个带有正常光照和物理的环境,因此我们导入Isaac Sim自带的Simple Room作为基本的测试环境。

注:如果这里没有你想要的场景,那么你需要Asset Browser进入资产仓库进行查找

注:在Issac Sim5.1系统中默认的环境场景不多,如果需要别的应用场景需要在Isaac Sim Asset中进行选择,初次加载时间会非常长,请保持耐心,点击Load as Reference之后就会在Stage中显示场景。

1.2:创建各部件的3D模型

创建机器人的3D模型是机器人设计过程中的关键步骤。你可以使用专业的3D建模软件,例如SolidWorks来创建和导出机器人的各个部件。(这部分我将另开教程)
在本章节中我们不使用从其他专业软件中制作的机器人部件,而是使用Isaac Sim自带的一些基础模型(立方体、圆柱)来作为机器人的零部件。
这里我们创建三个杆件作为机器人的零部件,分别是身体body,左轮left_wheel,右轮right_wheel,他们都作为fqnvidia机器人的一部分,并且为他们添加材质、刚体和碰撞体等属性。

首先我们在Stage中建立一个统一的坐标系,之后的模型构建都将在这个统一的坐标系下进行构建,这个坐标系将作为整个系统的局部坐标系,便于管理与计算。

我们首先继续Create,创建一个Xform:

进一步修改这个Xform的名字,并在这个Xform之下构建出双轮车的需要的组成部分,具体的建立方式可参考入门教程(2)以及下表中的参数:

prim translation rotation scale visual material physics material
body 0,0,0.5 0,0,0 1.5,1.0,0.5 OmniGlass default
left_wheel 0,1,0.5 -90,0,0 1.0,1.0,1.0 OmniPBR default
right_wheel 0,-1,0.5 -90,0,0 1.0,1.0,1.0 OmniPBR

default

这个时候如果启动Play,会发现这些零件散落一地并没有连接在一起,这非常正常,我们接下来就对其创建关节

1.3:创建关节joint

机器人和人类相似,人类手臂的伸展需要上臂、前臂和肘部的协调工作。同样地,机器人的两个相邻活动杆件(link)也需要通过关节(显式的约束)进行旋转、平移等动作。

Stage中,按下Ctrl,先选中父杆件Parent Link(此处为body)再选中子杆件Child Link(此处为right_wheel),随后选中Create->Physics->Joint->Revolute Joint,创建一个新的Joint对象,并重命名为right_wheel_joint,并修改转动轴系(通常修改到Z)使得轮子的旋转正确。

同理,再创建身体到左轮的关节。

随后,点击左侧工具栏中的Play检查,会发现此时身体和两个轮子已经正确地绑定了。

注意:除了关节,Isaac Sim还提供了肌腱(Tendons),它对于灵巧手来说更有意义,因此此处不讨论肌腱相关内容,如果您需要,请参考Isaac Sim 肌腱

1.4:创建关节树Articulation

从数学上讲,关节可以在全局(相对于世界空间)或简化(相对于其他物体)坐标中建模。

使用全局法相对简单直观,特别是在处理全局运动和碰撞检测时,但在处理复杂的关节约束时可能更加困难,例如人形机器人,因为需要考虑到世界坐标系中的旋转和平移以及一些计算上忽略的微小量在长链路时带来的影响。

使用局部坐标系会更容易处理相对运动,尤其是在需要多个物体相对运动时,可以减少复杂性,并且在数值上更加精确,比如关节。
但可能需要更多的计算来转换坐标系,特别是在需要将局部坐标系转换为全局坐标系时。

这也就引入了关节树Articulation的概念,关节树的根部被称为关节根(Articulation root),当一个基本对象(prim)被标记为关节根时,这告知仿真系统,在它的子树中找到的任何关节应优先使用简化坐标方法进行仿真,实现了两种方法的折中。

将机器人组织成关节树可以实现更高的模拟保真度,减少关节误差,并能够处理关节体之间更大的质量差异。这些设计具有零关节误差,同时能够处理关节体之间更大的质量比。

要使用关节树,需要指定关节根(Articulation root),指定关节根的标准是:
对于固定的机器人,它应当是和世界直接连接的根关节的父对象(root joint’s parent prim)或根关节(root joint)上,此处推荐将属性添加到根关节(root joint)上,例如固定在桌面上的单个机械臂的基座和世界相连的关节。
对于移动的机器人,它应当是根杆件对象(root link prim),例如四旋翼无人机的机身,移动小车的底盘,人形机器人的头或者脚。

这一段其实可以当做了解内容,因为之后的模型都将是在SW中对其进行关节树的建模,这一步是必须步骤,所以就当了解一下就好了。

在这个小车的案例中,body是根杆件对象(root link prim),因此可以作为Articulation Root

选中Primbody并依次点击Add->Physics->Articulation Root来将关节链转化为关节树

1.5:创建关节驱动joint drive

添加关节会添加机械上的连接。但为了能够控制和驱动关节,必须添加关节驱动的属性 API。

按下Ctrl选中Stage里的两个joint并依次点击Add->Physics->Angular Drive来添加角度驱动器。

注意:这里是对之前建立的关节进行设置,而非左右轮子这里一定要注意

对于关节的位置控制模式,应当设置高刚度和相对低(或零)阻尼。

对于关节的速度控制模式,应当设置高阻尼和零刚度。

驱动力的公式是:

stiffness * (position - target_position) + damping * (velocity - target_velocity)

你可以根据实际体验来给出经验值,也可以使用此处给出的测试值:

关节驱动 阻尼Damping 刚度Stiffness 目标速度Target Velocity
left_wheel_joint 10000 0 200
right_wheel_joint 10000 0 200

随后按下Play查看效果,应该发现小车开始以指定的目标速度运动。

2.添加传感器

Omniverse Isaac Sim 提供了多种传感器,可用于感知环境和机器人的状态,例如激光雷达、深度相机。此处以最为常见的Camera为例。

2.1:添加相机

依次点击Create->Camera来添加相机,并重命名为robot_camera,将他拖动到body下新创建的Xformcamera_link下,来和机器人的身体绑定,并通过调整Xformcamera_link的位置和姿态来感受合适的位置,你也可以使用测试的姿态。

这里需要注意的是,相机也算是Object,相机本身的物理属性也需要赋予:

如果想实现摄像头和小车一起随动,那么可以进一步的将摄像机置于小车的局部坐标系之中,再对主体和相机之后构建关节,将关节类型设置成fix即可:

2.2:添加视角窗口

添加一个视口(Viewport),使得共计有两个视口(Viewport),设置其中一个为Perspective视角,另一个是相机视角,方便进行观察。

第二个视角下的相机类型也可以进行设置

此时点击PLAY,观察两个画面中的机器人。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐