A 3D robot head that your can control with your m̶i̶n̶d̶ programs.
Robots are cool, right? So a parametric model of a robot head where a user can adjust the size of various facial features must be super fly. At the very least it is Beautiful, Interesting, Useful. I’m not really sure how this topic popped into my head, but I am pretty pleased for the first thing I ever computationally modeled in 3D.
The code allows for the adjustment of 5 attributes: antenna height, antenna ball radius, eye diameter, the spacing between the eyes, and the hight of the mouth. I think that if animated these attributes, when manipulated programmatically, could resemble dialog, facial expressions, or even emotional states.
Code on GitHub: https://github.com/jeffcrossman/Parametric_Robot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | //////////////////////////////////////// // // By: Jeff Crossman // For: Golan Levin's IACD 2014 // Carnegie Mellon University // Title: Parametric Robot Head // /////////////////////////////////////// //////////////////////////////////////// // // // PARAMETRIC PARAMETERS // // // //////////////////////////////////////// AntennaHeight = 50; // Default: 50 AntennaBallRadius = 5; // Default: 5 EyeDiameter = 10; // Default: 10 EyeSpacingOffset = 0; // Default: 0 MouthHeight = 20; // Default: 20 ////////////// END ///////////////// // Head translate([10, 0, 0]){ difference() { // Base head cube([100, 50, 50]); // Mouth translate([21, 0, 0]){ cube([8, 10, MouthHeight]); } translate([31, 0, 0]){ cube([8, 10, MouthHeight]); } translate([41, 0, 0]){ cube([8, 10, MouthHeight]); } translate([51, 0, 0]){ cube([8, 10, MouthHeight]); } translate([61, 0, 0]){ cube([8, 10, MouthHeight]); } translate([71, 0, 0]){ cube([8, 10, MouthHeight]); } // Left Eye translate([20+EyeSpacingOffset, 4, 35]){ rotate(a=[90, 0, 0]) { cylinder(10, EyeDiameter, EyeDiameter, center=true); } } // Right Eye translate([80-EyeSpacingOffset, 4, 35]){ rotate(a=[90, 0, 0]) { cylinder(10, EyeDiameter, EyeDiameter, center=true); } } } } // Left Ear translate([5, 25, 25]){ rotate(a=[0, 90, 0]) { cylinder(10, 10, 10, center=true); } } translate([5, 25, (25+(AntennaHeight/2))]){ cylinder(AntennaHeight, 1, 1, center=true); } translate([5, 25, 25+AntennaHeight]){ sphere(AntennaBallRadius); } // Right Ear translate([115, 25, 25]){ rotate(a=[0, 90, 0]) { cylinder(10, 10, 10, center=true); } } translate([115, 25, (25+(AntennaHeight/2))]){ cylinder(AntennaHeight, 1, 1, center=true); } translate([115, 25, 25+AntennaHeight]){ sphere(AntennaBallRadius); } |