Skip to content

Jog Mode

SUMMARY

Jog mode is Cartesian Jogging and drives the TCP continuously at a Cartesian twist expressed in the selected feature frame - equivalent to holding a direction button on the teach pendant.

start_jog begins the continuous motion; the robot keeps moving at speeds until stop_jog is called.

stop_jog decelerates and halts the jog.

SUPPORTED ROBOTS

Currently supported only on Universal Robots.

UNITS

cartesian_velocity is [vx, vy, vz, ωx, ωy, ωz] in m/s and deg/s.

The Skill

python
# Start jogging the TCP in the base frame
robot.start_jog(speeds=[0.0, 0.0, 0.05, 0.0, 0.0, 0.0], feature=0, acc=0.5)

# Stop the jog and decelerate to a halt
robot.stop_jog()

The Code

Safety first!

A real robot will faithfully do whatever you ask of it - so please take a moment to clear the workspace, keep an E-Stop within reach, and be ready to disconnect.

Operating real hardware is at your own risk.

Example: Start, Use, and Stop a Jog Session

Jog the TCP at 5 cm/s along -Z in the base frame for 5 seconds, then stop cleanly.

python
"""
Start and stop jog mode example for the Synapse SDK.

``start_jog`` drives the TCP continuously at a Cartesian twist
``[vx, vy, vz (m/s), ωx, ωy, ωz (deg/s)]`` expressed in the ``feature``
frame, until ``stop_jog`` is called — equivalent to holding a direction
button on the teach pendant. ``feature`` selects the frame:
``0`` = base, ``1`` = tool, ``2`` = custom (provide ``custom_frame``).
This is Cartesian jogging — there is no joint-jog API.

Currently supported only for Universal Robots (UR10e).

Usage:
    python start_and_stop_jog_mode.py --ip <ROBOT_IP>
"""

import argparse
import time
from loguru import logger

from telekinesis.synapse.robots.manipulators import universal_robots


def main(robot_ip: str):
    """Jog the TCP -Z at 5 cm/s in the base frame for 5 seconds, then stop."""

    # Create robot instance
    robot = universal_robots.UniversalRobotsUR10E()

    # Connect to the robot
    robot.connect(ip=robot_ip)

    # Cartesian twist [vx, vy, vz (m/s), ωx, ωy, ωz (deg/s)] in the base frame
    cartesian_velocity = [0.0, 0.0, 0.05, 0.0, 0.0, 0.0]
    logger.info(f"Starting jog - cartesian_velocity [m/s, deg/s]: {cartesian_velocity}")
    robot.start_jog(
        cartesian_velocity=cartesian_velocity,
        feature=0,
        cartesian_acceleration=0.5,
    )

    # Let the jog run, then stop
    time.sleep(5.0)
    robot.stop_jog()
    logger.success("Jog mode stopped.")

    # Disconnect
    robot.disconnect()


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="UR robot start and stop jog mode example")
    parser.add_argument("--ip", type=str, required=True, help="IP address of the UR robot")
    args = parser.parse_args()

    main(args.ip)

The Explanation of the Code

start_jog sends a Cartesian twist to the controller. cartesian_velocity is a 6-element vector [vx, vy, vz, ωx, ωy, ωz] with linear velocity in m/s and angular velocity in deg/s, expressed in the frame chosen by feature. feature selects the reference frame: 0 = base, 1 = tool, 2 = custom (provide custom_frame). cartesian_acceleration sets the TCP acceleration. The robot continues moving at this twist until stop_jog is called.

stop_jog sends a stop command to the controller, decelerating and halting any ongoing jog. Always call stop_jog after start_jog to prevent unintended continuous motion. If no jog is active, stop_jog is a no-op on most controllers and is safe to call defensively.

How to Tune the Parameters

start_jog

ParameterTypeDefaultDescription
cartesian_velocitylist[float]-Cartesian twist [vx, vy, vz, ωx, ωy, ωz]. Linear in m/s, angular in deg/s, expressed in the feature frame.
featureint0Reference frame: 0 = base, 1 = tool, 2 = custom.
cartesian_accelerationfloat0.5TCP acceleration.
custom_framelist[float][]Pose [x, y, z, rx, ry, rz] of the custom reference frame. Used only when feature=2.

stop_jog

This skill takes no input parameters.

Return Value

MethodTypeDescription
start_jogNoneReturns after the jog command is sent.
stop_jogNoneReturns after the stop command is sent.

Where to Use the Skill

  • Interactive Cartesian positioning workflows.
  • Aligning the TCP to a fixture or sensor with continuous motion in a chosen frame.
  • Teach-pendant-style operator-guided motion from code.

When Not to Use the Skill