Skip to content

move_pose

Queued EXEC mode Enabled Homed Takes control

Move the tool to a pose, with the joints moving in joint space. The robot works out the joint angles for the pose, starting from where the arm is, then moves there like move_joints(): the tool's path is not a straight line. Use move_linear() for a straight line, and is_reachable() to check a pose first.

Syntax

robot.move_pose(x, y, z, rx, ry, rz, timeout=120.0, *, angle_unit='rad', **options)

Arguments

Name Type Default Description
x float required Target position along the base X axis, in metres.
y float required Target position along the base Y axis, in metres.
z float required Target position along the base Z axis, in metres.
rx float required Turn about the base X axis, in radians, or degrees with angle_unit="deg". The orientation is R = Rx(rx) Ry(ry) Rz(rz).
ry float required Turn about the tool's new Y axis, in the same unit.
rz float required Turn about the tool's own Z axis, in the same unit.
timeout float 120.0 Seconds to wait for the move to finish, in sync mode only.
angle_unit str 'rad' "rad" or "deg": the unit of every angle in this call.
**options Any each setting's own Settings for this move only. Each one you leave out takes its default: speed = 100 % accel = 100 % duration = none (the speed decides) profile = "ruckig" jerk = 100 % ramp_fraction = 0.25 blend = 0 blend_mode = "exact_velocity" blend_continuity = "c1" ik_solver = "pinocchio" singularity_strategy = "stop" samples = automatic dry_run = False

Returns

str

The command id. The call returns once the robot has accepted the move; call wait_idle() to wait until it has finished. In sync mode the call returns when the move has finished.

Examples

x, y, z, rx, ry, rz = robot.get_pose()
robot.move_pose(x, y, z + 0.05, rx, ry, rz)
robot.wait_idle()
Usage restrictions 24 codes

This command is added to the robot's motion queue. The robot accepts it only when it is ready for motion (EXEC mode, enabled and homed), from the client that holds control or when no client does. Otherwise, the robot refuses it with one of:

  • [6022] Client too old for pose commands — only a raw client that sends no "protocol": 2
  • [6010] Command not allowed now — the message names the mode or state it needs
  • [6101] Control held by another client — another client holds control; the message names it
  • [5002] Program aborted — an earlier move failed; clear errors first
  • [6004] Invalid motion options — a setting is unknown, out of range, or refused for a single move
  • [6011] Motion queue full

Once accepted, the move can still fail before it starts:

  • [5101] Target out of reach — the arm cannot reach the target pose
  • [5102] Path only partly reachable — the solver returned an invalid joint solution
  • [5103] Path too close to a limit — the joint solution is outside the joint limits
  • [5104] Solution misses the pose — the joint solution misses the target pose by more than 0.2 mm or 0.5 degrees
  • [5010] Requested duration too short — duration is shorter than the limits allow
  • [5011] Invalid duration — duration is not more than 0 seconds
  • [5201] TOPPRA profile unavailable — profile="toppra", but that planner is missing
  • [5202] TOPPRA found no solution — profile="toppra" found no timing within the limits
  • [5009] Planned acceleration over its limit — the planned motion would exceed an acceleration limit
  • [5006] Move outside the joint limits — the path would take a joint outside its limits
  • [5007] Move into a safety zone — the path would enter a safety zone
  • [5008] Zone check unavailable — safety zones are active, but the robot model to check them is missing
  • [1401] Self-collision — the path would bring two parts of the arm too close
  • [5001] Trajectory planning failed
  • [3201] Trajectory not taken by RTI

A move that has started can end early with:

  • [5003] Command cancelled — an earlier move failed, or the robot left EXEC mode
  • [5004] Command stopped — stop() was called
  • [5005] Move did not settle — only with set_completion_policy("strict")

In Python, a refusal raises CommandRejected; its number is the code above. A failure after the robot accepted the move is raised by wait_idle() as MotionFailed, or by this call itself in sync mode as CommandRejected. No answer raises RobotTimeout; no connection, RobotConnectionError. ValueError: angle_unit is neither "rad" nor "deg".

Protocol

A client that does not use robotclient sends this over the TCP command protocol (port 29000) for the example above, with the tool at the standard start pose (get_pose() returning [0.0, 0.2617, 0.2329, -2.0944, 0.0, -1.5708]):

{"id": "c1", "cmd": "move_pose", "args": [0.0, 0.2617, 0.2829, -2.0944, 0.0, -1.5708], "protocol": 2}

See also