At this time I am only aware of a single GoPiGo3 API that does not work as designed: EasyGoPiGo3().steer()
The method claims:
Each motor is assigned a percentage of the current speed value.
Instead it is coded to assign each motor the requested percentage of the NO_LIMIT_SPEED which is 1000 DPS.
self.set_motor_dps(self.MOTOR_LEFT, self.NO_LIMIT_SPEED * left_percent / 100)
self.set_motor_dps(self.MOTOR_RIGHT, self.NO_LIMIT_SPEED * right_percent / 100)
On my robots, any percentages above 45% will cause both motors to go their “full speed” which is between 425 and 450 DPS, and different for each motor. The red board will not be able to PID the requested speeds at all.
I submitted a pull request to fix it and a test program to confirm the fix. The request was rejected due to time needed to fully test the change.
This is the code that works:
# self.set_motor_dps(self.MOTOR_LEFT, self.NO_LIMIT_SPEED * left_percent / 100)
# self.set_motor_dps(self.MOTOR_RIGHT, self.NO_LIMIT_SPEED * right_percent / 100)
# Modified to WORK!! was percent of NO_LIMIT_SPEED
self.set_motor_dps(self.MOTOR_LEFT, self.speed * left_percent / 100)
self.set_motor_dps(self.MOTOR_RIGHT, self.speed * right_percent / 100)
Tagging @loringw in case a student tries using the steer() method.