BB.Ufactory.Actuator.Cartesian (bb_ufactory v0.2.0)

Copy Markdown View Source

Cartesian-space position actuator for xArm arms.

Sends end-effector pose commands (x, y, z, roll, pitch, yaw) directly to the arm using register 0x15 (MOVE_LINE). The arm's own controller solves inverse kinematics internally, so no IK computation is needed here.

Unlike BB.Ufactory.Actuator.Joint, this actuator bypasses the ETS batch loop — frames are forwarded immediately to the controller via BB.Process.call/3 and dispatched to the hardware on the same call.

Command Interface

The actuator declares BB.Ufactory.Message.Command.CartesianMove via BB.Actuator.command_payloads/1, so pose commands travel through BB's gated command pipeline (armed check, refusals reaching the caller):

alias BB.Ufactory.Message.Command.CartesianMove

msg = BB.Message.new!(CartesianMove, :tcp,
  x: 300.0, y: 0.0, z: 400.0, roll: 3.14159, pitch: 0.0, yaw: 0.0)

# Synchronous — learn whether the arm accepted the command:
{:ok, :accepted} = BB.call(MyRobot, :tcp, {:command, msg})

# Fire-and-forget:
BB.cast(MyRobot, :tcp, {:command, msg})
  • x, y, z — position in millimetres
  • roll, pitch, yaw — orientation in radians

speed and acceleration default to the values configured in options_schema and can be overridden per-command in the payload.

Legacy cast interface (deprecated)

The pre-0.2 raw cast is still accepted for backwards compatibility: it logs a deprecation warning on every use and is dropped when the robot is not armed — prefer CartesianMove:

BB.Process.cast(robot, :cartesian, {:move_cartesian, {x, y, z, roll, pitch, yaw}})
BB.Process.cast(robot, :cartesian, {:move_cartesian, pose, speed, accel})