Parametric Robot Head

A 3D robot head that your can control with your m̶i̶n̶d̶ programs.

Diagonal1
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

Available on Thingiverse

Front1

Front2

Front3

 

robotsketch

 

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);
}