|
| | left_motor = left_motor |
| | right_motor = right_motor |
| | left_encoder = left_encoder |
| | right_encoder = right_encoder |
| | battery = battery |
| | eff = eff |
| | driving_mode = driving_mode |
| | setpoint = setpoint |
| | kp = kp |
| | ki = ki |
| | control_mode = control_mode |
| | left_sp_sh = left_sp_sh |
| | right_sp_sh = right_sp_sh |
| | left_eff_sh = left_eff_sh |
| | right_eff_sh = right_eff_sh |
| | start_time = start_time |
| | time_sh = time_sh |
| | left_pos_sh = left_pos_sh |
| | right_pos_sh = right_pos_sh |
| | left_vel_sh = left_vel_sh |
| | right_vel_sh = right_vel_sh |
| | mtr_enable = mtr_enable |
| | abort = abort |
| | motor_data_ready = motor_data_ready |
| | run_observer = run_observer |
| | left_controller = ClosedLoop(self.kp, self.ki, self.left_sp_sh, self.battery, effort_limits=(-100, 100)) |
| | right_controller = ClosedLoop(self.kp, self.ki, self.right_sp_sh, self.battery, effort_limits=(-100, 100)) |
| int | t0 = 0 |
| int | state = self.S0_INIT |
| | 0: INIT STATE -----------------------------------------------—
|
Handles reading from encoders and actuating motors, updates encoder position and velocity
Attributes:
left_motor: Motor object for the left motor
right_motor: Motor object for the right motor
left_encoder: Encoder object for the left motor
right_encoder: Encoder object for the right motor
battery: Battery object for voltage monitoring and droop compensation
eff: Share for desired effort command
mtr_enable: Share flag to enable/disable motors
motor_data_ready: Share flag indicating new motor data is available
run_observer: Share flag to enable/disable state estimator
abort: Share flag to abort motor operation
driving_mode: Share for driving mode (0=straight, 1=pivot, 2=arc)
setpoint: Share for desired setpoint (effort or velocity)
kp: Share for proportional gain of the controller
ki: Share for integral gain of the controller
control_mode: Share for control mode (0=effort, 1=velocity, 2=line follow)
start_time: Share for logging start time when motors are enabled
time_sh: Share for logging timestamps of motor data
left_pos_sh: Share for logging left encoder position
right_pos_sh: Share for logging right encoder position
left_vel_sh: Share for logging left encoder velocity
right_vel_sh: Share for logging right encoder velocity
left_sp_sh: Share for desired left motor setpoint (for closed-loop control)
right_sp_sh: Share for desired right motor setpoint (for closed-loop control)
left_eff_sh: Share for logging left motor effort command
right_eff_sh: Share for logging right motor effort command
| motor_task.MotorControlTask._split_setpoints |
( |
| self, |
|
|
| driving_mode_val, |
|
|
| setpoint ) |
|
protected |
HELPER FUNCTIONS
Split setpoints for left and right motors based on driving mode
mode 0: straight -> (spL, spR) = ( sp, sp)
mode 1: pivot -> (spL, spR) = ( sp, -sp)
mode 2: arc -> (spL, spR) = ( sp, sp*RATIO )