You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
7.8 KiB
135 lines
7.8 KiB
|
|
|
|
|
|
// tip dip pip mcp
|
|
finger_h = 0.1*[
|
|
[ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ]];
|
|
finger_o = [
|
|
[ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ], [ 10, 15, 18, 28 ]];
|
|
finger_translate = [
|
|
[ 20, 40, 40 ], [ 23, 20, 40 ], [ 20, 40, 35 ], [ 20, 40, 35 ], [ 20, 40, 35 ]];
|
|
finger_max_angles = [[ [-5,85], [-5,90], [-5,70] ],[ [-5,85], [-5,90], [-5,70] ],[ [-5,85], [-5,90], [-5,70] ],[ [-5,85], [-5,90], [-5,70] ],[ [-5,85], [-5,90], [-5,70] ]];
|
|
finger_offset_trans_from_index=[[-20,0,-40],[0,0,0],[-23,3,3],[-43,2,1],[-64,0,0]];
|
|
finger_offset_rot_from_index=[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]];
|
|
|
|
finger_curr_angles = [[0,10,0],[0,10,0],[0,10,0],[0,10,0],[0,10,0]];
|
|
|
|
// uncoment to do sync movement
|
|
//finger_curr_angles = [ calc_angles(0,abs($t-0.5)*2),calc_angles(0,abs($t-0.5)*2),calc_angles(0,abs($t-0.5)*2),calc_angles(0,abs($t-0.5)*2),calc_angles(0,abs($t-0.5)*2)];
|
|
// sanity check
|
|
|
|
|
|
|
|
module finger(idx,finger_curr_angles,show_blob_only) {
|
|
|
|
if(len(finger_h[idx]) != len(finger_translate[idx]) +1)
|
|
echo("finger_h does not match to finger_translate");
|
|
if(len(finger_h[idx]) != len(finger_max_angles[idx]) +1)
|
|
echo("finger_h does not match to finger_max_angles");
|
|
if(len(finger_max_angles[idx][0]) != 2)
|
|
echo("finger_max_angles does not have 2 entries");
|
|
|
|
translate(finger_offset_trans_from_index[idx])
|
|
rotate(finger_offset_rot_from_index[idx])
|
|
{
|
|
for(r_idx = [0:len(finger_translate[idx])-1])
|
|
{
|
|
rotate([r_idx<=2 ? finger_curr_angles[2] : 0,0,0])
|
|
translate([0,0,r_idx<2 ? finger_translate[idx][2] : 0])
|
|
rotate([r_idx<=1 ? finger_curr_angles[1] : 0,0,0])
|
|
translate([0,0,r_idx<1 ? finger_translate[idx][1] : 0])
|
|
rotate([r_idx<=0 ? finger_curr_angles[0] : 0,0,0])
|
|
//translate([0,0,r_idx<0 ? finger_translate[idx][0] : 0])
|
|
if (show_blob_only == true) {
|
|
if (r_idx == 0)
|
|
translate([0,0,finger_translate[idx][0]])
|
|
sphere(d=2);
|
|
}else {
|
|
cylinder(d2=finger_h[idx][r_idx],d1=finger_h[idx][r_idx+1] , h=finger_translate[idx][r_idx]);
|
|
}
|
|
}
|
|
//translate([-20,-15,-20]) cube([40,30,20]);
|
|
sphere(d=10);
|
|
}
|
|
}
|
|
|
|
|
|
translate([140,125,120])
|
|
rotate([-25,17+6,05])
|
|
rotate([-90,0,0])
|
|
rotate([0,0,180])
|
|
{
|
|
translate([20-100,0,-50])
|
|
cube([100,5,50]);
|
|
for(idx=[1:4]) {
|
|
finger(idx,finger_curr_angles[idx]);
|
|
|
|
for (i=[0:0.01:1])
|
|
finger(idx,calc_angles(idx,i),show_blob_only=true);
|
|
}
|
|
}
|
|
|
|
function calc_angles(idx,t)=[
|
|
finger_max_angles[idx][0][1] + t * (finger_max_angles[idx][0][0] - finger_max_angles[idx][0][1]),
|
|
finger_max_angles[idx][1][1] + t * (finger_max_angles[idx][1][0] - finger_max_angles[idx][1][1]),
|
|
finger_max_angles[idx][2][1] + t * (finger_max_angles[idx][2][0] - finger_max_angles[idx][2][1]),
|
|
];
|
|
|
|
function pi()=3.14159265358979323846;
|
|
|
|
|
|
// scale since patent is in inch
|
|
scale([25.4,25.4,25.4])
|
|
{
|
|
d_t=0.01;
|
|
d_1a=0.01;
|
|
d_1b=0.1;
|
|
d_2=0.01;
|
|
d_3=0.01;
|
|
d_4a=0.01;
|
|
d_4b=0.01;
|
|
// finger thumb
|
|
color("magenta")hull() { translate([2.660100,3.769870,2.090850]) sphere(d_t); translate([2.666560,3.808380,1.894690]) sphere(d_t); }
|
|
color("magenta")hull() { translate([1.973320,3.510470,2.010680]) sphere(d_t); translate([1.980350,3.553940,1.815560]) sphere(d_t); }
|
|
color("magenta")hull() { translate([2.245370,2.853450,1.888880]) sphere(d_t); translate([2.261190,2.888580,1.692630]) sphere(d_t); }
|
|
color("magenta")hull() { translate([2.534610,2.192950,1.774750]) sphere(d_t); translate([2.534420,2.232090,1.578620]) sphere(d_t); }
|
|
color("magenta")hull() { translate([3.121180,2.762650,1.907540]) sphere(d_t); translate([3.118430,2.801320,1.711340]) sphere(d_t); }
|
|
color("magenta")hull() { translate([3.798070,3.053630,1.922090]) sphere(d_t); translate([3.787220,3.098700,1.727540]) sphere(d_t); }
|
|
// finger 1
|
|
color("red")hull() { translate([5.626412,4.890490,4.921143]) sphere(d_1a); translate([3.603139,5.951178,1.756010]) sphere(d_1a); }
|
|
color("red")hull() { translate([3.601304,5.185127,1.597157]) sphere(d_1a); translate([5.626412,4.890490,4.921143]) sphere(d_1a); }
|
|
color("red") hull() { translate([5.626412,4.859049,4.921143]) sphere(d_1a); translate([3.680820,4.407240,1.571830]) sphere(d_1a); }
|
|
color("red") hull() { translate([3.686250,6.574620,2.042010]) sphere(d_1a); translate([5.626412,4.890490,4.921143]) sphere(d_1a); }
|
|
|
|
color("green")hull() { translate([4.324486,6.084067,1.400235]) sphere(d_1b); translate([5.476960,5.040864,4.524379]) sphere(d_1b); }
|
|
color("green")hull() { translate([5.476960,5.040864,4.524379]) sphere(d_1b); translate([4.328402,5.307730,1.240122]) sphere(d_1b); }
|
|
color("green")hull() { translate([4.391585,4.517622,1.249485]) sphere(d_1b); translate([5.476960,5.040864,4.524379]) sphere(d_1b); }
|
|
color("green")hull() { translate([4.510779,3.754514,1.427841]) sphere(d_1b); translate([5.476960,5.040864,4.524379]) sphere(d_1b); }
|
|
color("green")hull() { translate([5.476960,5.040864,4.524379]) sphere(d_1b); translate([4.380041,6.806573,1.721562]) sphere(d_1b); }
|
|
|
|
|
|
// finger 2
|
|
color("blue")hull() { translate([5.614666,5.194831,3.515830]) sphere(d_2); translate([5.065645,6.200934,1.067919]) sphere(d_2); }
|
|
color("blue")hull() { translate([5.080251,5.408403,0.874860]) sphere(d_2); translate([5.614666,5.194831,3.515830]) sphere(d_2); }
|
|
color("blue")hull() { translate([5.614666,5.194831,3.515830]) sphere(d_2); translate([5.143544,4.896416,0.922400]) sphere(d_2); }
|
|
color("blue")hull() { translate([5.249757,3.838946,1.206208]) sphere(d_2); translate([5.614666,5.194831,3.515830]) sphere(d_2); }
|
|
color("blue")hull() { translate([5.101057,6.901806,1.483988]) sphere(d_2); translate([5.614666,5.194831,3.515830]) sphere(d_2); }
|
|
|
|
// finger 3
|
|
color("brown")hull() { translate([6.306084,5.091255,4.240877]) sphere(d_3); translate([5.889712,6.192233,1.070680]) sphere(d_3); }
|
|
color("brown")hull() { translate([5.915799,5.415294,0.897474]) sphere(d_3); translate([6.306084,5.091255,4.240877]) sphere(d_3); }
|
|
color("brown")hull() { translate([6.306084,5.091255,4.240877]) sphere(d_3); translate([5.963534,4.620381,0.909720]) sphere(d_3); }
|
|
color("brown")hull() { translate([6.030270,3.851587,1.106739]) sphere(d_3); translate([6.306084,5.091255,4.240877]) sphere(d_3); }
|
|
color("brown")hull() { translate([5.886720,6.908103,1.419731]) sphere(d_3); translate([6.306084,5.091255,4.240877]) sphere(d_3); }
|
|
|
|
// finger 4
|
|
color("gray")hull() { translate([6.736145,5.156350,0.989659]) sphere(d_4a); translate([7.085053,4.987385,4.453756]) sphere(d_4a); }
|
|
color("gray")hull() { translate([7.085053,4.987385,4.453756]) sphere(d_4a); translate([6.777004,4.371971,1.036648]) sphere(d_4a); }
|
|
color("gray")hull() { translate([6.708940,6.659750,1.418630]) sphere(d_4a); translate([7.085053,4.987385,4.453756]) sphere(d_4a); }
|
|
color("gray")hull() { translate([6.833560,3.618950,1.257760]) sphere(d_4a); translate([7.085053,4.987385,4.453756]) sphere(d_4a); }
|
|
|
|
color("cyan")hull() { translate([7.569335,6.085933,1.084243]) sphere(d_4b); translate([7.736480,5.132073,3.684937]) sphere(d_4b); }
|
|
color("cyan")hull() { translate([7.736480,5.132073,3.684937]) sphere(d_4b); translate([7.606606,5.316667,0.918996]) sphere(d_4b); }
|
|
color("cyan")hull() { translate([7.654340,4.532530,0.976580]) sphere(d_4b); translate([7.736480,5.132073,3.684937]) sphere(d_4b); }
|
|
color("cyan")hull() { translate([7.545530,6.778350,1.459020]) sphere(d_4b); translate([7.736480,5.132073,3.684937]) sphere(d_4b); }
|
|
}
|