saltylab-firmware/chassis/rplidar_mount.scad
sl-mechanical 23f2daa3cd feat: sensor head mounts — stem collar, RPLIDAR, RealSense, 4× IMX219
Part of Phase 2 sensor mount designs for SaltyBot 25 mm mast.

Files added:
  chassis/sensor_head.scad        — split collar (25 mm OD stem) + octagonal platform
  chassis/rplidar_mount.scad      — anti-vibration ring for RPLIDAR A1M8 (Ø58 mm BC)
  chassis/realsense_mount.scad    — RealSense D435i arm bracket, 10° tilt, 1/4-20 nut
  chassis/imx219_mount.scad       — 4× IMX219 radial arms, 10° tilt, CSI ribbon slot
  chassis/sensor_head_assembly.md — assembly diagram + fastener BOM + print settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 22:53:18 -05:00

77 lines
3.1 KiB
OpenSCAD
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ============================================================
// rplidar_mount.scad — RPLIDAR A1M8 Anti-Vibration Ring Rev A
// Agent: sl-mechanical 2026-02-28
// ============================================================
// Flat ring sits between platform and RPLIDAR A1M8.
// Anti-vibration isolation via 4× M3 silicone grommets
// (same type as FC vibration mounts — Ø6 mm silicone, M3).
//
// Bolt stack (bottom → top):
// M3×30 SHCS → platform (8 mm) → grommet (8 mm) →
// ring (4 mm) → RPLIDAR bottom (threaded M3, ~6 mm engagement)
//
// RENDER options:
// "ring" print-ready flat ring (default)
// "assembly" ring in position on platform stub
// ============================================================
RENDER = "ring";
// ── RPLIDAR A1M8 ─────────────────────────────────────────────
RPL_BODY_D = 70.0; // body diameter
RPL_BC = 58.0; // M3 mounting bolt circle
// ── Mount ring ───────────────────────────────────────────────
RING_OD = 82.0; // outer diameter (RPL_BODY_D + 12 mm)
RING_ID = 30.0; // inner cutout (cable / airflow)
RING_H = 4.0; // ring thickness
BOLT_D = 3.3; // M3 clearance through-hole
GROMMET_D = 7.0; // silicone grommet OD (seat recess on bottom)
GROMMET_H = 1.0; // seating recess depth
$fn = 64;
e = 0.01;
// ─────────────────────────────────────────────────────────────
module rplidar_ring() {
difference() {
cylinder(d = RING_OD, h = RING_H);
// Central cutout
translate([0, 0, -e])
cylinder(d = RING_ID, h = RING_H + 2*e);
// 4× M3 clearance holes on bolt circle
for (a = [45, 135, 225, 315]) {
translate([RPL_BC/2 * cos(a), RPL_BC/2 * sin(a), -e])
cylinder(d = BOLT_D, h = RING_H + 2*e);
}
// Grommet seating recesses — bottom face
for (a = [45, 135, 225, 315]) {
translate([RPL_BC/2 * cos(a), RPL_BC/2 * sin(a), -e])
cylinder(d = GROMMET_D, h = GROMMET_H + e);
}
}
}
// ─────────────────────────────────────────────────────────────
// Render selector
// ─────────────────────────────────────────────────────────────
if (RENDER == "ring") {
rplidar_ring();
} else if (RENDER == "assembly") {
// Platform stub
color("Silver", 0.5)
difference() {
cylinder(d = 90, h = 8);
translate([0, 0, -e]) cylinder(d = 25.4, h = 8 + 2*e);
}
// Ring floating 8 mm above (grommet gap)
color("SkyBlue", 0.9)
translate([0, 0, 8 + 8])
rplidar_ring();
}