move_circle¶
Queued EXEC mode Enabled Homed Takes control
Move the tool around a circle about a centre point. The circle starts where the tool is and turns around center in the plane at right angles to normal. That plane passes through the tool's position, so center must lie in it, within 0.2 mm. With a whole number of turns the tool ends where it started. It keeps its orientation the whole way.
Syntax¶
Arguments¶
| Name | Type | Default | Description |
|---|---|---|---|
center |
Sequence[float] |
required | The circle's centre [x, y, z] in the base frame, in metres. |
normal |
Sequence[float] |
required | The direction [x, y, z] the circle's axis points in; any length. The tool goes around it counter-clockwise, seen from the tip of normal. |
turns |
float |
1.0 |
How many times to go around; a fraction goes part of the way, 0 is refused. A negative number goes the other way. |
timeout |
float |
120.0 |
Seconds to wait for the move to finish, in sync mode only. |
**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_circle([x + 0.03, y, z], [0, 0, 1])
robot.wait_idle()
Further details¶
Note
Blending does not apply: blend must be 0, and the move starts and ends
at rest.
A curve that would exceed an acceleration limit is slowed down, to
25 % of speed at most, before it fails; with duration set it is
not slowed.
Usage restrictions 28 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:
- [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:
- [5108] Blending not supported on curves —
blendis above 0; curves do not blend yet - [5110] Invalid curve arguments — a raw client sent the wrong number of values
- [5109] Invalid curve —
normalis zero,centeris not in the circle's plane (through the start, at right angles tonormal), the start is the centre, orturnsis 0 or not finite - [5101] Target out of reach — the arm cannot reach the target pose
- [5102] Path only partly reachable — the arm cannot reach a pose on the way to the target
- [5103] Path too close to a limit — a pose on the path needs a joint outside its limits
- [5105] Configuration flip on the path — the arm would have to change its configuration on the way, for example flip its wrist
- [5104] Solution misses the pose — the joint solution misses a pose on the path
- [5107] Tool strays from the path — the tool would stray from the curve, usually near a singularity
- [5010] Requested duration too short —
durationis shorter than the limits allow - [5011] Invalid duration —
durationis 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: center or normal does not have 3 values.
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]):