Third Year
Stewart Platform
This project's most basic fundemental goal is to balance a ball on a plate, this is called a Stewart Platform. Or more accurately, in our design, it is a 3RRS parallel manipulator, since it only has 3 DOF compared to the more traditional 6 of the full stewart platform. Nonetheless the function is identical, and can actually be achived with as little as 2 DOF.
​
There are several challenges to tackle to get the entire system working, and a few I added just for fun :) . Note that this is a currentely on-going project so I will continue to update this page, but for now you can take a look at the work I have done in tackling some of the critical building blocks required to achieve full ball balancing. Also note code private for now, but will be shared soon!
​
Update project is nearing completion so here is a demo I recorded 1 week before my internal deadline!
Forward / Inverse Kinematics
Simulated Plant & Controller
Ball Position Sensing Via Force/Torque Sensor
Beam Balancer
This project actually served as a precursor to the full stewart platform, it can be thought of as 1D ball balancing and the stewart platform as 2D ball balancing (with some more fun stuff thrown in). Because of this this project was done fairly quickly, I went from determining the ideal link lengths, to 3D moddeling the mechanism, to finalizing the code in about 2 weeks. See an animation of the mechanism I designed below, and a video showing the code in action!
Segway System Modeling & Optimization
The objective of this project was to analyze, solve, and experimentally model the human transporter system. Ultimately, the project's goal is to optimize the model to maintain balance and maximize the distance traveled without falling without using any active control systems, purely by tuining system properties. We then compare the system models we derived and simulate in Simulink V.S. what an acusual simulation software, like SimulationX would show. We start by modeling the system's kinematics and kinetics resulting in the following differential equations:



Linearizing theese differential equations with a small angle aproximation for theta yields:
​


With the linearized model we can simulate this easily in simulink with the following block diagram. With the model accepting β and F_T as input parameters, the model was simulated by sweeping over a range of input combinations. A large range was first simulated with a low resolution, which narrowed the range of best input combination to a force of 160N to 180N which we then simulated in 0.5N discrete steps while varying the angle from 0.2 to 0.8 radians in 0.05 radians increments.
3D graphs were then plotted by taking x being input force, y being lean angle, β, and z being the distance travelled by the transporter. Point of global maxima was identified, which symbolizes the combination of input values the yields the farthest distance travelled by the transporter.


Next we wanted to see how our simulink results compared to the SimulationX results, so we modelled the segway in SimX, SimX does not require the system equations to be first derived, so this was a good sanity check that we derived the system equations correctly. Once again a broad then narrow search optimization technique was used and the results plotted in a 3D graph with the same axis as from Simulink. Some python code was written to parse, cleanup, and ultimately plot the SimX data.



The results of the simulations showed that the system is incredibly sensitive to changes in both thrust force and user lean angle. In Simulink, it was found that the optimal conditions for maximum distance travelled before tipping were at a thrust force of 170 N and a lean angle of -0.2 radians, resulting in a maximum distance of 12.3 m. In SimulationX, the maximum distance was achieved at a thrust force of 110 N and a beta angle of 11 degrees, yielding a maximum displacement of only 9.15 m. The difference between the two platforms highlights a key topic: while Simulink is great for theoretical models and analysis, SimulationX is more accurate as it accounts for physical interactions and constraints.
Two Axis Gantry Control

The project focused on building and programming an STM32 to control a two-axis machine over UART and with a potentiometer and implenting safety stops and homing. I implemented interrupts, to detect when motors had hit their endstops and prevent the machine from continuining in that direction. In addition UART, was used to control the position from the computer and an ADC was charecterized to enable precisely setting both axis position via a potentiometer. The final demo of this involved showing that the machine safely stopped at the endpoints, as well as a race to position the center of the machine over a target as precisely and fast as possible.





