坐标变换器

坐标变换器#

FrameTransformer 跟踪一个或多个目标坐标系相对于源坐标系的位姿。它为克隆环境提供统一的批量接口,避免重复遍历 USD 或逐环境计算坐标变换。

坐标系变换器使用的源坐标系和目标坐标系

定义坐标系#

传感器的 prim_path 选择源刚体。每个 FrameCfg 选择一个或多个目标刚体,还可以添加固定的位姿偏移。目标路径接受正则表达式;数据顺序记录在 target_frame_names 中。

from isaaclab.sensors import FrameTransformerCfg

feet_in_base = FrameTransformerCfg(
    prim_path="{ENV_REGEX_NS}/Robot/base",
    target_frames=[
        FrameTransformerCfg.FrameCfg(
            prim_path="{ENV_REGEX_NS}/Robot/.*_FOOT",
            name="foot",
        ),
    ],
    debug_vis=True,
)

目标表达式会包含所有匹配项。如果它也匹配源刚体,输出就会包含源坐标系到自身的恒等变换。如果不需要该条目,请缩小表达式的匹配范围。

读取变换#

对于 E 个环境和解析得到的 T 个目标坐标系,位置形状为 (E, T, 3) ,四元数为 (E, T, 4) ,组合位姿为 (E, T, 7) 。四元数采用 (x, y, z, w) 顺序。

transforms = scene["feet_in_base"].data
foot_names = transforms.target_frame_names
foot_pos_b = transforms.target_pos_source.torch
foot_quat_b = transforms.target_quat_source.torch
foot_pose_w = transforms.target_pose_w.torch

target_*_source 字段在配置的源坐标系中表示目标。 target_*_w 字段在世界坐标系中表示施加偏移后的目标坐标系。对应的 source_*_w 字段给出施加偏移后的源坐标系在世界坐标系中的状态。位置单位为米,四元数无单位。

坐标系变换器调试可视化

完整的可运行示例名为 frame-transformer :

uv run --extra isaacsim isaaclab example frame-transformer