Skip to content

GDK TF Interface Documentation (Python)

Overview

The TF (Transform) module provides the G02 robot with coordinate frame transformation functionality. Through the Python interface, developers can conveniently obtain the transformation relationships between the robot's various components, suitable for coordinate transformation, sensor calibration, kinematic computation, and many other scenarios.

Interface Description

TF Class

This class encapsulates the main functional interfaces for coordinate transformation.

  • Function: Get the transformation relationships from base_link to all child coordinate frames
  • Parameters: None
  • Return value: list[TransformStamped], a list containing all transformation relationships; throws an exception on failure

  • TransformStamped object attributes:

Attribute Type Description Unit
frame_id str Parent coordinate frame ID string
child_frame_id str Child coordinate frame ID string
transform.translation.x float Translation X component meters
transform.translation.y float Translation Y component meters
transform.translation.z float Translation Z component meters
transform.rotation.x float Rotation quaternion X component unitless
transform.rotation.y float Rotation quaternion Y component unitless
transform.rotation.z float Rotation quaternion Z component unitless
transform.rotation.w float Rotation quaternion W component unitless
timestamp_ns int Timestamp nanoseconds
  • Example:
import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Get all transformation relationships
transforms = tf.get_all_tf_from_base_link()
print(f"Obtained {len(transforms)} transformation relationships:")

for transform_stamped in transforms:
    print(f"Coordinate frames: {transform_stamped.frame_id} -> {transform_stamped.child_frame_id}")
    print(f"  Translation: x={transform_stamped.transform.translation.x:.3f}, "
          f"y={transform_stamped.transform.translation.y:.3f}, "
          f"z={transform_stamped.transform.translation.z:.3f}")
    print(f"  Rotation: x={transform_stamped.transform.rotation.x:.3f}, "
          f"y={transform_stamped.transform.rotation.y:.3f}, "
          f"z={transform_stamped.transform.rotation.z:.3f}, "
          f"w={transform_stamped.transform.rotation.w:.3f}")
    print(f"  Timestamp: {transform_stamped.timestamp_ns}")
    print()

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")
  • Function: Get the transformation relationship from base_link to the specified child coordinate frame
  • Parameters:
  • child_frame_id: Child coordinate frame ID (string)
  • Return value: A Transform object, containing the transformation information; throws an exception on failure

  • Transform object attributes:

Attribute Type Description Unit
translation.x float Translation X component meters
translation.y float Translation Y component meters
translation.z float Translation Z component meters
rotation.x float Rotation quaternion X component unitless
rotation.y float Rotation quaternion Y component unitless
rotation.z float Rotation quaternion Z component unitless
rotation.w float Rotation quaternion W component unitless
  • Example:
import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Get the transformation relationship for a specified coordinate frame
child_frame_id = "head_link3"
transform = tf.get_tf_from_base_link(child_frame_id)

print(f"Transform from base_link to {child_frame_id}:")
print(f"  Translation: x={transform.translation.x:.3f}, "
      f"y={transform.translation.y:.3f}, "
      f"z={transform.translation.z:.3f}")
print(f"  Rotation: x={transform.rotation.x:.3f}, "
      f"y={transform.rotation.y:.3f}, "
      f"z={transform.rotation.z:.3f}, "
      f"w={transform.rotation.w:.3f}")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

3. get_tf_from_sensor()

  • Function: Get the transformation relationship from base_link to the specified sensor
  • Parameters:
  • sensor_extrinsic_type: Sensor extrinsic type (enum value)
  • Return value: A Transform object, containing the transformation information; throws an exception on failure

  • SensorExtrinsicType enum values:

