坐标变换器#
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