Get Joint Positions
SUMMARY
Get Joint Positions returns the current joint angles in degrees, one per joint, ordered base to wrist. Reads from the manipulator state - live values when connected, the last commanded joint configuration offline.
UNITS
Returns joint positions in degrees, ordered base to wrist.
The Skill
python
joint_positions = robot.get_joint_positions()The Code
python
"""
Logs the manipulator's live joint positions.
Supports Universal Robots (UR), Epson, virtual, and Isaac Sim.
Usage:
python get_joint_positions.py [--ip <ROBOT_IP>] [--prim_path <PRIM_PATH>]
"""
import argparse
from loguru import logger
from telekinesis.synapse.robots.manipulators import universal_robots
def main(ip: str | None, prim_path: str | None) -> None:
"""Log the live joint positions [deg]."""
#===================== Create Robot ==========================================
robot = universal_robots.UniversalRobotsUR10E(name='UR10e')
try:
#===================== Connect Robot ==========================================
if ip:
robot.connect(ip=ip)
elif prim_path:
robot.connect(simulation_prim_path=prim_path)
robot.set_joint_positions(robot.default_joint_configuration)
# ==================== Run Skill ============================================
logger.success(f"joint_positions [deg]: {robot.get_joint_positions()}")
except (ConnectionError, OSError) as e:
logger.error(f"Error occurred: {e}")
finally:
robot.disconnect()
robot.shutdown()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Read joint positions Synapse example")
parser.add_argument("--ip", type=str, default=None,
help="UR robot IP address for real hardware, e.g. 192.168.1.100")
parser.add_argument("--prim_path", type=str, default=None,
help='Isaac Sim articulation prim path, e.g. "/World/ur10e"')
args = parser.parse_args()
main(ip=args.ip, prim_path=args.prim_path)Running the Example
bash
python get_joint_positions.pybash
python get_joint_positions.py --prim_path /World/ur10ebash
python get_joint_positions.py --ip 192.168.1.100For all options:
bash
python get_joint_positions.py --helpParameter Configuration
This skill takes no input parameters.
Returns
| Type | Description |
|---|---|
list[float] | Joint angles in degrees, one value per joint, ordered base to wrist. |
Raises
get_joint_positions reads from robot.state and does not raise under normal use. On Epson, reading live hardware state instead queries the controller directly and can raise RuntimeError if the robot is not connected or the controller command fails.
Where to Use the Skill
- Feedback control - Sample joint state at each control step to close a position loop.
- Relative motion - Read current positions and apply an offset before calling
set_joint_positions. - State logging - Record the joint configuration at key points in a task sequence.
When Not to Use the Skill
- You need the TCP pose in Cartesian coordinates - use Get Cartesian Pose instead.