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.
154 lines
4.1 KiB
154 lines
4.1 KiB
from cadquery import exporters
|
|
from cq_warehouse.extensions import Workplane
|
|
from cq_warehouse.fastener import *
|
|
from cq_warehouse.thread import *
|
|
from cqmore.curve import archimedeanSpiral, circle
|
|
from cqmore.polygon import regularPolygon, star
|
|
from cqmore.polyhedron import polarZonohedra, Polyhedron, superellipsoid
|
|
from svg_path import addSvgPath
|
|
from svgpathtools import svg2paths
|
|
import cadquery as cq
|
|
import cqmore
|
|
from cq_gears import (
|
|
SpurGear,
|
|
Worm,
|
|
HerringboneGear,
|
|
RackGear,
|
|
HerringboneRackGear,
|
|
BevelGear,
|
|
BevelGearPair,
|
|
)
|
|
|
|
simple = False
|
|
|
|
screw = ButtonHeadScrew(
|
|
size="M6-1", fastener_type="iso7380_1", length=15 * MM, simple=simple
|
|
)
|
|
|
|
scaled_screw = screw.scale(0.9)
|
|
|
|
outer_screw = ButtonHeadScrew(
|
|
size="M3-0.5", fastener_type="iso7380_1", length=12 * MM, simple=simple
|
|
)
|
|
|
|
scaled_outer_screw = outer_screw.scale(0.95)
|
|
|
|
outer_screw_plane = (
|
|
Workplane()
|
|
.union(scaled_outer_screw)
|
|
.workplane(offset=4)
|
|
.cylinder(8, 8, combine="cut")
|
|
.workplane(offset=4)
|
|
.cylinder(3, 4)
|
|
)
|
|
|
|
Workplane = cqmore.extend(Workplane)
|
|
Workplane.addSvgPath = addSvgPath
|
|
|
|
outer_axle_diameter = 14.1 # how wide the part in the wheel you press it into is
|
|
outer_axle_radius = outer_axle_diameter / 2
|
|
outer_axle_length = 30 # length of the first part that sticks in the wheel
|
|
second_outer_axle_length = 2.5 # length of the part after the part that sticks in the wheel that it spins against
|
|
|
|
inner_axle_length = 13.2
|
|
inner_axle_diameter = 1.8
|
|
|
|
servo_diameter = 4.75
|
|
servo_radius = servo_diameter / 2
|
|
servo_outer_diameter = 8
|
|
servo_outer_radius = servo_outer_diameter / 2
|
|
|
|
wheel_axle_outer = Workplane().workplane(invert=True).union(scaled_screw)
|
|
|
|
wheel_axle_outer = (
|
|
wheel_axle_outer.workplane(offset=4, invert=True)
|
|
.makePolygon(
|
|
regularPolygon(
|
|
nSides=6,
|
|
radius=outer_axle_radius,
|
|
thetaStart=0,
|
|
thetaEnd=360,
|
|
)
|
|
)
|
|
.extrude(outer_axle_length)
|
|
)
|
|
|
|
wheel_axle_outer = wheel_axle_outer.workplane(
|
|
offset=outer_axle_length / 2, invert=True
|
|
).cylinder(second_outer_axle_length, outer_axle_diameter)
|
|
|
|
wheel_axle_outer = wheel_axle_outer.workplane(offset=12, invert=False).cylinder(
|
|
inner_axle_length, inner_axle_diameter * 2
|
|
)
|
|
|
|
wheel_axle_outer = wheel_axle_outer.workplane(offset=-14.8).threadedHole(
|
|
scaled_outer_screw, 6, simple=simple, fit="Loose"
|
|
)
|
|
|
|
|
|
inner_nut = (
|
|
Workplane()
|
|
.cylinder(second_outer_axle_length + 1, outer_axle_diameter)
|
|
.workplane(offset=5)
|
|
.threadedHole(screw, 6, simple=simple, fit="Loose")
|
|
)
|
|
|
|
main_axle_length = 100 # how wide the robot will be basically
|
|
main_axle_diameter = 26
|
|
main_axle_radius = main_axle_diameter / 2
|
|
|
|
main_axle = (
|
|
Workplane()
|
|
.makePolygon(
|
|
regularPolygon(
|
|
nSides=6,
|
|
radius=main_axle_radius,
|
|
thetaStart=0,
|
|
thetaEnd=360,
|
|
)
|
|
)
|
|
.extrude(main_axle_length)
|
|
)
|
|
|
|
main_axle = (
|
|
main_axle.workplane(offset=0)
|
|
.line(main_axle_length - 10, 0, forConstruction=True)
|
|
.rotateAboutCenter((0, main_axle_length - 10, 0), 90)
|
|
.vertices()
|
|
.translate((-((main_axle_length / 2) - 5), 25, 0))
|
|
.box(12, 60, 6) # ends up being about 45 mm
|
|
.workplane()
|
|
.line(main_axle_length - 10, 0, forConstruction=True)
|
|
.rotateAboutCenter((0, main_axle_length - 10, 0), 90)
|
|
.vertices()
|
|
.translate((-((main_axle_length / 2) - 5), 49, 3))
|
|
.hole(7.5, 10)
|
|
)
|
|
|
|
servo_peg = (
|
|
Workplane("XZ")
|
|
.center(0, main_axle_length / 2)
|
|
.workplane(offset=13)
|
|
.cylinder(7, servo_outer_radius)
|
|
.workplane(offset=13)
|
|
.cylinder(30, servo_radius, combine="cut")
|
|
)
|
|
|
|
main_axle = main_axle.union(servo_peg)
|
|
|
|
cq.exporters.export(
|
|
wheel_axle_outer, "/home/deck/model_files/robot_wheel_axle_outer.step"
|
|
)
|
|
cq.exporters.export(inner_nut, "/home/deck/model_files/robot_wheel_axle_nut.step")
|
|
cq.exporters.export(
|
|
outer_screw_plane, "/home/deck/model_files/robot_wheel_axle_outer_screw.step"
|
|
)
|
|
cq.exporters.export(main_axle, "/home/deck/model_files/robot_wheel_axle_main.step")
|
|
|
|
try:
|
|
# show_object(inner_nut)
|
|
# show_object(wheel_axle_outer)
|
|
# show_object(outer_screw_plane)
|
|
show_object(main_axle)
|
|
except NameError:
|
|
pass
|
|
|