hardware/openscad/ rebuilds the broken Fusion models as OpenSCAD: body (top/bottom plate, standoffs, battery bay, switch), legs (coxa bracket, femur link, tibia, horn adapters, TPU socks, servo cables), the whole robot, and the remote (shell, lid, Nextion 3.5", JH-D400X-R4 sticks, 18650 UPS board, IMU, Teensy 4.0, USB-C breakout). Every part was checked by slicing against the original STEP solids; the original's bugs are fixed and listed in PLANNING.md. The robot now uses a hexagon leg layout (corner legs 60 deg round from the mid legs; the corner coxa brackets need turning on their splines). Physical limits from a collision sweep of the model are in Config.h: per-leg coxa limits and LEG_CLEARANCE_MM 56 (a leg is 55.2 mm wide at the joints); the sim API exports them (version 7). sim_smoke passes. Unity loads the model (export_unity.py -> Resources/OpenScadModel, OpenScadModel.cs builds a new rig in place of the old scene's robot). The PCB model's mounting holes now use the exact EasyEDA grid. README shows renders of both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.2 KiB
OpenSCAD
29 lines
1.2 KiB
OpenSCAD
// Hitec HS-485HB, from the servo's Fusion model (servo-hitec-hs-485hb).
|
|
// Local frame: shaft on the Z axis, case extending +X, Z = 0 at the ear
|
|
// underside. Include (not use) this file to get the constants.
|
|
|
|
SERVO_CASE = [[-10, -10, -28], [30, 10, 9.75]];
|
|
SERVO_EARS = [[-16, -10, 0], [36, 10, 3]];
|
|
SERVO_EAR_HOLES = [[-13.9, 5], [-13.9, -5], [34.35, 5], [34.35, -5]];
|
|
SERVO_EAR_SCREW_D = 2.5; // pilot hole for the ear screws in printed parts
|
|
POCKET_CLEAR = 0.5;
|
|
|
|
module servo_pocket_2d() {
|
|
translate([SERVO_CASE[0][0] - POCKET_CLEAR, SERVO_CASE[0][1] - POCKET_CLEAR])
|
|
square([SERVO_CASE[1][0] - SERVO_CASE[0][0] + 2*POCKET_CLEAR,
|
|
SERVO_CASE[1][1] - SERVO_CASE[0][1] + 2*POCKET_CLEAR]);
|
|
for (h = SERVO_EAR_HOLES) translate(h) circle(d = SERVO_EAR_SCREW_D);
|
|
}
|
|
|
|
module hs485hb() {
|
|
color("#303030") {
|
|
translate(SERVO_CASE[0]) cube(SERVO_CASE[1] - SERVO_CASE[0]);
|
|
difference() {
|
|
translate(SERVO_EARS[0]) cube(SERVO_EARS[1] - SERVO_EARS[0]);
|
|
for (h = SERVO_EAR_HOLES) translate([h[0], h[1], -1]) cylinder(d = 4.42, h = 5);
|
|
}
|
|
translate([0, 0, 9.75]) cylinder(d = 14, h = 2.25);
|
|
}
|
|
color("#e0e0e0") translate([0, 0, 12]) cylinder(d = 5, h = 3.25);
|
|
}
|