An actuator that uses a Feetech controller to drive a serial bus servo.
This actuator derives its configuration from the joint constraints defined in the robot:
- Position limits from
joint.limits.lowerandjoint.limits.upper - Velocity limit from
joint.limits.velocity - Position range maps to the servo's goal_position register
When initialised, the actuator:
- Disables torque on the servo
- Registers with the controller, receiving the shared ETS table reference
- Subscribes to position commands
When a position command is received, the actuator:
- Clamps the position to joint limits
- Converts to servo position units (0-4095 for 360 degrees)
- Writes goal_position and goal_speed to the controller's ETS table
- Publishes a
BB.Message.Actuator.BeginMotionmessage
The controller picks up pending commands on its next loop tick and batches them
into efficient sync_write operations on the serial bus.
Example DSL Usage
controller :feetech, {BB.Servo.Feetech.Controller,
port: "/dev/ttyUSB0",
baud_rate: 1_000_000
}
joint :shoulder, type: :revolute do
limit lower: ~u(-90 degree), upper: ~u(90 degree), velocity: ~u(60 degree_per_second)
actuator :servo, {BB.Servo.Feetech.Actuator, servo_id: 1, controller: :feetech}
end
Summary
Functions
Safety disarm callback.