三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

机械臂usd如何调整结构、添加属性、创建关节点,从而转urdf

机械臂usd如何调整结构、添加属性、创建关节点,从而转urdf

问题:对于这种结构的usd如何创建节点,添加碰撞体和刚体属性能否在最高层级xform设置,还是要一个一个设置,然后要把bas_01下面除了base_02下级的mesh与base_02下面的mesh设置关节,该如何设置

答:

可以按“一个运动部件 = 一个 link”的方式创建。你现在的层级需要先调整:

Root Xform + Articulation Root ├── base_01 Xform + Rigid Body │ ├── mesh21 │ ├── mesh22 │ └── 其他属于 base_01 的 Mesh ├── base_02 Xform + Rigid Body │ └── base_02 下的 Mesh └── base_03 Xform + Rigid Body

关键点:

  • Root:只作为总容器和 Articulation Root,通常不要添加 Rigid Body。
  • base_01/base_02/base_03:每个 Xform 添加一个 Rigid Body。
  • Mesh:每个 Mesh 添加 Collision。可以一次多选同一 link 下的所有 Mesh 批量添加,不需要逐个手动操作。
  • 不要给每个 Mesh 添加 Rigid Body,否则会形成大量相互嵌套的刚体。
  • 如果base_02现在位于base_01下面,应先把base_02移到Root下,成为base_01的兄弟节点,并选择保持世界坐标。

你描述的“base_01下的 Mesh 与base_02下的 Mesh 设置关节”,实际应该是:

Joint_base01_base02 body0 = /Root/base_01 body1 = /Root/base_02 type = Revolute

不要把 Mesh 和 Mesh 直接连接关节。base_01下所有相对固定的 Mesh 都属于同一个 link,不需要相互添加关节。关节连接的是两个刚体 Xform。

在 Isaac Sim 中大致操作:

  1. 重新整理base_01base_02base_03为 Root 的直接子节点。
  2. 选中每个 link 下的 Mesh,执行Physics/Colliders/Add
  3. 选中base_01base_02base_03,分别添加Rigid Body
  4. Root添加Articulation Root
  5. 创建Revolute Joint
  6. 设置:
    • body0:父 link,例如base_01
    • body1:子 link,例如base_02
    • local pose 0/1:对齐关节位置
    • axis:对齐旋转轴
    • lower/upper limit:设置角度范围

如果base_01base_02之间只是固定连接,则使用Fixed Joint,不要使用 Revolute Joint。

最终导出前应检查 URDF:

<link name="base_01"/> <link name="base_02"/> <joint name="joint_base01_base02" type="revolute"> <parent link="base_01"/> <child link="base_02"/> </joint>

你现在的 USD 导出成只有一个Rootlink,说明需要先完成上述刚体和关节结构,不能只添加碰撞体就解决。

← 返回列表