Skip to content

Synapse: Robotic Skills

SUMMARY

Synapse provides the full robotics stack, including motion planning, kinematics, control, and hardware integration.

It enables the same robotic skills to run consistently across manipulators, mobile robots and humanoids by abstracting both software control and hardware interfaces into a unified execution layer.

EARLY ACCESS

We are actively expanding Synapse!

APIs may change between releases and robot support varies per skill. Please check the individual skill pages for current compatibility.

Installation Guide

Setting up Synapse for the first time? Follow the Installation Guide to configure your environment.

ABB IRB 7600
ABB IRB 7600-150/3.50
Fanuc LR Mate 200i
Fanuc LR Mate 200i
Franka Robotics Panda
Franka Robotics Panda
Kuka KR 16-2
Kuka KR 16-2
Motoman BMDA3
Motoman MH5
Universal Robots UR30
Universal Robots UR30

When to Use Synapse?

Synapse is designed to address fragmentation in robotics software stacks, particularly across motion planning, kinematics, control, and hardware interfaces.

It provides a unified execution layer that abstracts robot-specific implementations into a consistent interface, reducing the need for per-platform integration.

Synapse is appropriate when the system requires:

  • Motion Planning: RRT, RRT*, and related sampling-based planning methods
  • Forward and Inverse Kinematics: CLIC, TRAC-IK, Multi-Seed CLIC IK
  • Hardware-Agnostic Communication: Unified interface across multiple robot vendors and control systems
  • Simulation Workflows: Isaac Sim support, with MuJoCo support coming soon
  • Simulation-to-Real Consistency: Identical behaviors can be deployed in both simulation and real-world environments

How to Use Synapse?

To use the skills from synapse, simply use:

python
from telekinesis import synapse

Here is an example of Inverse Kinematics:

python
import numpy as np
from loguru import logger
from telekinesis.synapse.robots.manipulators import kuka

robot = kuka.KukaKR6R9002()

q = np.asarray([0, -np.pi / 2 - 0.1, -np.pi / 2, 0, np.pi / 2, 0])
target_pose = robot.forward_kinematics(q, rot_type="rad")

noise = np.random.normal(loc=0.0, scale=0.5, size=q.shape)
q_init = q + noise

q = robot.inverse_kinematics(
    target_pose=target_pose,
    rot_type="rad",
    q_init=q_init,
    solver="clik",
)
logger.success(f"IK solution: {q}")

Here is another example to move the real robot in Cartesian space:

EARLY ACCESS

Synapse is under active development. Currently this skill is supported only on Universal Robots.

python
from loguru import logger
from telekinesis.synapse.robots.manipulators import universal_robots

robot_ip = "192.168.1.2"  # replace with your robot's IP

robot = universal_robots.UniversalRobotsUR10E()
robot.connect(ip=robot_ip)

initial_tcp_pose = robot.get_cartesian_pose()

new_tcp_pose = initial_tcp_pose[:]
new_tcp_pose[2] -= 0.2

robot.set_cartesian_pose(
    cartesian_pose=new_tcp_pose,
    speed=0.25,
    acceleration=0.25,
    asynchronous=False,
)
logger.info(f"Moved to target Cartesian pose: {new_tcp_pose}")

robot.disconnect()

Here is an example of moving a Robotiq gripper:

python
from telekinesis.synapse.tools.parallel_grippers import robotiq

gripper = robotiq.Robotiq2F85()
gripper.connect(ip="192.168.1.1", protocol="RTDE")

# Open fully
gripper.move(position=85.0, speed=100.0, force=100.0, asynchronous=False)
# Grasp
gripper.move(position=30.0, speed=50.0, force=60.0, asynchronous=False)
# Release
gripper.move(position=85.0, speed=100.0, force=100.0, asynchronous=False)

gripper.disconnect()

Overview of Skills

Kinematics

SDK CallDescriptionSupported Robots
forward_kinematicsCompute the end-effector pose from a given joint configuration.ABB, Fanuc, Franka Robotics, Kuka, Motoman, Neura Robotics, Universal Robots
inverse_kinematicsSolve joint configurations from a target Cartesian pose.ABB, Fanuc, Franka Robotics, Kuka, Motoman, Neura Robotics, Universal Robots
get_on_robot_forward_kinematicsCompute forward kinematics using the robot controller's built-in solver.Universal Robots
get_on_robot_inverse_kinematicsCompute inverse kinematics using the robot controller's built-in solver.Universal Robots
get_inverse_kinematics_has_solutionCheck whether a valid IK solution exists for a target Cartesian pose.Universal Robots
get_jacobianRead the geometric Jacobian at the current or specified configuration.Universal Robots
get_jacobian_time_derivativeRead the time derivative of the Jacobian matrix.Universal Robots
get_actual_tool_flange_poseRead the actual tool flange pose without TCP offset.Universal Robots

Connection

SDK CallDescriptionSupported Robots
connect / disconnectConnect to and disconnect from robot controllers.Universal Robots

Motion

SDK CallDescriptionSupported Robots
set_cartesian_poseCommand robot motion to a target Cartesian pose.Universal Robots
set_joint_positionsCommand robot motion to a target joint configuration.Universal Robots
set_cartesian_pose_in_joint_spaceCommand a Cartesian target pose using a joint-space interpolated trajectory.Universal Robots
set_joint_position_in_cartesian_spaceCommand a joint configuration using a Cartesian-interpolated trajectory.Universal Robots
move_joint_pathMove the robot through a sequence of joint configurations.Universal Robots
move_cartesian_pathMove the TCP through a sequence of Cartesian waypoints.Universal Robots
move_pathExecute a pre-built controller-native path object.Universal Robots
move_until_contactExecute an approach motion that stops on contact.Universal Robots
stop_cartesian_motionDecelerate and stop any ongoing Cartesian motion.Universal Robots
stop_joint_motionDecelerate and stop any ongoing joint-space motion.Universal Robots
trigger_protective_stopImmediately halt all robot motion by triggering a protective stop.Universal Robots
start_jogStart continuous joint jogging at specified speeds.Universal Robots
stop_jogStop an active jog motion.Universal Robots
start_freedrive_modeStart gravity-compensated back-drivable (freedrive) mode.Universal Robots
stop_freedrive_modeExit freedrive mode and restore normal motion control.Universal Robots
start_teach_modeStart zero-gravity teach mode for unconstrained manual back-drive.Universal Robots
stop_teach_modeExit teach mode and restore normal motion control.Universal Robots
motion_planningPlan collision-aware and feasible robot trajectories.ABB, Fanuc, Franka Robotics, Kuka, Motoman, Neura Robotics, Universal Robots

Servo Control

SDK CallDescriptionSupported Robots
servo_jointSend real-time high-frequency joint servo commands.Universal Robots
servo_cartesianSend real-time high-frequency Cartesian servo commands.Universal Robots
servo_circularExecute a circular arc move via the servo interface.Universal Robots
servo_stopStop an active servo motion.Universal Robots

Speed Control

SDK CallDescriptionSupported Robots
speed_jointCommand the robot with joint-space velocity targets.Universal Robots
speed_cartesianCommand the robot with Cartesian velocity targets.Universal Robots
speed_stopStop an active speed controller.Universal Robots

Force Control

SDK CallDescriptionSupported Robots
move_in_force_modeExecute compliant force-controlled motions.Universal Robots
stop_force_modeStop an active force mode and return to normal position control.Universal Robots
set_force_mode_dampingSet the damping coefficient for the active force mode controller.Universal Robots
set_force_mode_gain_scalingScale the gain of the active force mode controller.Universal Robots
set_external_force_torqueFeed an external wrench estimate into the robot's dynamics model.Universal Robots
tool_contactCheck whether the tool has made contact in a specified Cartesian direction.Universal Robots
zero_ft_sensorZero (tare) the force/torque sensor at the current reading.Universal Robots

State Reading

