ALEX HATTORI

View Original

Wheeled Biped Controls Update

I recently redid the Wheeled Biped controller and was able to get much better performance from it.

Here’s a short video showing some of the performance of the new balance/position controller.

It uses a PID controller to maintain its angle and 2 PD controllers to handle robot position, and yaw. Robot position is currently estimated using the wheel encoder so someday I may want to make a better estimation using the IMU (for the case of wheel slip). Yaw control uses the filtered angle from the IMU so it doesn’t seem to have much or any drift.

The position controller does take into account rollover so if the robot does travel 1.67e37 meters forward or backward the robot won’t freak out. The motor controller handles the first type of rollover by computing the multi-turn angle from the single turn encoder angle. It stores this as a float, but encodes this float as a uint (16 bits) with much smaller bounds (for resolution) through CAN communication. The F303 control board then receives the uint and handles the next case of rollover to keep track of a float precision wheel angle. Then the position PD loop considers the float rollover case for finding its error.

There’s also a PD controller for roll and the robot leans into turns by computing its turning radius (based on geometry and wheel velocities) and measuring its yaw velocity.

Lastly, I’ve worked on jumping a bit. There’s a state machine that’s triggered by a switch on the radio. Unfortunately the robot has very little control once in the air (1 DOF leg and low inertia wheels) so takeoff condition is quite important. Perhaps it needs a tail or reaction wheel some day. Or a 2 DOF leg would be pretty cool.

Lastly, I think a backflip may be physically possible. This video was taken during a jumping accident and so its not even an optimal backflip but the robot almost completes a full revolution (legs don’t tuck, wheels and legs are not commanding max torque).


Balance wise:

Previously I had been trying to use LQR and StateSpace control to control the pitch and position of the robot, but the results were not great. I think it’s likely the problem is with modelling (back from the matlab simulator) but I need to move the simulation to not-matlab.