ToppleBot

Summary

The ToppleBot project builds off of related momentum wheel cubes like Astrobee, Cubli, and REM-RC's Balancing Cube. This project served as my senior design projecy for my Engineering Physics Bachelor's degree.

As the software and communications engineer I implementied a ROS based system using Micro-ROS to interface with the onboard microcontroller, an ESP32. Through this implementation, I sharpened my skills in C/C++, controls, and ROS2. My current project repos can be found here and here, with support for publishing IMU messages to ROS and visualizing orientation in RViz.

Balancing Control and Visualization

To accomodate the new software stack and IMU, I had to write my own controller. In the interest of time, a simple PID with low-pass filters on the error quaternion was developed and deployed on the hardware. After quite a bit of tuning, we got a pretty nice demonstration:

Odometry System and Visualization

I also got an odometry system up and running, based solely off the IMU data. Modeling each corner of the cube as a node, I dynamically update their positions using the quaternion from the AHRS algorithm. Then, using the projected gravity vector, I determine which node is the "balancing node" which allows me to determine the translation from the previous balancing node to the current one. I can then determine the position of the model and it's orientation and display it through RViz. Initially the visualization updated slowly and often mispresented the system orientation. Through multi-threading I was able to combat the delays and get another nice demonstration.

Project Website

Refer to the project website to create your own ToppleBot!