SDK CallDescriptionSupported Robots
get_joint_positionsRead the current joint positions in degrees.Universal Robots
get_cartesian_poseRead the current TCP pose as [x, y, z, rx, ry, rz].Universal Robots
get_pose_transformCompute a pose by applying a relative transformation in the frame of a source pose.Universal Robots
get_timestampRead the elapsed time since the robot controller was started.Universal Robots
get_robot_modeRead the current robot mode integer code from the controller.Universal Robots
get_robot_statusRead the robot status bitmask from the controller.Universal Robots
get_safety_modeRead the current safety mode integer code from the controller.Universal Robots
get_runtime_stateRead the current program runtime state from the controller.Universal Robots
get_controller_frequencyMeasure the robot controller's update frequency in Hz.Universal Robots

Joint Telemetry

SDK CallDescriptionSupported Robots
get_actual_joint_velocitiesRead the current joint velocities in degrees per second.Universal Robots
get_actual_joint_currentsRead the actual motor currents for each joint.Universal Robots
get_joint_temperaturesRead the current temperature of each joint motor.Universal Robots
get_joint_torquesRead the net joint torques (gravity and friction corrected).Universal Robots
get_actual_joint_positions_historyRead past joint positions from the controller's history buffer.Universal Robots

TCP Telemetry

SDK CallDescriptionSupported Robots
get_actual_tcp_speedRead the current TCP speed in Cartesian coordinates.Universal Robots
get_actual_tcp_forceRead the generalized forces (wrench) at the TCP.Universal Robots
get_target_waypointRead the target waypoint of the active move.Universal Robots
get_tcp_offsetRead the active TCP offset pose from the controller.Universal Robots
get_ft_raw_wrenchRead the raw uncompensated force/torque sensor measurement.Universal Robots

I/O and Configuration

SDK CallDescriptionSupported Robots
get_digital_in_stateRead the state of a digital input channel.Universal Robots
get_digital_out_stateRead the state of a digital output channel.Universal Robots
get_actual_digital_input_bitsRead all digital input states as a bitmask.Universal Robots
get_actual_digital_output_bitsRead all digital output states as a bitmask.Universal Robots
get_standard_analog_inputRead a standard analog input channel value.Universal Robots
get_standard_analog_outputRead a standard analog output channel value.Universal Robots
get_output_int_registerRead an output integer register value from the controller.Universal Robots
get_output_double_registerRead an output double (float) register value from the controller.Universal Robots
get_payloadRead the configured payload mass from the controller.Universal Robots
get_payload_cogRead the configured payload center of gravity offset.Universal Robots
set_payloadSet the payload mass and center of gravity on the controller.Universal Robots
set_tcpSet the Tool Center Point offset on the controller.Universal Robots
get_step_timeRead the duration of one robot control time step in seconds.Universal Robots
get_speed_scalingRead the current speed scaling factor applied by the controller.Universal Robots
get_async_operation_progressRead the progress of the current asynchronous operation.Universal Robots
get_freedrive_statusRead the freedrive singularity proximity status.Universal Robots

Safety Checks

SDK CallDescriptionSupported Robots
is_protective_stoppedCheck whether the robot is in a protective stop state.Universal Robots
is_emergency_stoppedCheck whether the robot is in an emergency stop state.Universal Robots
is_program_runningCheck whether a program is currently running on the controller.Universal Robots
is_steadyCheck whether the robot is fully at rest.Universal Robots
is_pose_within_safety_limitsCheck whether a Cartesian pose is within the robot's safety limits.Universal Robots
is_joints_within_safety_limitsCheck whether a joint configuration is within the robot's safety limits.Universal Robots
unlock_protective_stopProgrammatically unlock a protective stop.Universal Robots
get_safety_status_bitsRead the robot safety system status as a bitmask.Universal Robots

Contact Detection

SDK CallDescriptionSupported Robots
start_contact_detectionArm asynchronous contact detection on the robot.Universal Robots
read_contact_detectionPoll the asynchronous contact detection state.Universal Robots
stop_contact_detectionDisarm contact detection and return the final result.Universal Robots

F/T Sensor Setup