Enum value Description
kUnknown Unknown type
kHeadLeftStereoToHeadRightStereo Head left stereo camera to right stereo camera
kLeftHandDepthToLeftHandColor Left hand depth camera to color camera
kRightHandDepthToRightHandColor Right hand depth camera to color camera
kHeadDepthToHeadColor Head depth camera to color camera
kHeadLeftStereoToHeadLink3 Head left stereo camera to head link3
kHeadRightStereoToHeadLink3 Head right stereo camera to head link3
kHeadLeftFisheyeToHeadLink3 Head left fisheye camera to head link3
kHeadRightFisheyeToHeadLink3 Head right fisheye camera to head link3
kHeadBackFisheyeToHeadLink3 Head rear fisheye camera to head link3
kChassisFrontLidarToBaseLink Chassis front lidar to base_link
kChassisBackLidarToBaseLink Chassis rear lidar to base_link
kChassisBackLidarToChassisFrontLidar Chassis rear lidar to front lidar
kChassisMid360ImuToChassisMid360Lidar Chassis Mid360 IMU to chassis Mid360 lidar
kChassisImuToBaseLink Chassis IMU to base_link
kLeftHandRGBDToArmLEndLink Left hand RGBD to left arm end link
kRightHandRGBDToArmREndLink Right hand RGBD to right arm end link
kHeadRGBDToHeadLink3 Head RGBD to head link3
  • Example:
import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Get the transformation relationship from the head left stereo camera to the right stereo camera
sensor_type = agibot_gdk.SensorExtrinsicType.kHeadLeftStereoToHeadRightStereo
transform = tf.get_tf_from_sensor(sensor_type)

print(f"Transform from head left stereo camera to right stereo camera:")
print(f"  Translation: x={transform.translation.x:.3f}, "
      f"y={transform.translation.y:.3f}, "
      f"z={transform.translation.z:.3f}")
print(f"  Rotation: x={transform.rotation.x:.3f}, "
      f"y={transform.rotation.y:.3f}, "
      f"z={transform.rotation.z:.3f}, "
      f"w={transform.rotation.w:.3f}")

# Get the transformation relationship from the chassis front lidar to base_link
lidar_transform = tf.get_tf_from_sensor(agibot_gdk.SensorExtrinsicType.kChassisFrontLidarToBaseLink)
print(f"\nTransform from chassis front lidar to base_link:")
print(f"  Translation: x={lidar_transform.translation.x:.3f}, "
      f"y={lidar_transform.translation.y:.3f}, "
      f"z={lidar_transform.translation.z:.3f}")
print(f"  Rotation: x={lidar_transform.rotation.x:.3f}, "
      f"y={lidar_transform.rotation.y:.3f}, "
      f"z={lidar_transform.rotation.z:.3f}, "
      f"w={lidar_transform.rotation.w:.3f}")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

4. lookup_transform_latest()

  • Function: Look up the latest transformation relationship between two coordinate frames
  • Parameters:
  • target_frame: Target coordinate frame ID (string)
  • source_frame: Source coordinate frame ID (string)
  • return_timestamp: Whether to return the timestamp (boolean, optional, defaults to False)
  • Return value:
  • If return_timestamp=False: returns tuple(Transform, None)
  • If return_timestamp=True: returns tuple(Transform, int), where the second element is the timestamp (nanoseconds)
  • Throws an exception on failure

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Look up the latest transform (without returning the timestamp)
transform, _ = tf.lookup_transform_latest("base_link", "arm_l_end_link")
print("Latest transform from arm_l_end_link to base_link:")
print(f"  Translation: x={transform.translation.x:.3f}, "
      f"y={transform.translation.y:.3f}, "
      f"z={transform.translation.z:.3f}")
print(f"  Rotation: x={transform.rotation.x:.3f}, "
      f"y={transform.rotation.y:.3f}, "
      f"z={transform.rotation.z:.3f}, "
      f"w={transform.rotation.w:.3f}")

# Look up the latest transform (returning the timestamp)
transform, timestamp_ns = tf.lookup_transform_latest(
    "base_link", "arm_l_end_link", return_timestamp=True
)
print(f"\nTimestamp: {timestamp_ns} ns")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

5. lookup_transform()

  • Function: Look up the transformation relationship between two coordinate frames at a specific time (supports time interpolation)
  • Parameters:
  • target_frame: Target coordinate frame ID (string)
  • source_frame: Source coordinate frame ID (string)
  • time_ns: Query time (nanosecond timestamp, integer)
  • Return value: A Transform object, containing the transformation information; throws an exception on failure

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Get the current timestamp (nanoseconds)
current_time_ns =  tf.get_latest_timestamp("arm_l_end_link")
# Query the transform from 1 second ago
target_time_ns = current_time_ns - 1_000_000_000  # 1 second ago

