The Robotics & Mechatronics course at Michigan Tech uses open source hardware to teach the fundamentals of robotics in a very hands on lab based way.Â
In this course I learned about electronics communication methods, coordinate transformations, DH parameters, sensors, and furthered my programming skills by controlling a two wheeled balancing robot using C++ in Arduino IDE.
The final project involved controlling a two-wheeled robot that can control the length of each of its legs through a selected task from a list of tasks including, driving in a curve, disturbance rejection, driving up a ramp, and more.
The task my lab partner and I selected was getting the robot to stand up from a tipped over position. Once it balances crouched down, it stands up to its normal standing height.
In order to control the position of the robot and balance using just the wheels, we used an inner and an outer PID loop. the inner loop acts on the angle of the robot, balancing it and sending the final command to the wheels. The outer loop acts on the position of the robot, and gives a command angle to the inner loop, telling the robot to tilt in the direction it needs to move.
While tuning the robot, we noticed that PID gains used for one height did not work very well at other heights, because of this we decided to us an adaptable set of gains that were a function of robot height. This did not give incredible results, but they were acceptable for our purposes.