Motion Control Parameters (ArmControlOptions)#
ArmControlOptions is the section name used to correspond to the P6 navigation; the P7 SDK does not have a class with this
name. P7 divides motion options among five mutable dataclasses: JointMoveOptions, CartesianMoveOptions,
EEFMoveOptions, JointWaypointsMoveOptions, and CartesianWaypointsMoveOptions. The models validate some types and value
ranges, but the current control mode and specific method determine whether a field is actually sent. Successfully creating
an object does not mean that its parameter combination is suitable for the current robot arm.
Option Models#
| Type | Used By | Main Field Groups |
|---|---|---|
JointMoveOptions |
move_joint() |
Joint planning, Servo, MIT, and blocking fields |
CartesianMoveOptions |
Single Cartesian PTP/LIN/CIRCLE and pose Servo | Pose planning, OMPL, seed, collision, and blocking fields |
EEFMoveOptions |
move_eef() |
EEF CSP/MIT effort, torque, gain, and blocking fields |
JointWaypointsMoveOptions |
move_joint_waypoints() |
Per-segment joint planning, blending, seed, and sequence-completion fields |
CartesianWaypointsMoveOptions |
move_end_pose_waypoints() |
Per-segment Cartesian planning, blending, seed, and sequence-completion fields |
JointMoveOptions reads different fields in planning, Servo, and MIT modes. For example, planning uses the planning type,
scaling, and sampling parameters; Servo ignores these planning fields; and MIT uses torque, kp, and kd. See
API Reference and the individual motion-planning pages for the detailed matrix.
Checks Before Use#
- Check floating-point scalars and vector elements with
math.isfinite(); current range comparisons cannot reliably rejectNaN. - Check the lengths of
eff, seed, MIT, and EEF vectors before sending; model construction does not consistently check them. - A
Literaltype annotation is not complete runtime enum validation. Pass only the documentedmotion_typeand planner names. - The number of nonempty waypoint
segmentsmust equallen(waypoints) - 1, and every segment must use the samesampling_time. timeout_msbelongs to the motion method, not to the options, and does not equal actual trajectory execution time.
import math
def require_finite(values: list[float], name: str) -> None:
if not all(math.isfinite(float(value)) for value in values):
raise ValueError(f"{name} contains a non-finite value")
P7 Planning Names#
Single-joint planning uses "ptp" or "ompl". Single Cartesian PTP uses move_end_pose(); linear and circular motion
use the dedicated LIN and CIRCLE methods respectively. Cartesian waypoint segments use "ptp", "lin", or "ompl".
Select a specific OMPL planner through ompl_planner_type; do not put "rrt_connect" in motion_type.
Continue with PTP Point-to-Point Planning, LIN Linear Trajectory Planning, CIRC Circular Trajectory Planning, or Multi-Segment Trajectory Blending, as appropriate for the task.