dd_controller
DifferentialDriveController
Bases: LocomotionController
Differential drive (DD) controller for controlling two independently controlled wheeled joints.
Each controller step consists of the following
- Clip + Scale inputted command according to @command_input_limits and @command_output_limits
- Convert desired (lin_vel, ang_vel) command into (left, right) wheel joint velocity control signals
- Clips the resulting command by the joint velocity limits
Source code in omnigibson/controllers/dd_controller.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
|
__init__(wheel_radius, wheel_axle_length, control_freq, control_limits, dof_idx, command_input_limits='default', command_output_limits='default')
Parameters:
Name | Type | Description | Default |
---|---|---|---|
wheel_radius
|
float
|
radius of the wheels (both assumed to be same radius) |
required |
wheel_axle_length
|
float
|
perpendicular distance between the two wheels |
required |
control_freq
|
int
|
controller loop frequency |
required |
control_limits
|
Dict[str, Tuple[Array[float], Array[float]]]
|
The min/max limits to the outputted control signal. Should specify per-dof type limits, i.e.: "position": [[min], [max]] "velocity": [[min], [max]] "effort": [[min], [max]] "has_limit": [...bool...] Values outside of this range will be clipped, if the corresponding joint index in has_limit is True. |
required |
dof_idx
|
Array[int]
|
specific dof indices controlled by this robot. Used for inferring controller-relevant values during control computations |
required |
command_input_limits
|
None or default or Tuple[float, float] or Tuple[Array[float], Array[float]]
|
if set, is the min/max acceptable inputted command. Values outside this range will be clipped. If None, no clipping will be used. If "default", range will be set to (-1, 1) |
'default'
|
command_output_limits
|
None or default or Tuple[float, float] or Tuple[Array[float], Array[float]]
|
if set, is the min/max scaled command. If both this value and @command_input_limits is not None, then all inputted command values will be scaled from the input range to the output range. If either is None, no scaling will be used. If "default", then this range will automatically be set to the maximum linear and angular velocities calculated from @wheel_radius, @wheel_axle_length, and @control_limits velocity limits entry |
'default'
|
Source code in omnigibson/controllers/dd_controller.py
compute_control(goal_dict, control_dict)
Converts the (already preprocessed) inputted @command into deployable (non-clipped!) joint control signal. This processes converts the desired (lin_vel, ang_vel) command into (left, right) wheel joint velocity control signals.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
goal_dict
|
Dict[str, Any]
|
dictionary that should include any relevant keyword-mapped goals necessary for controller computation. Must include the following keys: vel: desired (lin_vel, ang_vel) of the controlled body |
required |
control_dict
|
Dict[str, Any]
|
dictionary that should include any relevant keyword-mapped states necessary for controller computation. Must include the following keys: |
required |
Returns:
Type | Description |
---|---|
Array[float]
|
outputted (non-clipped!) velocity control signal to deploy to the [left, right] wheel joints |