目录
[1.1 学习目标](#1.1 学习目标)
[1.2 导入USD](#1.2 导入USD)
[1.3 识别关节](#1.3 识别关节)
[1.4 整理层级结构](#1.4 整理层级结构)
[1.5 设置碰撞属性](#1.5 设置碰撞属性)
[1.6 添加关节和动力](#1.6 添加关节和动力)
[1.6.1 移动副](#1.6.1 移动副)
[1.6.2 旋转副](#1.6.2 旋转副)
如果在Omniverse USD Composer中构建的机器人,或者使用的导入工具没有携带关节信息,那么你需要先对机器人进行装配(Rigging),然后它才能像关节机器人一样运动并受 Isaac Sim API控制。这包括定义各个部件之间的关节类型,并设置控制关节行为的参数(如刚度和阻尼)。本教程将分步骤指导如何装配一台叉车。
1装配移动机器人
1.1 学习目标
在本教程中,一个未装配的叉车USD资产将被转变为一个可以移动并由Isaac Sim指令驱动的叉车。
1.2 导入USD
未处理的USD:Isaac Sim/Samples/Rigging/Forklift/forklift_b_unrigged_cm.usd
保存到本地(需要等一会,加载速度取决于网络):
1.3 识别关节
在对资产进行任何修改之前,装配机器人的第一步是识别机器人上的关节,包括受控(驱动)关节和非受控关节。关节决定了所有网格组件(Mesh)的组织方式,识别关节类型及其自由度 (DOF) 是确保机器人装配后能按预期运动的关键。
对于这台叉车,总共有 7 个自由度:
(1)前轮
前方有 4 个较小的滚轮。它们拥有非受控的旋转关节 (Revolute Joints),每个轮子都有一个绕单轴旋转的自由度。
(2)货叉 (Fork)
货叉相对于叉车主体进行线性运动(上下移动以拾取托盘上的物体),这意味着货叉与车体之间有一个受控的平移关节 (Prismatic Joint)。
(3)后轮
后端较大的轮子负责驱动叉车前进和转向。
与该轮相关的共有两个受控关节:
一个旋转关节 (Revolute Joint):绕轮子中心轴线旋转,提供前后移动的动力。一个旋转关节 (Revolute Joint):位于后轮轴基座与叉车主体之间,提供叉车转向所需的转动支点。
1.4 整理层级结构
从内容浏览器中打开未装配的叉车资产:
Isaac Sim/Samples/Rigging/Forklift/forklift_b_unrigged_cm.usd。取决于所使用的导入器和原始资产的设置,该 USD 的未装配结构在零件组织方面可能没有层级。它可能会将每一个组件独立地列在场景树(Stage Tree)上。这不仅增加了阅读和导航的难度,更重要的是,它没有定义哪些物体是作为一个整体运动的,以及这些组合之间是如何相互关联的。所有属于父级Prim的子网格(Meshes)在父级Prim移动时都应同步移动。例如,网格上的贴纸和链条是叉车车身的一部分;无论车身由多少个螺丝或组件构成,都可以将其视为该机器人的单一连杆(Link)。将它们统一组织在一个名为 "body" 的父级Prim下,可以确保当 "body" 移动时,所有构成车身的子部件都会随之移动。
按照以下步骤组织叉车的Prim层级:
(1)创建两个Xform
分别命名为
body和lift。(2)移动网格
将构成叉车车身的所有网格移至
bodyXform下,将操作台相关的网格移至liftXform下。为了方便操作,USD文件中的网格已按层级排序:
Looks以上的所有网格都属于liftXform。
Looks以下(从 Right Chain Wheel 到 Body Glass)的所有网格都属于bodyXform。剩余部分属于轮座和车轮。
(3)创建新 Xform
为后轮(
back wheel)、后轮转向架(back wheel swivel)以及每个前滚轮支架创建独立的Xform。(4)为四个前滚轮创建Xform
分别命名为
roller_front_left、roller_front_right、roller_back_left和roller_back_right。将对应的前导轮网格及其圆柱体碰撞体(Cylinder Collider)移至其下方。(5)设置刚体属性
通过点击Add > Physics > Rigid Body,确保上述所有Xform均已启用物理刚体设置。
1.5 设置碰撞属性
为了确保网格的碰撞属性设置正确。如果没有设置碰撞属性,那么随着机器人运动,根据关节配置的不同,可能会发生自身穿透现象。
所提供的USD文件中,
body和lift的正确碰撞网格已经设置完毕,因此不需要手动设置它们。但作为参考,为SM_Forklift_Body_B01_01设置碰撞的步骤如下:(1)选中
liftXform下的SM_Forklift_OperatorCab_B01_01网格,右键点击并选择 Add > Physics > Collider Preset。默认的碰撞近似方式是Convex Hull(凸包),可以在所选网格的属性栏中向下滚动,找到collision部分来查看。(2)若要可视化碰撞体,点击视口(Viewport)右上角附近的眼睛图标,选择Show By Type > Physics > Colliders > Selected。选中刚刚添加了碰撞的网格,确认可以看到绿色轮廓。这种近似方式并不合适,因为碰撞区域覆盖了大片不属于货叉的区域,而这些区域需要允许其他物体存在。
(3)可以使用不同的近似方式来定义不同的碰撞网格。要查看效果,请选择一个带有碰撞的网格,导航至其属性面板的colliders部分。选择Convex Decomposition(凸分解)近似方式。更新碰撞网格的可视化效果。确认这次生成的网格覆盖了更多的可碰撞表面,因为它具有更紧密的近似。尝试其他近似方式,看看哪种最适合你。
(4)对其他通过关节相互作用的网格执行相同的过程。为属于转向架(swivel)一部分的
SM_Forklift_BackWheelbase_B01_01网格设置Convex Decomposition近似。车轮的处理过程略有不同。任何不够光滑、无法精准还原车轮形状和曲率的碰撞近似方式,在驱动车轮行驶时都会导致颠簸。通过使用圆柱体(Cylinder)来近似碰撞网格可以避免这一问题。
(1)点击Create > Shape > Cylinder。
(2)将缩放(Scale)设置为
X=0.16, Y=0.16, Z=0.08,并将朝向(Orient)沿Y轴设为90。(3)右键点击该圆柱体并创建四个副本,分别对应四个前滚轮。
(4)将这些圆柱体拖动到各自车轮的Xform下,并将它们在所有轴上的变换(Transform)值与模型对齐,这将使圆柱体轴线与Xform轴线完全对齐。
(5)右键点击圆柱体,选择 Add > Physics > Collider。
(6)按照同样的流程处理后轮:由于后轮尺寸更大,将圆柱体缩放修改为
X=0.3, Y=0.3, Z=0.1,同样沿Y轴定向为90。至此,所有合适的碰撞网格和属性均已设置完毕。
1.6 添加关节和动力
1.6.1 移动副
第一个关节是叉车车身(body)与货叉(lift)之间的关节。这两个主体之间需要进行线性运动,且货叉必须相对于车身上下移动。
(1)创建关节
在Stage树中选中
liftXform,同时按住Ctrl 键选中bodyXform。在两个Prim均处于高亮状态时,右键点击并选择Create > Physics > Joints > Prismatic Joint。(2)设置轴向
找到新创建的移动副并选中它。在Property选项卡中,将Axis设置为Z。这表示两个主体之间的线性运动是沿Z轴进行的。
(3)设置限位
在Property > Physics > Prismatic Joint选项卡中设置关节的上下限位(Lower and Upper Limits),暂时将其设置为-15和200。
(4)添加驱动
通过左键点击该关节并选择Add > Physics > Linear Drive,为该关节添加线性驱动(Linear Drive)。
(5 )配置驱动参数:
在Property > Physics > Drive > Linear 选项卡中,
将Target Position(目标位置)设置为 -15,这样货叉的初始位置会靠近地面;
将Damping(阻尼)设置为10000;
将Stiffness(刚度)设置为100000。
(6)组织层级
在Stage树中右键点击并创建一个Scope(范围节点),命名为
lift_joint。将创建好的移动副拖拽到该Scope下。
1.6.2 旋转副
对于所有滚轮支撑轮(roller support wheels),需要创建旋转副:
(1)创建滚轮关节
选中
bodyXform,按住Ctrl键同时选中任意一个滚轮的Xform(例如roller_front_left)。右键点击并选择Create > Physics > Joint > Revolute Joint。确认在该轮子的Xform下方生成了一个旋转副节点。(2)检查位置与轴向
验证关节是否出现在预期的位置。如果位置不对,请确保关节坐标与车轮的旋转轴心一致,并务必将旋转轴(Axis)设置为 "X"。
(3)重复操作
对其余三个滚轮支撑轮重复上述过程。
(4)组织层级
在Stage中右键点击并创建一个Scope,命名为
roller_joints。将这四个滚轮关节拖入该 Scope 下。(5)驱动关节(行驶)
同时选中
back_wheel_swivel和back_wheelXforms,在它们之间添加一个旋转副(Revolute Joint)。该关节的位置必须与后轮中心重合。为该关节添加Angular Drive(角驱动),并设置属性:Damping = 10000, Stiffness = 100。(6)转向关节(转弯)
同时选中
body和back_wheel_swivelXform,并在它们之间添加一个旋转副。务必将旋转轴(Axis)设置为Z。将关节的限位(Lower and Upper Limits)设置为 -60 到 60。这决定了轮座旋转的角度范围(度),从而实现叉车转向。为该关节添加Angular Drive(角驱动),并设置属性:Damping = 100, Stiffness = 100000(高刚度是为了保证转向精准)。(7)组织层级:点击Create > Scope,命名为
back_wheel_joints,将后轮的这两个关节拖入其中。