transform = tf.lookup_transform("base_link", "arm_l_end_link", target_time_ns)
print(f"Transform from arm_l_end_link to base_link at time {target_time_ns}:")
print(f"  Translation: x={transform.translation.x:.3f}, "
      f"y={transform.translation.y:.3f}, "
      f"z={transform.translation.z:.3f}")
print(f"  Rotation: x={transform.rotation.x:.3f}, "
      f"y={transform.rotation.y:.3f}, "
      f"z={transform.rotation.z:.3f}, "
      f"w={transform.rotation.w:.3f}")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

6. can_transform()

  • Function: Check whether a transformation relationship exists between two coordinate frames
  • Parameters:
  • target_frame: Target coordinate frame ID (string)
  • source_frame: Source coordinate frame ID (string)
  • Return value: bool, returns True if a transformation relationship exists, otherwise False

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Check whether a transform exists
if tf.can_transform("base_link", "arm_l_end_link"):
    print("A transform from arm_l_end_link to base_link exists")
else:
    print("No transform from arm_l_end_link to base_link exists")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

7. get_all_frame_names()

  • Function: Get all available coordinate frame names
  • Parameters: None
  • Return value: list[str], a list containing all coordinate frame names

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Get all coordinate frame names
frame_names = tf.get_all_frame_names()
print(f"All available coordinate frames ({len(frame_names)} total):")
for name in frame_names:
    print(f"  - {name}")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

8. get_latest_timestamp()

  • Function: Get the latest timestamp for the specified coordinate frame
  • Parameters:
  • frame_id: Coordinate frame ID (string)
  • Return value: int, the latest timestamp (nanoseconds); throws an exception on failure

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

timestamp_ns = tf.get_latest_timestamp("arm_l_end_link")
print(f"Latest timestamp for arm_l_end_link: {timestamp_ns} ns")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

9. clear()

  • Function: Clear all transformation relationships in the TF cache
  • Parameters: None
  • Return value: None

  • Example:

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# Clear the TF cache
tf.clear()
print("TF cache cleared")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

Complete Usage Examples

Coordinate Frame Transformation Query Example

import agibot_gdk
import time

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

# 1. Get all transformation relationships
print("=== Get all transformation relationships ===")
transforms = tf.get_all_tf_from_base_link()
print(f"There are {len(transforms)} coordinate frame transformation relationships in total")

for i, transform_stamped in enumerate(transforms):
    print(f"{i+1}. {transform_stamped.frame_id} -> {transform_stamped.child_frame_id}")
    print(f"   Translation: ({transform_stamped.transform.translation.x:.3f}, "
          f"{transform_stamped.transform.translation.y:.3f}, "
          f"{transform_stamped.transform.translation.z:.3f})")
    print(f"   Rotation: ({transform_stamped.transform.rotation.x:.3f}, "
          f"{transform_stamped.transform.rotation.y:.3f}, "
          f"{transform_stamped.transform.rotation.z:.3f}, "
          f"{transform_stamped.transform.rotation.w:.3f})")
    print()

# 2. Query the transform of a specific coordinate frame
print("=== Query specific coordinate frame transforms ===")
target_frames = ["head_camera_link", "left_hand_link", "right_hand_link"]

for frame_id in target_frames:
    try:
        transform = tf.get_tf_from_base_link(frame_id)
        print(f"{frame_id}:")
        print(f"  Translation: ({transform.translation.x:.3f}, "
              f"{transform.translation.y:.3f}, "
              f"{transform.translation.z:.3f})")
        print(f"  Rotation: ({transform.rotation.x:.3f}, "
              f"{transform.rotation.y:.3f}, "
              f"{transform.rotation.z:.3f}, "
              f"{transform.rotation.w:.3f})")
    except Exception as e:
        print(f"{frame_id}: retrieval failed - {e}")
    print()

# 3. Query sensor extrinsics
print("=== Query sensor extrinsics ===")
sensor_types = [
    (agibot_gdk.SensorExtrinsicType.kHeadLeftStereoToHeadRightStereo, "Head left stereo camera to right stereo camera"),
    (agibot_gdk.SensorExtrinsicType.kHeadDepthToHeadColor, "Head depth camera to color camera"),
    (agibot_gdk.SensorExtrinsicType.kChassisFrontLidarToBaseLink, "Chassis front lidar to base_link"),
    (agibot_gdk.SensorExtrinsicType.kChassisImuToBaseLink, "Chassis IMU to base_link")
]

