Inverted Pendulum

Project Overview

For my internship in Summer-Fall 2023, I worked working on building an inverted pendulum. The goal of this project is to design a real world real-time control system to evaluate the performance of In-ConcReTes, a Byzantine Fault Tolerant key-value store.

Software Development

I worked on code for the In-ConcReTes protocol. This has included software integration with the pendulum system, and adding functionality. Recently I worked with the network stack for the protocol to add a reconnection feature to allow failed nodes on the distributed network to reconnect with peers.

This phase has allowed me to learn more about C++, with features such as template programming, working with TCP, threading and real-time systems.

Firmware Developent

I developed all the project firmware for the pendulum in C++ for a Raspberry Pi and for the Bluepill (STM32F103C). This included UART and I2C communication code, sensor filtration, motor control code, PID control and real-time telemetry interfaces so far.

In writing the firmware, I learned more about the I2C communication protocol and how Linux handles I2C communication through the SMBus interface. To create real time plotting, I learned more about the concept of pipes in Linux and how they can be used for interprocess communication so that I could communicate between the controller process to a separate plotting process in real time. I also experimented with developing firmware with FreeRTOS and STM32 to achieve concurrent real-time abilities.

Control System

I am completed the controls for the pendulum to achieve balancing capabilities. This has involved modelling the physical system to get a better understand of system dynamics and learning more about the specific use cases for various controllers such as LQR and PID.

In learning about controls through some independent research, I developed a better understanding of how control systems can be characterized as controllable or uncontrollable and how we can use Matlab to analyze and simulate a control system. This has allowed me to have a more systematic approach in developing the controller for my pendulum.

Electro-Mechanical Design and Build

To design and build the pendulum, I created a CAD model on OnShape as seen below. The design is largely inspired by an open-sourced pendulum design. Additionally, I sized and ordered appropriate mechanical and electrical components given the system specifications, built the structure and completed the electrical integration. Building the pendulum involved using 3D printers, laser cutters, soldering irons and other tools. The electrical integration phase included sizing the power supply, testing motor driver and various sensor circuits and planning wiring with modularity in mind.

Building the pendulum out has given me a better appreciation for various manufacturing techniques and when to use them. For example, while 3D printing is great when designing intricate and difficult to manfacture parts, the time delay associated with reprinting or iterating a part incentivizes using more traditional machine shop tools and materials such as sheet metal and MDF sheets. Additionally, I learned more about the importance of modularity in design and how it can make the build process much easier. Using aluminium extrusions for the frame allowed me to quickly change out specific substructures without having to take the entire pendulum apart.

Other Projects

Autonomous Treasure Retrieval Robot

A robot designed to navigate an obstacle course while retrieving objects for 2022 Annual Engineering Physics Robotics Competition

Learn more

2nd Place - Autonomous Driving Competition

I worked to train a rover to drive around a simulated road while detecting license plates of nearby vehicles, avoiding pedestrians and other moving vehicles.

Learn more