Luxo Jr. Animatronic
Personal Project · 2025 - present
Work in Progress
I started working on this project alongside my friend AJ Williams with the end goal of recreating the Pixar Intro in real life. Animatronic heads have been built before, but we were incredibly interested in capturing the jumping motion of the lamp. This was the main goal of our inital work on the project.
First, we CADed a quick prototype in onshape and laser cut it out of acryllic to get an inuitive feel for the jumping four bar geometry and test a few physics calculations. As expected, the initial design fell over during it's jump.
At the white board, we tried to create a physics model for the lamp. During a jump, the normal force and friction from the ground create a linear and angular momentum for the lamp. Our goal is to have a large upward diagonal linear momentum, with minimal angular momentum. Unfortunately, the moving center of mass caused a difficult issue in calculating the exact amount of angular momentum imbued on the lamp. We quickly realized that an accurate simulation would be much more useful in assisting our design than working from first principles.
Initial CAD:
First, We CADed a simple skeleton copying the geometry of a frame of the Pixar animation in Onshape with the goal of providing a simple test-bench for the simulation. The animation contained 3 degrees of freedom labeled in the image on the right. For our first "jump" we planned to fix DOF1 (with adjustable mounting holes) and release DOF2/3 at the same time. This would provide a minimal test for confirming the simulation matched reality.
Simulation with Tendons
We chose Mujoco as our simulation engine because it is optimized for RL. It's computation speed would allow us to sweep 100,000+ different spring/design options in the future to create a perfect jump. With the help of an open source converter, we imported our Onshape model with every pivot as a frictionless joint
At first, we modeled each spring as a Mujoco tendon with stiffness equal to that of a spring. We could "load" the jump by actuating each tendon, then disable the tendon for release. Our first simulated jumps fell flat on their face, just like our initial prototype so we formulated a strategy to create the perfect jump.
First Run through of the Simulation:
We ran the simulation sweeping over the following variables:
- Head weight (0 - 1lb via a steel plate in the lamp-shade)
- Base weight (0 - 1lb via lightening holes)
- Spring stiffness (20 - 90lbf/in based off McMaster)
- Initial angle
- Final angle
We optimized on three hueristics. First, jumping greater than 5" in heigt. Second, the "flattest" arc determined by a ratio of jump heigh to distance. Finally, the lowest maximum pitch at any point in the jump. This was the most important hueristic because it produced an incredibly stable jump with a low chance of falling over. Each variable exponentially increases the amount of configurations to check so we started with a coarse pass, then ran a finer pass. This gave us a fantastic
Simulation with Custom Spring Model:
Our first error was realizing that our "optimal jump" required a spring that didn't exist. Steel springs, the cost-effective high stiffness option, simply didn't have the throw we needed. Also, we found our simulation didn't mirror McMaster's specificiations.
As a solution, I coded a custom spring package that allowed us to model a spring and rope in series. This would allow us to vary the rope's length rather than using springs that didn't exist. Additionaly, we created a spreadsheet of all McMaster springs so the simulator could test different options.
With this new spring model, I also optimized the simulation to only test possible configurations initial/final angles for a given spring-rope system, disregarding cases that stretched the spring beyond it's rated limit or compressed it to less than it's length.
Results:
As you can see in the video on the right, our optimizations produced a jump similar to that in the video. The next step is was to make it in real life.
Our final changes to the CAD based on the simulation added cut-outs for the large springs, correctly weighted head/base plates, and appropriate hard stops. We also changed the locations of the spring attachment points to remove any neccessary string.
The release mechanism for the jump provided some trouble. We needed to release both four bars at the same time, without altering the course of the jump. The issue was that to get such a high jump, the bottom spring exterted almost 80lb of force in it's loaded position. We decided a dowel between the two fourbars would lock them in place and definitionally release the force at the exact same time. But, due to the large spring causing friction we couldn't release the dowel without pulling the lamp over.
We solved this problem both by decreasing friction with a small nylon sheet at each end of the dowel, and with a large extension to the dowel providing extra torque.
Our last major change was due to the simulation assuming static friction between the ground and the base of the lamp. To mimic this and to soften the landing we added rubber to the base of the lamp.
After finishing assembly we were shocked to find the jump closely mirrored the simulation. We had added mounting holes to the base to manually add extra weight to different sides for tuning rotation, but the simulation proved incredibly accurate.
Even though I'm studying abroad in Madrid, I'm currently working on adding motored winches to each stage, an active release mechanism, and an actuated head to look around.