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.

UNITS

Returns a boolean. No quantitative units.

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
"""
Logs whether the robot is fully at rest and ready to accept external forces.

Supports Universal Robots (UR).

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

import argparse

from loguru import logger

from telekinesis.synapse.robots.manipulators import universal_robots


def main(ip: str) -> None:
    """Log whether the robot is fully at rest."""

    #===================== Create Robot ==========================================
    robot = universal_robots.UniversalRobotsUR10E(name='UR10e')

    try:
        #===================== Connect Robot ==========================================
        if ip:
            robot.connect(ip=ip)

        # ==================== Run Skill ============================================
        logger.success(f"is_steady: {robot.is_steady()}")
    except (ConnectionError, OSError) as e:
        logger.error(f"Error occurred: {e}")
    finally:
        robot.disconnect()
        robot.shutdown()


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Check steady status Synapse example")
    parser.add_argument("--ip", type=str, default=None,
                         help="UR robot IP address for real hardware, e.g. 192.168.1.100")
    args = parser.parse_args()

    main(ip=args.ip)

Running the Example

bash
python is_steady.py --ip 192.168.1.100

For all options:

bash
python is_steady.py --help

Parameter Configuration

This skill takes no input parameters.

Returns

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

Raises

ExceptionCondition
RuntimeErrorThe robot is not connected.

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.