Skip to content

Is Steady

SUMMARY

Is Steady returns True if the robot is fully at rest (all joints stationary) and False if any joint is still moving.

SUPPORTED ROBOTS

This skill is currently supported on Universal Robots only. Calling this method on other robot brands will raise a NotImplementedError.

The Skill

python
steady = robot.is_steady()

The Code

Example: Wait Until the Robot Is Steady

Poll is_steady after a motion command until the robot comes to a complete stop.

python
import time
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()
# Connect
robot.connect(ip=robot_ip)

initial_positions = robot.get_joint_positions()
target_positions = initial_positions[:]
target_positions[0] += 10

robot.set_joint_positions(
    joint_positions=target_positions,
    speed=30,
    acceleration=40,
    asynchronous=True,
)

while not robot.is_steady():
    time.sleep(0.05)
logger.success("Robot is steady.")

# Disconnect
robot.disconnect()

The Explanation of the Code

is_steady checks whether all joint velocities have fallen below the controller's stillness threshold. Use it after an asynchronous move to confirm the robot has fully decelerated before initiating the next step.

How to Tune the Parameters

This skill takes no input parameters.

Return Value

FieldTypeDescription
steadyboolTrue if all joints are stationary, False if any joint is still moving.

Where to Use the Skill

  • Non-blocking wait for motion completion after async commands.
  • Confirming the robot is at rest before acquiring images or performing measurements.

When Not to Use the Skill

Use a different skill when:

  • You simply want to block until the robot reaches its target without polling — use asynchronous=False instead.