top of page

Internship Blog #2 — Robotica Demo

  • asmartiba4
  • Mar 1, 2024
  • 1 min read

This robotic arm model includes rigging and constraints, which are mathematical rules affecting its movement.

The model has 5 control points with their own IK rules and constraints:

  • base

  • arm4

  • arm5

  • arm_target

  • rotation



Toggling arm5's rotation shows how constraints affect the pistons. I used useState and onChange to write these constraints and added them to the GUI.


arm5: {
      value: degToRad(0),
      min: degToRad(-100),
      max: degToRad(180),
      step: 0.01,
      onChange: (value) => {
        const newRotation = new THREE.Euler(0, value, 0);
        nodes.arm5.rotation.copy(newRotation);
        console.log("arm 5 rotation: ", nodes.arm5.rotation);
      },
    }

In Blender, the skeleton rigging moves all connected bones. In ThreeJS, I had to code these constraints manually. For arm5, the GUI slider ranges from min: -π to max: π.


While arm4 and arm5 movements were easy to define, the piston's rotation didn't work due to missing values on the web, though it did in Blender.

Blender's framework handles constraints differently than ThreeJS. In pose mode, movements differ from edit mode where the bone hierarchy explains why the web GUI didn't work.


Using Python, I can log the model's constraints to understand what needs to be fixed. Future research topics:

  • Skinning

  • Rigging

  • Inverse Kinematics

  • IK Constraints

  • IK Chaining


Conclusions:

Blender reads kinematics and links chains natively, but these values aren't exported to the web automatically. With help, I exported the necessary values.

Challenges:

New concepts like rigging, skinning, and IK chaining are challenging. External libraries like CCDIK solver have limitations. I'll explore other methods to display IK chaining on the web.

Copyright © 2025 - Asmar Tiba

  • GitHub
  • Facebook
  • LinkedIn
  • Instagram
bottom of page