Isaac Sim知识小解(4):Transformation

1. 三维刚体的空间表示

假设空间中的一个物体是刚体。换句话来说,这个物体在空间中不会因为任何的力的作用而产生任何的形变,这使得我们可以简单地将这个物体拆分成两个部分,一个是物体的形状信息,一个是物体的位置信息。

形状信息 :在 Isaac Sim 里面通常以 Prim 进行表示,并且以 Mesh 的方式进行储存,即一些通过一系列的点,以及一些多元组表示的面组成的信息。

作为一个例子,在大多数的 Mesh 中,面均以三角形存储,如一个 Mesh 可以被表示为 [(0, 0, 0), (1, 1, 0), (1, 1, 1)] 以及 [(0, 1, 2)] 来表示,前者表示这个 Mesh 的三个顶点在空间中的坐标,而后者则表示仅存在一个面,这个面由序号 0, 1, 2 的三个顶点组成。

位置信息 :通过两个变量来组成,即 position 和 orientation。

  • 平移

  • 旋转:欧拉角、旋转矩阵、四元数

对于四元数,在 Isaac Sim 中,默认使用的是 scalar_first 的形式,也就是 [w, x, y, z] 的形式,而我们最常使用的旋转库,scipy.spatial.transform.Rotation 默认使用的是 vector_first 的形式,也就是 [x, y, z, w] 的形式。

博客:欧拉角、quat四元组和旋转矩阵的关系

2. World Frame

  • World Frame

一般来说,任何一个坐标系都可以通过关于另一个坐标系的平移和旋转来表示。事实上这种通过相对关系来进行的表示并不方便,而是存在一个绝对的基准,这样只维护不同坐标系相对于这个绝对的基准的变换关系。

这里合理的,因此给出定义,World Frame,为世界坐标系,是某个空间内绝对的静止的坐标系。

在 Isaac Sim 中,我们认为 Root,即 get_prim_at_path("/") 所获得的 Prim 表示的坐标系为世界坐标系。

  • Local Frame

同时,我们也存在另一种需求,诸如我们想要将一个 Camera 和 Franka hand 进行固连,即让 Camera 随着 Franka hand 而运动,似乎我们只能定义一个 Camera 相对于 Franka hand 的变换,从而使得这个变换为固定值。实际中,我们只需要将 Camera 放置在 Franka hand 的 prim_path 下方,就可以确保 franka hand 在变换的过程中使得 Camera 一起变换。

因此在计算 World Frame 的变换的过程中,事实上是通过链式进行传播,将若干 Local Frame 的变换组合在一起而得到的。

3. Isaac Sim 的 API

Isaac Sim 在提供了仿真平台的同时,大概还是给出了一些比较不错的接口的,即之前事实上提到过的,Isaac Sim XFormPrim。在这里给出程序示例:

python 复制代码
from omni.isaac.core.prims import XFormPrim
from scipy.spatial.transform import Rotation as R

object_xform = XFormPrim("/World/object")
position, orientation = object_xform.get_world_pose()

position[2] += 2.0

orientation_R = R.from_quat(orientation[[1, 2, 3, 0]]) * R.from_euler("xyz", np.array([90,0,0]), degrees=True)
orientation = orientation_R.as_quat()[[3, 0, 1, 2]]

object_xform.set_world_pose(position=position, orientation=orientation)
相关推荐
用户157415681653418 小时前
让「大肥鱼」在群里开口说话:NapCat + AstrBot + GPT-SoVITS 语音机器人搭建实录
机器人·aigc
硅谷秋水1 天前
从VLM规划器到机器人智能体:面向依赖历史信息的操控任务自演化框架
人工智能·机器学习·语言模型·机器人
lisw052 天前
用于医疗的磁驱动柔性微机器人研究进展!
机器人·自动化·硬件工程
落798.2 天前
《启元 PrimeSim 如何用生成视频评估机器人策略》
人工智能·机器人·启元·具身应用
智塑未来2 天前
明源云AI走播机器人,打造智能直播新体验
人工智能·机器人
硅谷秋水2 天前
RoboAtom:机器人学习的大规模原子-动作监督
人工智能·机器学习·计算机视觉·机器人
硅谷秋水2 天前
OpenRUA 方法分析
人工智能·机器学习·语言模型·机器人
蓝天居士3 天前
EtherCAT从入门到精通(7)
机器人·嵌入式·ethercat
蓝天居士3 天前
EtherCAT从入门到精通(10)
机器人·嵌入式·ethercat
敢敢のwings3 天前
Long-WAM 深度解析:机器人怎样记住过去、预测未来,并及时完成下一段动作
机器人