for sensor_type, sensor_name in sensor_types:
    try:
        transform = tf.get_tf_from_sensor(sensor_type)
        print(f"{sensor_name}:")
        print(f"  Translation: ({transform.translation.x:.3f}, "
              f"{transform.translation.y:.3f}, "
              f"{transform.translation.z:.3f})")
        print(f"  Rotation: ({transform.rotation.x:.3f}, "
              f"{transform.rotation.y:.3f}, "
              f"{transform.rotation.z:.3f}, "
              f"{transform.rotation.w:.3f})")
    except Exception as e:
        print(f"{sensor_name}: retrieval failed - {e}")
    print()

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

Sensor Calibration Helper Example

import agibot_gdk
import time
import math

# Initialize the GDK system
if agibot_gdk.gdk_init() != agibot_gdk.GDKRes.kSuccess:
    print("GDK initialization failed")
    exit(1)
print("GDK initialized successfully")

tf = agibot_gdk.TF()
time.sleep(2)  # Wait for TF to initialize

def quaternion_to_euler(x, y, z, w):
    """Convert a quaternion to Euler angles (radians)"""
    # Roll (x-axis rotation)
    sinr_cosp = 2 * (w * x + y * z)
    cosr_cosp = 1 - 2 * (x * x + y * y)
    roll = math.atan2(sinr_cosp, cosr_cosp)

    # Pitch (y-axis rotation)
    sinp = 2 * (w * y - z * x)
    if abs(sinp) >= 1:
        pitch = math.copysign(math.pi / 2, sinp)  # use 90 degrees if out of range
    else:
        pitch = math.asin(sinp)

    # Yaw (z-axis rotation)
    siny_cosp = 2 * (w * z + x * y)
    cosy_cosp = 1 - 2 * (y * y + z * z)
    yaw = math.atan2(siny_cosp, cosy_cosp)

    return roll, pitch, yaw

def print_transform_info(transform, name):
    """Print transform information"""
    print(f"{name}:")
    print(f"  Translation: ({transform.translation.x:.6f}, "
          f"{transform.translation.y:.6f}, "
          f"{transform.translation.z:.6f}) meters")

    # Convert to Euler angles
    roll, pitch, yaw = quaternion_to_euler(
        transform.rotation.x, transform.rotation.y,
        transform.rotation.z, transform.rotation.w
    )

    print(f"  Rotation quaternion: ({transform.rotation.x:.6f}, "
          f"{transform.rotation.y:.6f}, "
          f"{transform.rotation.z:.6f}, "
          f"{transform.rotation.w:.6f})")
    print(f"  Rotation Euler angles: Roll={math.degrees(roll):.2f}°, "
          f"Pitch={math.degrees(pitch):.2f}°, "
          f"Yaw={math.degrees(yaw):.2f}°")
    print()

# Get the transformation relationships for all cameras
print("=== Camera extrinsic calibration information ===")
camera_sensors = [
    (agibot_gdk.SensorExtrinsicType.kHeadLeftStereoToHeadRightStereo, "Head left stereo camera to right stereo camera"),
    (agibot_gdk.SensorExtrinsicType.kLeftHandDepthToLeftHandColor, "Left hand depth camera to color camera"),
    (agibot_gdk.SensorExtrinsicType.kRightHandDepthToRightHandColor, "Right hand depth camera to color camera"),
    (agibot_gdk.SensorExtrinsicType.kHeadDepthToHeadColor, "Head depth camera to color camera"),
    (agibot_gdk.SensorExtrinsicType.kHeadLeftStereoToHeadLink3, "Head left stereo camera to head link3"),
    (agibot_gdk.SensorExtrinsicType.kHeadRightStereoToHeadLink3, "Head right stereo camera to head link3"),
    (agibot_gdk.SensorExtrinsicType.kHeadLeftFisheyeToHeadLink3, "Head left fisheye camera to head link3"),
    (agibot_gdk.SensorExtrinsicType.kHeadRightFisheyeToHeadLink3, "Head right fisheye camera to head link3"),
    (agibot_gdk.SensorExtrinsicType.kHeadBackFisheyeToHeadLink3, "Head rear fisheye camera to head link3")
]

for sensor_type, sensor_name in camera_sensors:
    try:
        transform = tf.get_tf_from_sensor(sensor_type)
        print_transform_info(transform, sensor_name)
    except Exception as e:
        print(f"{sensor_name}: retrieval failed - {e}")

# Get the transformation relationships for other sensors
print("=== Other sensor extrinsic information ===")
other_sensors = [
    (agibot_gdk.SensorExtrinsicType.kChassisFrontLidarToBaseLink, "Chassis front lidar to base_link"),
    (agibot_gdk.SensorExtrinsicType.kChassisBackLidarToBaseLink, "Chassis rear lidar to base_link"),
    (agibot_gdk.SensorExtrinsicType.kChassisBackLidarToChassisFrontLidar, "Chassis rear lidar to front lidar"),
    (agibot_gdk.SensorExtrinsicType.kChassisMid360ImuToChassisMid360Lidar, "Chassis Mid360 IMU to lidar"),
    (agibot_gdk.SensorExtrinsicType.kChassisImuToBaseLink, "Chassis IMU to base_link"),
    (agibot_gdk.SensorExtrinsicType.kLeftHandRGBDToArmLEndLink, "Left hand RGBD to left arm end link"),
    (agibot_gdk.SensorExtrinsicType.kRightHandRGBDToArmREndLink, "Right hand RGBD to right arm end link"),
    (agibot_gdk.SensorExtrinsicType.kHeadRGBDToHeadLink3, "Head RGBD to head link3")
]

for sensor_type, sensor_name in other_sensors:
    try:
        transform = tf.get_tf_from_sensor(sensor_type)
        print_transform_info(transform, sensor_name)
    except Exception as e:
        print(f"{sensor_name}: retrieval failed - {e}")

# Release GDK system resources
if agibot_gdk.gdk_release() != agibot_gdk.GDKRes.kSuccess:
    print("GDK release failed")
else:
    print("GDK released successfully")

Usage Notes

  1. GDK initialization: You must call agibot_gdk.gdk_init() to initialize the GDK system before using the TF functionality
  2. GDK release: You must call agibot_gdk.gdk_release() to release GDK system resources before the program ends
  3. Initialization wait: After creating a TF object, it is recommended to wait 2 seconds to ensure system initialization completes
  4. Coordinate frame convention: Follows the standard robot coordinate frame convention (right-handed coordinate system)
  5. Timestamp precision: The timestamp is in nanoseconds, so handle precision carefully
  6. Exception handling: All interfaces throw a RuntimeError exception on failure and need to be handled appropriately
  7. Sensor type: When querying sensor extrinsics, make sure to use the correct sensor type enum
  8. Transformation matrix: Rotation is represented as a quaternion, so pay attention to conversion with the rotation matrix
  9. Coordinate frame ID: When querying by string, make sure the coordinate frame ID is correct and exists; you can use get_all_frame_names() to get all available coordinate frames
  10. Real-time nature: TF data may change over time, so pay attention to data timeliness
  11. Transform queries: lookup_transform_latest() queries the latest transform, while lookup_transform() supports time-interpolated queries of historical transforms
  12. Transform checking: Use can_transform() to check whether a transform exists before querying, to avoid query failures
  13. Time interpolation: lookup_transform() supports time interpolation, allowing queries of the transformation relationship at any historical moment
  14. Cache management: Use clear() to clear the TF cache, useful for scenarios that need to reset transformation relationships
  15. Timestamp query: get_latest_timestamp() can get the latest update time for a specified coordinate frame
  16. Return value handling: lookup_transform_latest() returns different tuple formats depending on the return_timestamp parameter

Application Scenarios

  • Coordinate transformation: Obtaining the transformation relationships between the robot's various components
  • Sensor calibration: Obtaining the extrinsic parameters of sensors relative to the robot body
  • Kinematic computation: Providing coordinate transformation data for robot kinematic computation
  • Vision processing: Providing coordinate frame information for camera image processing
  • Navigation and localization: Providing coordinate frame transformations for SLAM and navigation
  • Manipulator control: Providing coordinate frame information for manipulator motion planning
  • Multi-sensor fusion: Unifying the coordinate frames of different sensors
  • Calibration verification: Verifying the correctness of sensor calibration results