Optimizing a Model Trebuchet with Equations of Motion and Dimensional iteration
For the second project of this course, we were required to build a trebuchet that launched a rubber ball weighing 25 grams more than 10 meters. Although the trebuchet was relatively easy to design, analysis to optimize component dimensions proved to be the most difficult. Matlab was used for iterative optimization using equations of motion and a nested “for” loop to iterate component dimensions. This was an especially educational project as it combined classical dynamics, computerized iteration, and computer aided design.
Iterative analysis is a common method in design to optimize dimensions of a mechanical system. For a conventional trebuchet, there are 5 fundamental dimensions that can be varied to optimize launch distance. I decided to iterate the lengths of the small and larger portion of the main arm, defined as L and l in the script and labeled in the image above. These would be the most difficult to change after assembly, and seemed the most crucial to the trebuchet’s performance based on what I found online. Online, there are a lot of sources that claim the best ratio for these two distances, but I ended up using something considerably different based on the results of the iteration. For analysis, we were given the functions that define the equations of motion of the trebuchet and solve for launch distance, launch window, and reaction force on the main pivot axle. Launch distance is self explanatory, launch window is the time frame for the ball to release from its sling and travel its max distance (we want this to be as large as possible), and reaction force is the force exerted on the acrylic pivot axle. The goal was to vary the two dimensions 25 times, resulting in 625 total iterations that could be plotted against the three variables that were being optimized (although I was really only interested in launch distance).
The first portion of the script defines the time span of the EOM, all constant variables, and the initial, final, and increments of the two dimensions being iterated. It also globally defines L and l
The second portion of the script defines the parameters of the for loop, does any calculations that utilize the dimensions of the iterative variables, uses the ode45 function to solve the EOM, and calls any functions used to solve for the variables being optimized.
These three dimensional plots may look complex, but they’re really only stitching together the two arrays of 625 data points that pertain to the two length iterations and plotting them against the variable being optimized (also a 625 data point array). From the max launch distance plot, we can see that the optimal size for the small arm l is roughly .15 m while the max launch distance increases as the large arm L increases. Due to dimensional constraints, I was only able to make my the larger arm .55 m. As you can see, the code predicted a max launch distance of well above 30 m, which is madness for a trebuchet of this size. However, the only purpose of this iteration was to optimize arm dimensions to determine what would result in the best performance.
And here is a crappy out of focus video of a launch…
Adjustable launch pin. This can be tuned to optimize the launch angle of the ball. This is what I spent the most time tuning, as even a small angle change can cause the ball to leave its holder either too early or too late.
Axle brace and trigger mechanism (dubro pushrod with z bend). The 3D printed axle brace was crucial as any flex in the acrylic axle significantly reduces efficiency.
After minimal tuning and four pounds of weight, the trebuchet launched the projectile 17 m, fairly short of the school record of 21 m. The only flaw of this trebuchet was its size, considering launch distance would have increased significantly if the pivot height and large arm were increased. Building and optimizing a model trebuchet is a great way to explore the world of physics, classical mechanics, and design!