Over the spring, from the beginning of March until the end of May, I focused on balancing Continuity. I tried many different approaches to gain experience and acquire critical thinking in selecting the best one.
- The first one is probably the most complex and common in robot control systems: Proportional Integral Derivative control, or PID. The balancing algorithm was working fine, as can be seen from this video. The PID control is not fine-tuned, but even without doing it, I immediately noticed something I didn't like: motors were weakening approaching the desired position, and losing torque. This behaviour is not normal and it might be caused by an incorrect setup of the power distribution system. Additionally, the servo motors were sometimes rotating to undesired positions, I guess due to overlapping signals (?), causing damage to the mechanical structure of the legs.
- The second approach, shown in this video, is based on Proportional control and pre-defined regions. This means that the legs are moved proportionally to the roll or pitch change in inclination, but are also limited by specific angle regions. By doing so, I could force the robot at a stakeholder-defined body angle, in every region of the angle values detected by the IMU. This method is very rigid but robust at the same time: because the robot uses flexible blades as feet and an orientable head with cameras, there's no need for the body to be perfectly oriented, as part of the vibrations and misalignment are absorbed/mitigated by either the flexible, passive blades or by the servo-controlled head.
I tried several variations of these methods, but I still have to make my choice. However, I tried to build on top of the second approach, moving the balancing on a dedicated thread, and higher-level commands on another. One example I'm working on is a foot-lifting exercise, shown in this video, where the robot lifts on foot if and only if the equilibrium is on point.
All these tests were run with an open-loop system: in other words, I could not get any feedback from the legs, to understand if the feet of the robot were touching the ground. This will be fixed by introducing force pressure sensors.