Free Drive Controller

Controller that allows to freely move the arm around manually. \

Note

This controller has to be used in combination with the Gravity Compensation Controller. Otherwise the arm will probably just fall down!

Parameters

Definition:

freedrive_controller:
  joints:
    type: string_array
    default_value: []
    description: "Names of joints used by the controller"
    validation:
      unique<>: null
  d_gains:
    type: double_array
    # These mini d gain values are needed because otherwise the controller on the drive will be disabled.
    default_value: [0.001, 0.001, 0.001, 0.001, 0.001, 0.001]
    read_only: true

joints | [Required]:
List of managed joints by the controller. Always needs to be a list of all joints of an arm in the order specified in the urdf

d_gains | [Optional]:
Allows to configure custom d-gains for the free drive mode. Higher gains mean more dampening.

Example:

A full example can be found in the dynaarm_demo repository.

freedrive_controller:
  ros__parameters:
    joints:
      - shoulder_rotation
      - shoulder_flexion
      - elbow_flexion
      - forearm_rotation
      - wrist_flexion
      - wrist_rotation

ROS Interface

None

Additional Information

The controller works by disableing the P and I gains of the motor controller running on each actuator. The D gain acts as a dampening against sudden motions. The Gravity Compensation Controller then simply provides a feed forward torque for each actuator that keeps the arm upright at its current position. By disturbing this stable state via a manual interaction it is possible to freely move the arm around.

References