SDK CallDescriptionSupported Robots
ft_rtde_input_enableEnable or disable the RTDE-fed external force/torque sensor input.Universal Robots
enable_external_ft_sensorEnable or disable the external force/torque sensor using the legacy API.Universal Robots

Dynamics

SDK CallDescriptionSupported Robots
set_gravitySet the gravity direction used by the robot's dynamics model.Universal Robots
set_target_payloadSet the payload mass, center of gravity, and inertia tensor.Universal Robots
direct_torqueCommand direct joint torques on the robot.Universal Robots
get_mass_matrixRead the joint-space mass (inertia) matrix.Universal Robots
get_coriolis_and_centrifugal_torquesRead the Coriolis and centrifugal joint torques at the current state.Universal Robots

Target State

SDK CallDescriptionSupported Robots
get_target_joint_positionsRead the controller-commanded target joint positions.Universal Robots
get_target_joint_velocitiesRead the controller-commanded target joint velocities.Universal Robots
get_target_joint_currentsRead the controller-commanded target joint motor currents.Universal Robots
get_target_joint_momentsRead the controller-commanded target joint torques (moments).Universal Robots
get_target_joint_accelerationsRead the controller-commanded target joint accelerations.Universal Robots
get_target_tcp_poseRead the controller-commanded target TCP pose.Universal Robots
get_target_tcp_speedRead the controller-commanded target TCP speed.Universal Robots
get_target_speed_fractionRead the programmatically set target speed scaling fraction.Universal Robots

Electrical

SDK CallDescriptionSupported Robots
get_actual_main_voltageRead the Safety Control Board main supply voltage.Universal Robots
get_actual_robot_voltageRead the 48V robot drive rail voltage.Universal Robots
get_actual_robot_currentRead the total robot current from the Safety Control Board.Universal Robots
get_actual_joint_voltageRead the actual joint motor drive voltages.Universal Robots
get_actual_current_as_torqueRead actual joint motor currents converted to torque estimates.Universal Robots

Diagnostics

SDK CallDescriptionSupported Robots
get_actual_execution_timeRead the robot controller real-time thread execution time.Universal Robots
get_actual_tool_accelerometerRead the tool accelerometer readings.Universal Robots
get_actual_momentumRead the norm of the robot's Cartesian linear momentum.Universal Robots
get_speed_scaling_combinedRead the combined effective speed scaling factor.Universal Robots
get_joint_control_outputRead the joint control output currents from the controller.Universal Robots
get_joint_modeRead the joint control mode codes for all six joints.Universal Robots
get_payload_inertiaRead the currently configured payload inertia tensor.Universal Robots

Custom Scripting

SDK CallDescriptionSupported Robots
send_custom_scriptSend an inline URScript program string to the controller.Universal Robots
send_custom_script_fileSend a URScript file to the robot controller.Universal Robots
send_custom_script_functionRegister a named URScript function on the controller.Universal Robots
set_custom_script_fileSet a persistent custom control script file on the controller.Universal Robots

Watchdog

SDK CallDescriptionSupported Robots
set_watchdogEnable the RTDE communication watchdog on the controller.Universal Robots
kick_watchdogReset the RTDE communication watchdog timer.Universal Robots

Recording

SDK CallDescriptionSupported Robots
start_file_recordingRecord RTDE data to a CSV file.Universal Robots
stop_file_recordingStop an active RTDE file recording.Universal Robots

Tools (Grippers)

SDK CallDescriptionSupported Robots
connect / disconnectConnect to and disconnect from parallel grippers.OnRobot, Robotiq
set_unitConfigure the units for position, speed, and force parameters.OnRobot, Robotiq
set_position_rangeConfigure the physical stroke range for millimeter-unit commands.OnRobot, Robotiq
set_speedConfigure the default motion speed of the gripper.OnRobot, Robotiq
set_forceConfigure the default gripping force of the gripper.OnRobot, Robotiq
openFully open the gripper.OnRobot, Robotiq
closeClose the gripper to grasp an object.OnRobot, Robotiq
moveMove the gripper to a specific position.OnRobot, Robotiq
get_current_positionRead the current finger position of the gripper.OnRobot, Robotiq