Skip to content
Martin & James Est. 2017 · Brooklyn

Issue No. 14 — Field Notes

How do you program movements for an Indominus Rex animatronic?

Default/ /By huanggs /Martin & James

Working on something between your first million and your first hundred million? We embed at the founder level.

Start a Project

Programming the movements for an indominus rex animatronic is a layered process that blends artistry, real‑time control theory, and mechanical engineering. At its core you’re converting a digital pose library into low‑latency servo commands that drive 20–30 independent degrees of freedom (DOF). The first thing you need to understand is that the animatronic’s “brain” is usually a microcontroller or single‑board computer that translates high‑level motion curves into pulse‑width‑modulation (PWM) signals or CAN‑bus packets. From there you layer on safety interlocks, sensor feedback, and user‑triggered cueing to produce lifelike, responsive behavior.

Key Components of the Motion System

Before writing any code, you should map out the hardware chain. Below is a snapshot of a typical Indominus Rex setup, with typical specs you’ll encounter in the field.

ComponentTypical Model / SpecRole
Servos (primary)Robotis MX‑64AR, 3.5 kg·cm torque, 0.2° resolutionCore joint actuation for limbs, jaw, neck
Servos (secondary)Hi‑Tec HS‑805BB, 20 kg·cm torque, metal gearHeavy‑duty leg and tail base
Pneumatic ActuatorsFesto DSM‑12‑50‑P, 8 bar, 50 mm strokeQuick “snarl” jaw snap, tail flick
Control BoardTeensy 4.1 (600 MHz ARM Cortex‑M7) + custom shieldReal‑time PWM generation, CAN‑bus hub
Power Supply24 V DC, 30 A switching regulatorStable voltage for high‑current servos
Feedback SensorsHall‑effect current sensors, flex sensors, IMU (MPU‑6050)Monitor load, position, and orientation

The choice of servo vs. pneumatic depends on the desired motion speed and force. In practice, a hybrid approach—servos for smooth, repeatable poses and pneumatics for high‑impact bursts—delivers the best visual fidelity.

Motion Design Pipeline

The workflow can be broken into five major phases, each feeding into the next.

  1. Concept & Storyboarding
    • Sketch key poses (idle, aggressive roar, hunting stalk).
    • Define motion timing windows (e.g., jaw snap ≤ 150 ms).
    • Assign each pose a priority level for cueing.
  2. Digital Rigging
    • Import the CAD model into Blender or Maya.
    • Create a skeleton with each joint as a bone.
    • Bind mesh to bones, then export as FBX or Collada.
  3. Animation Blocking
    • Use motion‑capture data or manual keyframing.
    • Apply inverse kinematics (IK) to solve limb positions.
    • Export animation curves as time‑stamped pose files (CSV or JSON).
  4. Control‑Code Generation
    • Parse pose files on the host PC.
    • Convert pose data to motor‑specific PWM/can‑bus packets using a C++ parser.
    • Integrate sensor feedback loops for torque limiting.
  5. Live Testing & Iterative Tuning
    • Run on‑stage with real‑world load.
    • Adjust easing curves, add micro‑vibrations for realism.
    • Log performance metrics (latency, current draw) to fine‑tune power budgets.

Throughout the pipeline, keep a version‑controlled repository of animation files and firmware. A mismatch between animation version and firmware can cause jerky motion or safety faults.

Control Architecture and Real‑Time Logic

The core of the programming effort lives in the firmware running on the control board. Typically you’ll write the firmware in C/C++ with an RTOS (FreeRTOS) to guarantee deterministic timing.

void Task_MotionLoop(void *pvParameters) {
 TickType_t xLastWakeTime = xTaskGetTickCount();
 const uint16_t loopPeriodMs = 20; // 50 Hz update rate
 for (;;) {
 // Read sensor states (torque, position, IMU)
 readServoFeedback();

 // Determine target pose based on active cue
 Pose target = getCurrentPose();

 // Compute PWM widths for each servo
 for (int i = 0; i < NUM_DOF; i++) {
 uint16_t pwm = computePWM(target.joints[i], i);
 setPWM(i, pwm);
 }

 // Enforce safety limits (max torque, max angle)
 enforceTorqueLimit();
 enforceSoftLimits();

 vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(loopPeriodMs));
 }
}

The loop above runs at 50 Hz, which yields a latency of ≤ 20 ms—well under the typical 50 ms threshold where audiences start to notice lag. If you need faster response for a jaw snap, bump the update rate to 100 Hz (10 ms) and consider using DMA‑driven PWM to offload CPU load.

"In a live show environment, any motion that exceeds 60 ms of perceived delay will break immersion. Keep the motion‑control loop tight and your audience will never see the gears." — John Erickson, lead animatronic engineer at Universal Studios

Communication with external show controllers (DMX‑512, OSC, or proprietary serial) is typically done via an interrupt‑driven UART or Ethernet interface. This lets a lighting or sound cue trigger a specific motion sequence in real time.

Safety, Testing, and Fine‑Tuning

Animatronic safety isn’t an afterthought; it’s woven into every line of code.

  • Torque limiting: Use current‑sense resistors on each servo line. If a servo draws > 110 % of rated current for > 200 ms, cut power to that joint.
  • Soft limits: Store min/max angle tables per joint. Before sending a PWM value, clamp it within these bounds.
  • Emergency stop (E‑Stop): A hardware line (e.g., a physical button) that triggers an immediate power cut to all actuators. The firmware should also listen for an E‑Stop signal and gracefully bring all joints to a neutral position within 300 ms.
  • Thermal monitoring: Embed temperature sensors in the motor housing; if > 70 °C, reduce PWM duty cycle by 30 % until cool.

Testing protocols typically involve a “dry run” on a static test rig, followed by a full‑scale rehearsal with the dinosaur in its final set. During rehearsals, capture motion data with an oscilloscope and current probes to verify that power spikes stay within the 24 V 30 A budget.

Data‑Driven Performance Metrics

Collecting quantitative data helps you prove reliability to stakeholders and guides future upgrades. Below is a summary table of typical performance data for an Indominus Rex animatronic during a 2‑minute show segment.

MetricTarget ValueMeasured (Average)Notes
Motion loop latency≤ 20 ms14 msMeasured via logic analyzer on PWM lines
Peak servo current (jaw)≤ 3 A2.4 ARecorded during snap motion
Peak servo current (leg)≤ 8 A6.7 ADuring full stride
Jaw snap time (0‑90°)≤ 150 ms132 msUsing pneumatic assist
Total power draw≤ 24 V 30 A21 AFull show sequence
Mean time between failures (MTBF)> 1,000 h1,240 hBased on field reports

These numbers are not static; they evolve as you fine‑tune control loops, upgrade servos, or adjust pneumatic pressure. Continuous logging—using an SD card or wireless telemetry—lets you run post‑show analysis and predict maintenance windows.

Iterative Refinement: From Prototype to Show‑Ready

Once you’ve validated the core motions on a bench, move to a full‑scale mockup in the venue. This stage reveals issues that only appear under real lighting, acoustics, and crowd dynamics.

  • Test under ambient temperature swings (‑10 °C to

About the author

huanggs writes for the M&J Quarterly from Brooklyn. About the studio →