diff --git a/README.md b/README.md index 11da11e..b5e19a9 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,4 @@ Still at a very preliminary, pre-prototype stage. Work is documented [here](http ## Copyright -Copyright © Simon Brooke, 2024-2025; may be used and modified under [Creative Commons Attribution-Share Alike](https://creativecommons.org/licenses/by-sa/4.0/deed.en) licence; but (currently) uses elements from [Pierre Rouzeau](https://rouzeau.net/)'s [BentSim](https://github.com/PRouzeau/BentSim) project, which is [GPL](https://github.com/PRouzeau/BentSim/blob/master/LICENSE) licensed. \ No newline at end of file +Copyright © Simon Brooke, 2024-2025; may be used and modified under [Creative Commons Attribution-Share Alike](https://creativecommons.org/licenses/by-sa/4.0/deed.en) licence; but (currently) uses elements from [Pierre Rouzeau](https://rouzeau.net/)'s [BentSim](https://github.com/PRouzeau/BentSim) project, which is [GPL](https://github.com/PRouzeau/BentSim/blob/master/LICENSE) licensed, and sprockets from [Hampus Andersson](https://www.thingiverse.com/haand001/designs)'s [Sprocket Generator V2](https://www.thingiverse.com/thing:3059422), which is licensed under [Creative Commons Attribution](https://creativecommons.org/licenses/by/4.0/). \ No newline at end of file diff --git a/model/Library/Bike_accessories.scad b/model/Library/BentSim/Bike_accessories.scad similarity index 100% rename from model/Library/Bike_accessories.scad rename to model/Library/BentSim/Bike_accessories.scad diff --git a/model/Library/Localization_macro.odt b/model/Library/BentSim/Localization_macro.odt similarity index 100% rename from model/Library/Localization_macro.odt rename to model/Library/BentSim/Localization_macro.odt diff --git a/model/Library/Mid_drives.scad b/model/Library/BentSim/Mid_drives.scad similarity index 100% rename from model/Library/Mid_drives.scad rename to model/Library/BentSim/Mid_drives.scad diff --git a/model/Library/Velo_rider.scad b/model/Library/BentSim/Velo_rider.scad similarity index 100% rename from model/Library/Velo_rider.scad rename to model/Library/BentSim/Velo_rider.scad diff --git a/model/Library/Z_library.scad b/model/Library/BentSim/Z_library.scad similarity index 100% rename from model/Library/Z_library.scad rename to model/Library/BentSim/Z_library.scad diff --git a/model/Library/flag_image.dxf b/model/Library/BentSim/flag_image.dxf similarity index 100% rename from model/Library/flag_image.dxf rename to model/Library/BentSim/flag_image.dxf diff --git a/model/Library/signature_PRZ_cut.dxf b/model/Library/BentSim/signature_PRZ_cut.dxf similarity index 100% rename from model/Library/signature_PRZ_cut.dxf rename to model/Library/BentSim/signature_PRZ_cut.dxf diff --git a/model/Library/SprocketGenerator2/LICENSE.txt b/model/Library/SprocketGenerator2/LICENSE.txt new file mode 100644 index 0000000..29fd471 --- /dev/null +++ b/model/Library/SprocketGenerator2/LICENSE.txt @@ -0,0 +1 @@ +This thing was created by Thingiverse user haand001 (Hampus Andersson), and is licensed under Creative Commons - Attribution \ No newline at end of file diff --git a/model/Library/SprocketGenerator2/README.txt b/model/Library/SprocketGenerator2/README.txt new file mode 100644 index 0000000..54c8edf --- /dev/null +++ b/model/Library/SprocketGenerator2/README.txt @@ -0,0 +1,4 @@ +Sprocket Generator V2 - OpenSCAD by haand001 on Thingiverse: https://www.thingiverse.com/thing:3059422 + +Summary: +This is a sprocket generator that is designed and coded to be easy to use, even if you are new to OpenSCAD. Customize your own sprocket according to your needs and export it directly to a .stl file. Slice it and print it!For example, you can change:Bore diameterTeeth countPitch, roller diameterToleranceThicknessShaft length and diameterNumber of holes evenly distributedand a lot more...Test it using the Customizer to the right --> !Use PETG or Nylon for best results with 100% infill, many wall layers and concentric filling setting.The code is generously commented and easy to understand for you to make your own adjustments if required by your specific application. All measurements is in millimeters.Enjoy! \ No newline at end of file diff --git a/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_10.scad b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_10.scad new file mode 100644 index 0000000..9478e8d --- /dev/null +++ b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_10.scad @@ -0,0 +1,166 @@ +/* + +Sprocket generator v2 + +This code is based on the code written by *Talon_1* who based his code on the work of +*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier +understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded +as a .STL file and 3D-printed directly using any slicing program. + +*/ + +////////////////////// +/* CHAIN-PARAMETERS */ +////////////////////// + +// THESE ARE FOR 25H/04C +roller_d = 4.1; +thickness = 2.9; +pitch = 6.35; +tolerance = 0.05; + +/////////////// +/* VARIABLES */ +/////////////// + +teeth = 10; + +// Shaft +bottom_shaft_d = 10; +bottom_shaft_h = 2; // = 0 to remove + +top_shaft_d = 10; +top_shaft_h = 3; // = 0 to remove + +toptop_shaft_d = 16; +toptop_shaft_h = 8; // = 0 to remove + +// Bore +hole_d = 8; + +// Holes +number_of_holes = 0; +hole_dia = 4; +hole_ring_dia = 40; + +/////////////////////// +// RENDERING QUALITY */ +/////////////////////// + +// HIGH : fs=0.25 : fa=3 : fn=0 +// LOW : fs=1 : fa=7 : fn=0 +fs = 0.25; // Minimum size of a fragment +fa = 1; // Minimum angle for a fragment +fn = 0; // Number of fragments (overrides fs & fa if non zero) + +/////////////// +/* MAIN CODE */ +/////////////// + +difference() +{ + // Create a union of four shapes, 3 cylinders and 1 sprocket + union() + { + // Create sprocket using the difined module + sprocket(teeth, roller_d, pitch, thickness, tolerance); + + // Create cylinder on front side of sprocket + translate([0, 0, thickness]) + cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on back side of sprocket + rotate([0,180]) + cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on top of the front side cylinder + translate([0, 0, thickness+top_shaft_h]) + cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Rest of shapes are removal of material + // Drills out the center hole with 1 mm extra in both directions + translate([0, 0, -bottom_shaft_h-1]) + { + cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Drills 'number_of_holes' many holes in a circle + angle_between_holes = 360/number_of_holes; + for(hole_angle = [0:360/number_of_holes:360]) + { + translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1]) + { + cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn); + } + } +} + +///////////////////// +/* SPROCKET MODULE */ +///////////////////// + +module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2) +{ + roller_radius = roller/2; //We need radius in our calculations, not diameter + distance_from_center = pitch/(2*sin(180/teeth)); + angle = (360/teeth); + + pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance))); + + difference() + { + union() + { + // Quality parameters + $fs = fs; + $fa = fa; + $fn = fn; + + // Create inner cylinder with radius = pitch_radius + cylinder(r=pitch_radius, h=thickness); + + // Create outer part of the teeth + for(tooth=[1:teeth]) + { + intersection() + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, 0]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=pitch-roller_radius-tolerance, h=thickness); + } + } + rotate(a=[0,0,angle*(tooth-0.5)]) + { + translate([distance_from_center,0,0]) + { + cylinder(r=pitch-roller_radius-tolerance,h=thickness); + } + } + } + } + } + + // Cuts away the inner groove between the teeth + for(tooth=[1:teeth]) + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, -1]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=roller_radius+tolerance, h=thickness+2); + } + } + } + } +} + + diff --git a/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_23.scad b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_23.scad new file mode 100644 index 0000000..fc714a8 --- /dev/null +++ b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_23.scad @@ -0,0 +1,166 @@ +/* + +Sprocket generator v2 + +This code is based on the code written by *Talon_1* who based his code on the work of +*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier +understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded +as a .STL file and 3D-printed directly using any slicing program. + +*/ + +////////////////////// +/* CHAIN-PARAMETERS */ +////////////////////// + +// THESE ARE FOR 25H/04C +roller_d = 4.1; +thickness = 2.9; +pitch = 6.35; +tolerance = 0.05; + +/////////////// +/* VARIABLES */ +/////////////// + +teeth = 23; + +// Shaft +bottom_shaft_d = 20; +bottom_shaft_h = 2; // = 0 to remove + +top_shaft_d = 40; +top_shaft_h = 8; // = 0 to remove + +toptop_shaft_d = 36; +toptop_shaft_h = 4; // = 0 to remove + +// Bore +hole_d = 12; + +// Holes +number_of_holes = 12; +hole_dia = 4; +hole_ring_dia = 30; + +/////////////////////// +// RENDERING QUALITY */ +/////////////////////// + +// HIGH : fs=0.25 : fa=3 : fn=0 +// LOW : fs=1 : fa=7 : fn=0 +fs = 0.25; // Minimum size of a fragment +fa = 1; // Minimum angle for a fragment +fn = 0; // Number of fragments (overrides fs & fa if non zero) + +/////////////// +/* MAIN CODE */ +/////////////// + +difference() +{ + // Create a union of four shapes, 3 cylinders and 1 sprocket + union() + { + // Create sprocket using the difined module + sprocket(teeth, roller_d, pitch, thickness, tolerance); + + // Create cylinder on front side of sprocket + translate([0, 0, thickness]) + cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on back side of sprocket + rotate([0,180]) + cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on top of the front side cylinder + translate([0, 0, thickness+top_shaft_h]) + cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Rest of shapes are removal of material + // Drills out the center hole with 1 mm extra in both directions + translate([0, 0, -bottom_shaft_h-1]) + { + cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Drills 'number_of_holes' many holes in a circle + angle_between_holes = 360/number_of_holes; + for(hole_angle = [0:360/number_of_holes:360]) + { + translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1]) + { + cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn); + } + } +} + +///////////////////// +/* SPROCKET MODULE */ +///////////////////// + +module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2) +{ + roller_radius = roller/2; //We need radius in our calculations, not diameter + distance_from_center = pitch/(2*sin(180/teeth)); + angle = (360/teeth); + + pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance))); + + difference() + { + union() + { + // Quality parameters + $fs = fs; + $fa = fa; + $fn = fn; + + // Create inner cylinder with radius = pitch_radius + cylinder(r=pitch_radius, h=thickness); + + // Create outer part of the teeth + for(tooth=[1:teeth]) + { + intersection() + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, 0]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=pitch-roller_radius-tolerance, h=thickness); + } + } + rotate(a=[0,0,angle*(tooth-0.5)]) + { + translate([distance_from_center,0,0]) + { + cylinder(r=pitch-roller_radius-tolerance,h=thickness); + } + } + } + } + } + + // Cuts away the inner groove between the teeth + for(tooth=[1:teeth]) + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, -1]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=roller_radius+tolerance, h=thickness+2); + } + } + } + } +} + + diff --git a/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_31.scad b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_31.scad new file mode 100644 index 0000000..04b28ce --- /dev/null +++ b/model/Library/SprocketGenerator2/files/Sprocket_Generator_v2_example_31.scad @@ -0,0 +1,166 @@ +/* + +Sprocket generator v2 + +This code is based on the code written by *Talon_1* who based his code on the work of +*Aleksejs*. Big thanks for your contributions. The aim of this code is to be easier +understood by folks that are new to OpenSCAD. The rendered sprocket can be downloaded +as a .STL file and 3D-printed directly using any slicing program. + +*/ + +////////////////////// +/* CHAIN-PARAMETERS */ +////////////////////// + +// THESE ARE FOR 25H/04C +roller_d = 4.1; +thickness = 2.9; +pitch = 6.35; +tolerance = 0.05; + +/////////////// +/* VARIABLES */ +/////////////// + +teeth = 31; + +// Shaft +bottom_shaft_d = 20; +bottom_shaft_h = 0; // = 0 to remove + +top_shaft_d = 50; +top_shaft_h = 3; // = 0 to remove + +toptop_shaft_d = 24; +toptop_shaft_h = 8; // = 0 to remove + +// Bore +hole_d = 20; + +// Holes +number_of_holes = 5; +hole_dia = 4; +hole_ring_dia = 40; + +/////////////////////// +// RENDERING QUALITY */ +/////////////////////// + +// HIGH : fs=0.25 : fa=3 : fn=0 +// LOW : fs=1 : fa=7 : fn=0 +fs = 0.25; // Minimum size of a fragment +fa = 1; // Minimum angle for a fragment +fn = 0; // Number of fragments (overrides fs & fa if non zero) + +/////////////// +/* MAIN CODE */ +/////////////// + +difference() +{ + // Create a union of four shapes, 3 cylinders and 1 sprocket + union() + { + // Create sprocket using the difined module + sprocket(teeth, roller_d, pitch, thickness, tolerance); + + // Create cylinder on front side of sprocket + translate([0, 0, thickness]) + cylinder(top_shaft_h, top_shaft_d/2, top_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on back side of sprocket + rotate([0,180]) + cylinder(bottom_shaft_h, bottom_shaft_d/2, bottom_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + + // Create cylinder on top of the front side cylinder + translate([0, 0, thickness+top_shaft_h]) + cylinder(toptop_shaft_h, toptop_shaft_d/2, toptop_shaft_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Rest of shapes are removal of material + // Drills out the center hole with 1 mm extra in both directions + translate([0, 0, -bottom_shaft_h-1]) + { + cylinder(bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, hole_d/2, hole_d/2, $fs=fs, $fa=fa, $fn=fn); + } + + // Drills 'number_of_holes' many holes in a circle + angle_between_holes = 360/number_of_holes; + for(hole_angle = [0:360/number_of_holes:360]) + { + translate([hole_ring_dia/2*cos(hole_angle), hole_ring_dia/2*sin(hole_angle), -bottom_shaft_h-1]) + { + cylinder(h = bottom_shaft_h+thickness+top_shaft_h+toptop_shaft_h+2, r = hole_dia/2, $fs=fs, $fa=fa, $fn=fn); + } + } +} + +///////////////////// +/* SPROCKET MODULE */ +///////////////////// + +module sprocket(teeth=20, roller=3, pitch=17, thickness=3, tolerance=0.2) +{ + roller_radius = roller/2; //We need radius in our calculations, not diameter + distance_from_center = pitch/(2*sin(180/teeth)); + angle = (360/teeth); + + pitch_radius = sqrt((distance_from_center*distance_from_center) - (pitch*(roller_radius+tolerance))+((roller_radius+tolerance)*(roller_radius+tolerance))); + + difference() + { + union() + { + // Quality parameters + $fs = fs; + $fa = fa; + $fn = fn; + + // Create inner cylinder with radius = pitch_radius + cylinder(r=pitch_radius, h=thickness); + + // Create outer part of the teeth + for(tooth=[1:teeth]) + { + intersection() + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, 0]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=pitch-roller_radius-tolerance, h=thickness); + } + } + rotate(a=[0,0,angle*(tooth-0.5)]) + { + translate([distance_from_center,0,0]) + { + cylinder(r=pitch-roller_radius-tolerance,h=thickness); + } + } + } + } + } + + // Cuts away the inner groove between the teeth + for(tooth=[1:teeth]) + { + rotate(a=[0, 0, angle*(tooth+0.5)]) + { + translate([distance_from_center, 0, -1]) + { + $fs = fs; + $fa = fa; + $fn = fn; + cylinder(r=roller_radius+tolerance, h=thickness+2); + } + } + } + } +} + + diff --git a/model/Library/SprocketGenerator2/images/10.png b/model/Library/SprocketGenerator2/images/10.png new file mode 100644 index 0000000..3ca58ff Binary files /dev/null and b/model/Library/SprocketGenerator2/images/10.png differ diff --git a/model/Library/SprocketGenerator2/images/23.png b/model/Library/SprocketGenerator2/images/23.png new file mode 100644 index 0000000..9cdd571 Binary files /dev/null and b/model/Library/SprocketGenerator2/images/23.png differ diff --git a/model/Library/SprocketGenerator2/images/31.png b/model/Library/SprocketGenerator2/images/31.png new file mode 100644 index 0000000..bd081f0 Binary files /dev/null and b/model/Library/SprocketGenerator2/images/31.png differ diff --git a/model/subframe.scad b/model/subframe.scad index 3923d7a..c5a11df 100644 --- a/model/subframe.scad +++ b/model/subframe.scad @@ -1,10 +1,88 @@ // tricycle.scad: +include + +include + module subframe () { - translate([0, 180, 109]) - cube([50, 25, 230], center = true); + // front leg (supports cross-shaft, epicyclic, motor + translate([-25, 1820, -550]) + color("grey") + cube([50, 25, 230]); + // bottom bracket leg + translate([-25, 1690, -578]) + color("grey") + cube([50, 25, 310]); + // wheel leg + translate([-70, 1430, -593]) + rotate([0, 5, 0]) + color("grey") + cube([25, 75, 363]); + // front upper + translate([-25, 2000, -385]) + rotate([70, 0, 0]) + color("grey") + cube([50, 25, 330]); + // central upper + translate([-25, 1700, -275]) + rotate([82, 0, 0]) + color("grey") + cube([50, 25, 370]); + // rear leg + translate([-25, 1200, -515]) + rotate([-23, 0, 0]) + color("grey") + cube([50, 25, 344]); - cube([50, 25, + // wheel + translate([0, 1467.5, -450]) + rotate([0, 0, 90]) + // Pierre Rouzeau's wheel is beautifully modelled and parameterised, but it doesn't seem to be scaled as I'd expect... + scale([0.70, 0.70, 0.70]) + wheel(rim=451, spoke_nbr=0); + + // bottom bracket + translate([-25, 1680, -390]) + color("black") + rotate([0, 90, 0]) + cylinder(h=68, r=26); + translate([-35, 1680, -390]) + color("silver") + rotate([0, 90, 0]) + sprocket(teeth=82, roller=7.9, pitch=12.7); + + // left crank + translate([-44, 1680, -395]) + color("black") + cube([12,20,150]); + + // left pedal + translate([-120, 1670, -265]) + color("black") + cube([70,40,15]); + + // left pedal shaft + translate([-120, 1690, -257.5]) + color("silver") + rotate([0,90,0]) + cylinder(h=80,r=4); + + // right crank + translate([44, 1680, -535]) + color("black") + cube([12,20,150]); + + // right pedal + translate([58, 1670, -525]) + color("black") + cube([70,40,15]); + + // right pedal shaft + translate([44, 1690, -517.5]) + color("silver") + rotate([0,90,0]) + cylinder(h=80,r=4); + } -subframe(); \ No newline at end of file +subframe(); diff --git a/sketches/sketch.png b/sketches/sketch.png new file mode 100644 index 0000000..4c9731c Binary files /dev/null and b/sketches/sketch.png differ diff --git a/sketches/sketch.svg b/sketches/sketch.svg new file mode 100644 index 0000000..61b5d4a --- /dev/null +++ b/sketches/sketch.svg @@ -0,0 +1,1228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maximum chainwheel size (80t) + + + + + + + + + + + + + bulkhead/roll hoop + + + floor + + + + steering axis + + + + diff --git a/sketches/tricycle-sketch-2-a.svg b/sketches/tricycle-sketch-2-a.svg new file mode 100644 index 0000000..32ed8b5 --- /dev/null +++ b/sketches/tricycle-sketch-2-a.svg @@ -0,0 +1,1204 @@ + + + +maximum chainwheel size (80t)bulkhead/roll hoopfloorsteering axisfour bar linkage upper pivot axisepicyclicmotorsubframe diff --git a/sketches/tricycle-sketch-2-b.svg b/sketches/tricycle-sketch-2-b.svg new file mode 100644 index 0000000..c6877c3 --- /dev/null +++ b/sketches/tricycle-sketch-2-b.svg @@ -0,0 +1,1134 @@ + + + +floorsteering axisfour bar linkage upper pivot axissteering axisfour bar linkage upper pivot axisepicyclicmotorsubframe diff --git a/sketches/tricycle-sketch-2.svg b/sketches/tricycle-sketch-2.svg new file mode 100644 index 0000000..062a35d --- /dev/null +++ b/sketches/tricycle-sketch-2.svg @@ -0,0 +1,1165 @@ + + + +maximum chainwheel size (80t)bulkhead/roll hoopfloorsteering axisfour bar linkage upper pivot axisepicyclicmotorsubframe diff --git a/sketches/tricycle-sketch.svg b/sketches/tricycle-sketch.svg new file mode 100644 index 0000000..8b95c32 --- /dev/null +++ b/sketches/tricycle-sketch.svg @@ -0,0 +1,1013 @@ + + + +maximum chainwheel size (80t)bulkhead/roll hoopfloorsteering axisfour bar linkage upper pivot axis