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
| Field | Type | Description |
|---|---|---|
steady | bool | True 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=Falseinstead.

