A shield for Adafruit's Feather boards for making complex robots with ease

Oct 12, 2020

Project update 6 of 17

Video demos: PID, IMU, and course correction

by David Bershadsky

The campaign got some new pledges, and we are now in much better shape to meet our funding goal! We have started contacting the manufacturers for updated quotes on the board itself, the top, and other parts such as power adapter cable. Some of it we have already received and have started packaging.

For today’s update, we wanted to discuss in depth one of the most important features of RoverWing: course correction using IMU.

Course Correction using IMU

Making the robot go straight seems like the simplest task in the world: just give equal power to the left and right wheels. However, anyone who had tried LEGO or Arduino-powered robots immediately recognizes that it is not so: no two motors are exactly identical, and equal power doesn’t give you straight motion, causing a lot of frustration in introductory robotics classes and clubs. This is where RoverWing shines.

First of all, it uses an inertial motion unit (IMU), to keep track of robot orientation in space. The IMU does this by measuring rotation speed around all three axes and integrating it to find total turn. Since any sensor is subject to random errors (“noise”), special care must be taken to neutralize it; we spent a lot of time selecting the best IMU and best data fusion algorithm to use in our firmware. We settled on ICM-42605 chip from InvenSense and open-source Madgwick data fusion algorithm. As a result, we were able to reduce accumulated error (“drift”) to about 1-2 degree per minute - more than enough for a typical short robot task.

This allows us to use the robot orientation provided by IMU to correct the course: if RoverWing firmware sees that the robot is veering to the right, it gives more power to the right motor to get the robot back on track. It does so using an industry-standard PID feedback control loop; while the basics of PID are well-known, fine-tuning it and getting the coefficients just right is a task that requires a lot of experience. Our firmware does a decent job by setting all these coefficients based on just a few basic parameters the user has to provide such as motor RPM, wheel diameter, etc. But there is always room for improvement.

And finally, our experience in robotics has taught us that a common source of navigation errors is starting and stopping the robot: if you apply the brakes instantly, the robot will skid on the floor causing it to turn unpredictably. To fight that, our firmware gradually ramps up the speed when starting movement, and ramps the speed down at the end.

And all of it - just so that the user can write rover.goForward(0.4, 500) and have the robot move forward in a straight line for 50 cm without worrying about any of the issues above. Was it all worth it? Check the videos and see for yourself.

Adafruit’s SHOW and TELL

In other exciting news, we were on Adafruit’s SHOW and TELL!

We also ran through a demo of using the IMU for course correction here. You can check out our full segment below:

Campaign Extension

We’ve decided to extend the campaign until October 29th, so that we can keep sharing RoverWing with as many people as possible! We made this decision in consultation with Crowd Supply. If you have any questions or concerns, feel free to contact us.

Sign up to receive future updates for RoverWing.

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects