by David Bershadsky and Alexander Kirillov

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

View all updates Oct 12, 2020

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.

About the Author

David Bershadsky

$2,308 raised

of $2,300 goal

100% Funded! Order Below

Product Choices



Includes one RoverWing board and connector set: one power cable ( XT30 to XT60 ), two motor cables (JST VH to bare wire).


RoverWing Top

One Top board for the RoverWing. It provides a power switch, small prototyping area, three NeoPixel LEDs, buttons, and a 3-line OLED display. Some soldering is required.


David Bershadsky and Alexander Kirillov

Alexander Kirillov is a professor of mathematics, but has been interested in robotics and electronics for many years. In 2008, he started a robotics team, Team Islandbots. After competing for a couple of years in First Lego League, Team Islandbots moved on to First Tech Challenge (FTC) and became one of the most successful teams on Long Island, twice advancing to the World Championship. David Bershadsky is an 18-year-old currently studying electrical engineering. He likes to spend time on projects such as building robots and designing PCBs. He got into robotics during 7th grade, when he joined the Islandbots FTC team 4137, coached by Alexander Kirillov.

David Bershadsky


Alexander "Shurik" Kirillov



PCB Fabrication & Assembly

See Also

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