Skip to content

Get Target Joint Positions

SUMMARY

Get Target Joint Positions returns the joint-position setpoint the controller is currently commanding (deg, base to wrist).

Reads from the manipulator state - live controller setpoint when connected, mirrors the cached joint_positions offline.

SUPPORTED ROBOTS

Available on all supported manipulators in offline mode. Live hardware readings are currently supported only on Universal Robots.

UNITS

Returns target joint positions in degrees, ordered base to wrist.

The Skill

python
q_target = robot.get_target_joint_positions()

The Code

python
"""
Read target (commanded) joint positions example for the Synapse SDK.

Returns the manipulator's target/commanded joint positions [deg]. With
``--ip``, reads live hardware state. Without ``--ip``, reads from the
internal commanded cache (no connection made) and logs a warning.

Illustrated using Universal Robots (UR10e), supported on all robots.

Usage:
    python get_target_joint_positions.py [--ip <ROBOT_IP>]
"""

import argparse
from loguru import logger

from telekinesis.synapse.robots.manipulators import universal_robots


def main(ip: str | None = None):
    """Log the current target joint positions [deg]."""

    robot = universal_robots.UniversalRobotsUR10E()

    if ip is not None:
        robot.connect(ip=ip)
    else:
        logger.warning(
            "No --ip provided; reading offline commanded-cache state, "
            "not live hardware readings."
        )

    try:
        logger.success(f"target_joint_positions [deg]: {robot.get_target_joint_positions()}")
    finally:
        if ip is not None:
            robot.disconnect()


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Read target joint positions Synapse example")
    parser.add_argument("--ip", type=str, default=None, help="UR robot IP address (optional)")
    args = parser.parse_args()

    main(ip=args.ip)

The Explanation of the Code

python
from telekinesis.synapse.robots.manipulators import universal_robots

robot = universal_robots.UniversalRobotsUR10E()

Create the robot. UR10e is used here for illustration; the same pattern works for every supported brand.

python
if ip is not None:
    robot.connect(ip=ip)

Connect to the robot at the given IP. When no --ip is passed, no connection is made and the getter returns from the offline commanded-cache (mirrors joint_positions) instead of the live controller setpoint.

python
logger.success(f"target_joint_positions [deg]: {robot.get_target_joint_positions()}")

Read the controller-commanded joint-position setpoint in degrees, ordered base to wrist. When connected this is the live setpoint, distinct from the measured get_joint_positions; offline it mirrors the cached commanded configuration.

python
finally:
    if ip is not None:
        robot.disconnect()

Always release the controller link in a finally block so a failure mid-read still cleans up the connection.

Return Value

TypeDescription
list[float]Controller-commanded joint positions in deg, one value per joint, ordered base to wrist. Offline: same as the cached joint_positions.

Where to Use the Skill

  • Tracking error analysis - Compare against measured positions from Get Joint Positions.
  • Motion monitoring - Observe the commanded trajectory in real time during a move.

When Not to Use the Skill