diff --git a/hardware/parts/BOM.md b/hardware/parts/BOM.md new file mode 100644 index 0000000..d19601f --- /dev/null +++ b/hardware/parts/BOM.md @@ -0,0 +1,8 @@ +| Part Name | Quantity v1 | Quantity v2 | Note | +| --------------:|:-----------:|:-----------:|:--------:| +| base | 1 | 1 | | +| U_horn_to_horn | 1 | 1 | | +| horn_to_horn | 2 | 2 | | +| three_ollo | 2 | 0 | | +| side_to_side | 0 | 2 | | +| pen_holder | 1 | 1 | Optional | diff --git a/hardware/parts/U_horn_to_horn.scad b/hardware/parts/U_horn_to_horn.scad new file mode 100644 index 0000000..f368f90 --- /dev/null +++ b/hardware/parts/U_horn_to_horn.scad @@ -0,0 +1,5 @@ +include <../poppy_4dof_arm_mini_def.scad> + +use <../robotis-scad/frames/U_horn_to_horn_frame.scad>; + +U_horn_to_horn_frame(A); diff --git a/hardware/parts/base.scad b/hardware/parts/base.scad new file mode 100644 index 0000000..25ab937 --- /dev/null +++ b/hardware/parts/base.scad @@ -0,0 +1,5 @@ +include <../poppy_4dof_arm_mini_def.scad> + +use <../specific_frames/base_frame.scad>; + +circular_base_frame(BaseRadius, BaseHeight); diff --git a/hardware/parts/generate_stl.sh b/hardware/parts/generate_stl.sh index b11a65f..8ae974a 100755 --- a/hardware/parts/generate_stl.sh +++ b/hardware/parts/generate_stl.sh @@ -15,6 +15,21 @@ scadArg="\$fn=$fn" # create the stl folder if it does not exist mkdir -p stl; -# should be automated for all file in the folder -echo "Generating partName..." -openscad -o stl/partName.stl partName.scad -D $scadArg +# should be automated +echo "Generating base..." +openscad -o stl/base.stl base.scad -D $scadArg + +echo "Generating side_to_side..." +openscad -o stl/side_to_side.stl side_to_side.scad -D $scadArg + +echo "Generating U_horn_to_horn..." +openscad -o stl/U_horn_to_horn.stl U_horn_to_horn.scad -D $scadArg + +echo "Generating horn_to_horn..." +openscad -o stl/horn_to_horn.stl horn_to_horn.scad -D $scadArg + +echo "Generating three_ollo..." +openscad -o stl/three_ollo.stl three_ollo.scad -D $scadArg + +echo "Generating pen_holder..." +openscad -o stl/pen_holder.stl pen_holder.scad -D $scadArg diff --git a/hardware/parts/horn_to_horn.scad b/hardware/parts/horn_to_horn.scad new file mode 100644 index 0000000..8da0e33 --- /dev/null +++ b/hardware/parts/horn_to_horn.scad @@ -0,0 +1,6 @@ +include <../poppy_4dof_arm_mini_def.scad> +include <../robotis-scad/ollo/ollo_def.scad> + +use <../robotis-scad/frames/horn_to_horn_frame.scad>; + +horn_to_horn_side_branch(C); diff --git a/hardware/parts/pen_holder.scad b/hardware/parts/pen_holder.scad new file mode 100644 index 0000000..7923681 --- /dev/null +++ b/hardware/parts/pen_holder.scad @@ -0,0 +1,5 @@ +include <../poppy_4dof_arm_mini_def.scad> + +use <../specific_frames/pen_holder_frame.scad>; + +pen_holder_frame(D); diff --git a/hardware/parts/side_to_side.scad b/hardware/parts/side_to_side.scad new file mode 100644 index 0000000..49b078f --- /dev/null +++ b/hardware/parts/side_to_side.scad @@ -0,0 +1,5 @@ +include <../poppy_4dof_arm_mini_def.scad> + +use <../robotis-scad/frames/side_to_side_frame.scad>; + +side_branch(B2); diff --git a/hardware/parts/three_ollo.scad b/hardware/parts/three_ollo.scad new file mode 100644 index 0000000..861e0b0 --- /dev/null +++ b/hardware/parts/three_ollo.scad @@ -0,0 +1,5 @@ +include <../poppy_4dof_arm_mini_def.scad> + +use <../robotis-scad/frames/three_ollo_frame.scad>; + +three_ollo_side_branch(B); diff --git a/hardware/poppy_4dof_arm_mini.scad b/hardware/poppy_4dof_arm_mini.scad new file mode 100644 index 0000000..1ca1b2e --- /dev/null +++ b/hardware/poppy_4dof_arm_mini.scad @@ -0,0 +1,79 @@ +include +include +include + +use ; + +use ; +use ; + +use ; +use ; +use ; +use ; + +use ; + + +module poppy_4dof_arm_mini_v1() { + circular_base_frame(BaseRadius, BaseHeight); + xl320(); + translate_to_xl320_top() + verticalize_U_horn_to_horn_frame(A){ + U_horn_to_horn_frame(A); + xl320_two_horns(); + translate_to_box_back() + translate([0,OlloSpacing/2,0]) + rotate([180,90,0]) + add_three_ollo_frame(B) + rotate([0,-90,0]) + translate([0,MotorLength-MotorAxisOffset-ollo_nLayer_thickness(1),0]){ + xl320_two_horns(); + rotate([0,-90,90]) + add_horn_to_horn_frame(C) + rotate([180,-90,0]){ + xl320_two_horns(); + translate_to_box_back() + translate([0,OlloLayerThickness,0]) + rotate([0,90,180]) + pen_holder_frame(D); + } + } + } +} + +module poppy_4dof_arm_mini_v2() { + circular_base_frame(BaseRadius, BaseHeight); + xl320(); + translate_to_xl320_top() + verticalize_U_horn_to_horn_frame(A){ + U_horn_to_horn_frame(A); + xl320_two_horns(); + rotate([180,0,0]) + add_side_to_side_frame(B2) + rotate([0,-180,0]){ + xl320_two_horns(); + rotate([0,-90,90]) + add_horn_to_horn_frame(C) + rotate([180,-90,0]){ + xl320_two_horns(); + translate_to_box_back() + translate([0,OlloLayerThickness,0]) + rotate([0,90,180]) + pen_holder_frame(D); + } + } + } +} +// Testing +echo("##########"); +echo("In poppy_4dof_arm_mini.scad"); +echo("This file should not be included, use ''use '' instead."); +echo("##########"); + +p = 1; +if (p==1) { + poppy_4dof_arm_mini_v1(); + translate([100,0,0]) + poppy_4dof_arm_mini_v2(); +} diff --git a/hardware/poppy_4dof_arm_mini_def.scad b/hardware/poppy_4dof_arm_mini_def.scad new file mode 100644 index 0000000..3989b69 --- /dev/null +++ b/hardware/poppy_4dof_arm_mini_def.scad @@ -0,0 +1,12 @@ +include +include +include + +BaseRadius = CircularBaseFrameRadius; +BaseHeight = CircularBaseFrameHeight+FrameTolerance; + +A = 25; +B = 51; +B2 = 81; +C = 102; +D = OlloSpacing+FrameTolerance; diff --git a/hardware/specific_frames/base_frame.scad b/hardware/specific_frames/base_frame.scad new file mode 100644 index 0000000..99ad9c1 --- /dev/null +++ b/hardware/specific_frames/base_frame.scad @@ -0,0 +1,65 @@ +include + +include <../robotis-scad/frames/frame_def.scad> + +include <../robotis-scad/dynamixel/xl320_def.scad> +include <../robotis-scad/ollo/ollo_def.scad> +include <../robotis-scad/ollo_segments/ollo_segments_def.scad> + +use <../robotis-scad/ollo/ollo_tools.scad> +use <../robotis-scad/ollo_segments/ollo_straight_segment.scad> +use <../robotis-scad/ollo_segments/ollo_elbow_segment.scad> +use <../robotis-scad/ollo_segments/ollo_xl320_segment.scad>; + +use <../MCAD/rotate.scad>; + +module side_branch(height, nLayer, width) { + thickness = ollo_segment_thickness(nLayer); + + rotate([0,0,90]) + translate([0,-1.5*OlloSpacing,0]) + ollo_xl320_side_start_segment(nLayer, width); + translate([0, width/2, 0]) + ollo_straight_segment(height-width/2, nLayer, 4*OlloSpacing); +} + +module base_frame(height, nLayer=1, width=OlloSegmentWidth, tolerance=FrameTolerance) { + + thickness = ollo_segment_thickness(nLayer); + + translate([0, -1.5*OlloSpacing, 0]) + rotate([-90,0,90]) { + translate([0,0,-MotorWidth/2-thickness/2-tolerance]) + side_branch(height, nLayer, width); + mirror([0,0,1]) + translate([0,0,-MotorWidth/2-thickness/2-tolerance]) + side_branch(height, nLayer, width); + } +} + +module circular_base_frame(radius=CircularBaseFrameRadius, height=CircularBaseFrameHeight, nLayer=1, width=OlloSegmentWidth) { + + thickness = ollo_segment_thickness(nLayer); + + base_frame(height+thickness); + translate([0,0,-height-thickness]) + cylinder(r=radius, h=thickness); + +} + +// Testing +echo("##########"); +echo("In base_frame.scad"); +echo("This file should not be included, use ''use '' instead."); +echo("##########"); + +use <../robotis-scad/dynamixel/xl320.scad> + +p = 1; +nLayer = 1; +if (p==1) { + + circular_base_frame(); + xl320(); + +} diff --git a/hardware/specific_frames/pen_holder_frame.scad b/hardware/specific_frames/pen_holder_frame.scad new file mode 100644 index 0000000..0864f2f --- /dev/null +++ b/hardware/specific_frames/pen_holder_frame.scad @@ -0,0 +1,39 @@ +include + +include <../robotis-scad/frames/frame_def.scad> +include <../robotis-scad/dynamixel/xl320_def.scad> +include <../robotis-scad/ollo_segments/ollo_segments_def.scad> + +use <../robotis-scad/frames/U_three_ollo_to_horn_frame.scad> +use <../robotis-scad/ollo_segments/ollo_straight_segment.scad> +use <../segment-scad/elliptic_segment.scad> + +use <../MCAD/rotate.scad>; + +module pen_holder_frame(length=OlloSpacing+FrameTolerance, innerDiameter=PenHolderInnerDiameter){ + + U_three_ollo_to_horn_frame(length, OlloLayerThickness/2); + + rotate([90,0,0]) + translate([0,-OlloSegmentWidth/2,-length+ollo_segment_thickness(1)/2]) + ollo_straight_segment(OlloSegmentWidth, 1, MotorHeight); + + rotate([90,0,0]) + translate([0,-OlloSegmentWidth/2,-innerDiameter/2-length]) + elliptic_segment(OlloSegmentWidth, width=innerDiameter+2*ollo_segment_thickness(1), heigth=innerDiameter+2*ollo_segment_thickness(1), wallThickness=ollo_segment_thickness(1)); +} + + +// Testing +echo("##########"); +echo("In U_three_ollo_to_horn_frame.scad"); +echo("This file should not be included, use ''use '' instead."); +echo("##########"); + +use <../robotis-scad/dynamixel/xl320.scad> + +p = 1; +if (p==1) { + /*xl320();*/ + pen_holder_frame(); +} diff --git a/hardware/specific_frames/specific_frame_def.scad b/hardware/specific_frames/specific_frame_def.scad new file mode 100644 index 0000000..1179540 --- /dev/null +++ b/hardware/specific_frames/specific_frame_def.scad @@ -0,0 +1,6 @@ +include <../robotis-scad/frames/frame_def.scad> + +CircularBaseFrameRadius = 50; +CircularBaseFrameHeight = MotorHeight/2; + +PenHolderInnerDiameter = 12;