UP | HOME

fpv-spider

Warning

This is just dumped from Grok and has not been verified.

Mission

Outdoor confined-space survey / recon crawler. Possible SAR support later. Pilot it from a standard FPV-drone ELRS radio with FPV goggles. Not a certified rescue device. A human team still owns any rescue.

Use a hexapod when you need discrete footholds, stepping over debris, a narrow/tall profile, static stability with one jammed leg, or body-pose peeking around a corner with feet planted.

Do not use this platform if target gaps are under ~150–180 mm. Build a tracked or snake chassis instead.

Professional confined-space work usually uses tethered tracked inspection robots or caged drones. This is a recon tool that can go where wheels smear or get stuck.

Why this architecture

An FPV drone maps sticks almost 1:1 to motors. A hexapod cannot. Eighteen servos must stay coordinated (tripod gait, IK, body pose). The ELRS receiver sends high-level commands. A gait computer sits in the middle.

ELRS radio (existing handset)
        |
   ELRS RX  -- CRSF serial -->  ESP32 gait computer
                                      |
                                 2x PCA9685
                                      |
                                 18x MG92B
                                      +
              analog FPV cam + VTX + lights + optional DVR
                                      +
                         2S pack + dual BEC + recovery tether

PWM-only receivers (ER6/ER8) are wrong as the only brain. They cannot run a gait. Use CRSF into an MCU.

Keep video independent of control, same as a drone.

Platform lock: VC-35 void crawler

Circular body so there is no long axis to snag. Micro servos so stance stays near 350 mm. FPV mast and tether hook printed in.

Item Target
Stance diameter (neutral) ~350 mm
Body Ø 116 mm × 42 mm
Standing height ~110–130 mm
Wet weight 1.1–1.4 kg
DOF 18 (3 per leg)
Servo class MG92B micro metal-gear digital, 22.8 × 12 × 31 mm
Battery 2S 18650 or 2S 850–1300 mAh LiPo
Control ELRS CRSF → ESP32 → 2× PCA9685
Video Analog 5.8 GHz FPV + optional HD recorder
Fit envelope Voids / ducts ≳ 180 mm wide, 140 mm tall
Runtime goal 30–45 min walking, 2+ hr sit-and-look
Weather v1 Splash-resistant box, not waterproof

Leg geometry in the generator (mm):

Segment Axis-to-axis
BODYR 58
COXALEN 28
FEMURLEN 54
TIBIALEN 70

MG92B torque is only ~3.5 kg·cm at 6 V. That is the size/torque compromise that keeps a 35 cm stance. Payload is FPV + small VTX + 2S + lights. A full thermal module is v1.5, not v1. Do not hang a Jetson on this frame.

Standard-size 20 kg servos blow the diameter past ~420 mm. Wrong for a void crawler.

Files on disk

  • voidcrawler_vc35/stl/ printable parts plus non-printable _preview_assembly.stl
  • voidcrawler_vc35/src/generate_frame.py regenerate STLs
  • voidcrawler_vc35/docs/vc35_top_view.png dimension sketch
  • voidcrawler_vc35/VC35_BOM_and_build.xlsx live cart / print list / wiring / radio map
  • voidcrawler_vc35.zip whole pack

STLs are v0.1 block geometry. Dimensionally aimed at an MG92B pocket. Servo brands vary by a few tenths of a millimetre. File the first pocket before printing the other five of each leg part.

Regenerate after changing lengths:

python3 src/generate_frame.py

Edit COXA_LEN, FEMUR_LEN, TIBIA_LEN, BODY_R at the top of the generator.

Printable parts

File Qty Material Layer Walls Infill Supports Notes
stl/bodybottom.stl 1 PETG or ASA 0.20 4 40% gyroid No Floor down. Drill lid bosses 2.5 mm then tap M3 or melt inserts.
stl/bodytop.stl 1 PETG or ASA 0.20 4 30% Touching buildplate only Hook and handle as printed.
stl/electronicstray.stl 1 PETG 0.20 3 20% No  
stl/coxa.stl 6 PETG or ASA 0.16 5 50% From servo cradle File pocket to MG92B. Same orientation all 6.
stl/femur.stl 6 PETG or ASA 0.16 5 50% From servo cradle Structural. No PLA.
stl/tibia.stl 6 PETG or ASA 0.16 5 50% Minimal  
stl/foottpu.stl 8 TPU 95A 0.20 3 20% No Print 8, run 6, keep 2 spare toes.
stl/cambracket.stl 1 PETG 0.16 4 30% No 19 mm analog cam.
stl/antennaclip.stl 2 PETG or TPU 0.20 3 20% No  
stl/servohornplate.stl 18 PETG 0.16 3 100% No Optional.
stl/previewassembly.stl 0 Do not print. Viewer only.

Printer notes:

  • Nozzle 0.4 mm.
  • Bed: PETG 75–85 °C, ASA 90–100 °C, TPU 40–50 °C.
  • Dry filament.
  • Orient legs so layer lines run along the beam, not across servo ears.
  • PLA is acceptable only for a first fit-check of bodytop / tray — not for outdoor legs.
  • Body design intent: one sealed-ish electronics tub, servos outside, belly clearance, service hatch, TPU replaceable feet, ELRS antenna high and clear of the 5.8 antenna, printed rear tow hook.

Parts list

Planning total ~$414 at the 2026 street estimates in the workbook. Yellow price cells are meant to be overwritten. Status dropdown: Buy / Have / Skip / Ordered.

Printed structure (~$24)

Item Qty Unit Spec Example Unit USD
bodybottom.stl 1 print PETG/ASA, 4 walls, 40% gyroid repo /stl 3.50
bodytop.stl 1 print PETG/ASA, 4 walls, 30% repo /stl 2.20
electronicstray.stl 1 print PETG, 3 walls repo /stl 0.60
coxa.stl 6 print PETG/ASA, 5 walls, 50% repo /stl 0.70
femur.stl 6 print PETG/ASA, 5 walls, 50% repo /stl 0.80
tibia.stl 6 print PETG/ASA, 5 walls, 50% repo /stl 0.80
foottpu.stl 6 print TPU 95A; extra 2 spare recommended repo /stl 0.40
cambracket.stl 1 print PETG, 4 walls repo /stl 0.40
antennaclip.stl 2 print PETG or TPU repo /stl 0.15
servohornplate.stl 18 print Optional PETG horn stiffener repo /stl 0.05

Servos (~$170)

Item Qty Spec Example Unit USD
MG92B digital metal-gear servo 20 22.8×12×31 mm class, 180°, metal gears. Install 18, keep 2 spare. Same batch if possible. Tower Pro / one-seller clones 8.50
25T micro servo horns + screws 1 set Usually in the servo bag; buy extras Servo bag 0

Compute + radio (~$37)

Item Qty Spec Example Unit USD
ESP32 DevKit C (30-pin) 1 WROOM-32, USB-C preferred Espressif / clone 6.00
PCA9685 16-ch PWM driver 2 Second board A0 so addresses 0x40 and 0x41 Adafruit or clone 4.50
ELRS receiver 900 MHz 1 Prefer 900 MHz for voids / timber / interior RadioMaster Bandit RX / Matek 22.00
ELRS 2.4 GHz nano RX (alt) 0 If radio is 2.4-only: qty 1 and 900 MHz qty 0 RP1 / BetaFPV Nano 15.00

Power (~$48)

Item Qty Spec Example Unit USD
18650 cell protected 2 Name-brand 2500–3500 mAh, button-top protected Samsung / Molicel + protection 8.00
2-cell 18650 holder with leads 1 Series 7.4 V. Zip-tie into body cradle. Generic 3.00
2S 850–1300 mAh LiPo (alt pack) 1 Optional lighter field pack, XT30 Tattu / CNHL 12.00
XT30 pigtails + bullet kit 1 set Main power connector AMASS 4.00
Buck 7.4→6.0 V 8A+ 1 Servo rail. XL4015 or better. Set to 6.0 V before any servo is connected. XL4015 5.00
Buck 7.4→5.0 V 3A 1 ESP32 + RX + camera logic Mini560 / MP1584 2.50
1000 µF 16 V + 100 nF 1 set Across 6 V servo rail and VTX 5 V Any 1.00
SPST rocker or keyed toggle 6A 1 Main power, reachable with gloves Generic 12 mm 2.00

>| Polyfuse 10 A (+ reverse FET optional) | 1 | Cheap insurance | Littlefuse | 2.00 |

FPV + lights (~$92)

Item Qty Spec Example Unit USD
Starlight analog FPV camera 1 19 mm case. Caddx Ratel 2 / Foxeer T-Rex class. Caddx Ratel 2 22.00
5.8 GHz VTX 25–200 mW 1 SmartAudio or IRC Tramp if possible. 200 mW max in voids. TBS Unify / Rush Tiny Tank 25.00
5.8 dipole or stubby 1 Do not power VTX without antenna. Pagoda / stubby 8.00
Mini DVR or action cam 1 Survey record, not for piloting. Eachine PRO DVR 18.00
White LED flood 2–5 W 1 Switched from AUX via N-FET or 5 V driver. Cree-based drone light 8.00
850 nm IR illuminator 1 Optional. Pairs with IR-sensitive analog cam. Generic 850 nm array 7.00
Camera wire + cap pack 1 set 300–1000 µF low-ESR on VTX. FPV wire kit 4.00

Hardware (~$43)

Item Qty Spec Unit USD
M2×8 self-tapping servo screws 80 Extra because they strip. 0.04
M2×10 socket cap + nuts 20 Horn and camera ears. 0.08
M3×12 socket cap 12 Body lid + tether hook. 0.10
M3×8 socket cap 8 Tray and camera mast. 0.08
M3 hex nuts + 2× locknuts 16 One locknut on tether eye. 0.05
M3 short heat-set inserts 12 Lid bosses. Optional but worth it. 0.15
Zip ties 2.5 mm + 4 mm 1 pack Strain relief every cable. 3.00
Velcro + 1 mm foam tape 1 pack Camera isolation, pack padding. 4.00
3 mm recovery cord 15 m 1 Mandatory in voids. Dyneema or kernmantle. 12.00
Small carabiner / clip 2 Tether to printed hook. 3.00
22 AWG + 26 AWG silicone 2 m 22 AWG servo rail, 26 AWG signals. 2.50
Heat shrink assortment 1 pack   4.00

Buy-first (long lead / expensive): 20× MG92B, ESP32, 2× PCA9685, ELRS RX, dual bucks, 2S pack, Ratel-class cam + VTX + antenna, 15 m recovery cord.

Wiring

Two power domains. Never share one weak 5 V BEC across servos, RX, and VTX.

2S pack → switch → XT30
              ├─ XL4015 @ 6.0 V → PCA9685 V+   (servos only)
              └─ Mini buck @ 5.0 V → ESP32, ELRS RX, camera, VTX

ELRS TX → ESP32 RX
ELRS RX → ESP32 TX
ESP32 SDA/SCL → both PCA9685 (0x40 and 0x41)
Net From → to Rule
PACK+ Pack → switch → XT30 distribution 22 AWG
6VSERVO XL4015 6.0 V → both PCA9685 V+ Star to both boards. 1000 µF here.
5VLOGIC Mini buck 5.0 V → ESP32 5V, RX, camera, VTX Do not feed servos from this rail.
GND Pack − common to every board Single star ground at the XT30.
I2C ESP32 SDA/SCL → both PCA9685 4.7k pullups if the boards lack them.
CRSF ELRS TX→ESP32 RX, ELRS RX→ESP32 TX Hardware UART, 420000 baud. Software serial will not keep up.
PWM PCA9685 channels per map below Bundle servo leads up the coxa.
VIDEO Cam video → VTX VIN, cam 5 V from logic rail Antenna on before applying power.
LIGHT AUX FET switches LED− to ground Logic-level N-FET + 100 Ω gate.

Brownout is the number-one killer of first hexapods. Eighteen MG92B servos can spike well past 10 A. If the ESP32 resets when the robot stands, the 6 V BEC is too weak or the pack cannot deliver stall current. First stand-up on a current-limited bench supply, not a LiPo.

PCA9685 channel map

Label legs L1–L3 / R1–R3 clockwise from the camera.

Leg Board Coxa ch Femur ch Tibia ch
L1 front-left 0x40 0 1 2
L2 mid-left 0x40 3 4 5
L3 rear-left 0x40 6 7 8
R1 front-right 0x41 0 1 2
R2 mid-right 0x41 3 4 5
R3 rear-right 0x41 6 7 8
Cam tilt (optional) 0x41 15

Radio / EdgeTX map

Mode 2 assumed. Packet rate 50 Hz or 100 Hz Full. Switch mode 8ch or 16ch/2. Walking does not need 500 Hz. Unique bind phrase. 900 MHz preferred for interior / timber; 2.4 GHz is fine in open fields if that is all the radio has.

Radio channel Name Robot function Notes
CH1 Aileron Y Strafe Deadband 30 µs
CH2 Elevator X Forward / back  
CH3 Throttle Z / speed Walk speed or body height Pick one in firmware
CH4 Rudder Yaw Turn in place  
CH5 AUX1 2-pos ARM Enable motion ELRS arm channel. Disarmed = sit
CH6 AUX2 3-pos MODE Sit / walk / body-pose Body-pose freezes feet
CH7 AUX3 pot/slider TILT Camera tilt  
CH8 AUX4 2-pos LIGHT Flood + IR Momentary also fine

Failsafe: sit or freeze joints, lights stay on, VTX stays on. Never hold-last walk command. You still need the picture to recover the robot.

Send pack voltage telemetry back to the radio.

Firmware plan

Do not write a gait engine from scratch.

  1. Stand the robot with any ESP32 hexapod sketch that already talks to two PCA9685 boards. RookiDroid-style UDP firmware is a reasonable donor. rasheeddo/hexapod_dev_esp32 already speaks SBUS from a radio — closest existing architecture.
  2. Replace the UDP/SBUS parser with CRSF using AlfredoCRSF or CRSFforArduino.
  3. Map CH1–CH4 to body X/Y/yaw/speed. CH5 is ARM. Failsafe sits.
  4. Later: body pitch/roll from the left stick while feet are planted (the rubble peek move).

Donor projects worth reading, not cloning blindly:

  • RookiDroid Hexapod / Mochi — ESP32, printable, gait LUTs, web cal. Mochi settled on MG92B after 21g servos jittered.
  • rasheeddo hexapoddevesp32 — SBUS radio + IK on ESP32 + dual PCA9685.
  • ggldnl Hexapod — Servo2040 + real IK. Heavier first week.
  • AlfredoCRSF / CRSFforArduino — ELRS channel + telemetry libraries.

Sensors, in order

Must have on v1:

  • Analog FPV camera with a starlight sensor (Ratel 2 / T-Rex class) for dusk and interiors.
  • 25–200 mW 5.8 GHz VTX, adjustable from the radio if possible.
  • Onboard DVR or cheap HD action camera pointing the same way. FPV is for driving. Survey work needs a file.
  • 2–5 W white flood, switched. Confined spaces are dark.
  • Pack voltage, current, IMU so the body can level on a slope.
  • Camera at the front, 15–30° down, so you see the ground you are about to step on. Foam-mount it. Gait vibration is real.

Add on v1.5 after it walks outside:

  • One-axis tilt, maybe pan.
  • 850 nm IR illuminator + IR-sensitive analog cam.
  • Cheap thermal (Lepton class) as a second view, not the pilot view.
  • Lav or contact mic if you care about voices through debris.
  • GPS only for outdoor survey breadcrumbs. Ignore GPS indoors.

Leave for v2:

  • Depth camera / LiDAR mapping
  • Companion computer
  • Gas sensors (CO, O2, LEL) only if actually supporting a fire/rescue team who know how to interpret them
  • Autonomy

Analog FPV is the right pilot link in clutter: it snows before it dies. Digital stays pretty until it freezes. Caddx Gazer / Infra-style analog cameras exist if you want zoom or IR later.

2.4/900 MHz ELRS and 5.8 GHz video coexist if antennas are separated and the VTX is not sitting on the RX.

Assembly order

  • [ ] Print body + one coxa/femur/tibia/foot and test-fit a servo. Pass: servo seats without cracking plastic.
  • [ ] Print remaining structural set in PETG/ASA + TPU feet. Pass: all 6 legs identical.
  • [ ] Servos center every servo with a tester at 1500 µs before installing horns. Pass: horn spline at mid-travel.
  • [ ] Legs assemble 6 legs loosely; label L1–L3 / R1–R3 clockwise from camera. Pass: each joint moves 90°+ without bind.
  • [ ] Power set 6.0 V and 5.0 V bucks on the bench. Never guess. Pass: DMM confirms voltages.
  • [ ] Brain wire ESP32 + both PCA9685 + ELRS RX on the tray. No servos yet. Pass: RX binds, serial monitor sees CRSF.
  • [ ] Body install tray, pack, switch, VTX (antenna ON), camera. Pass: no metal shorting the buck modules.
  • [ ] Integrate mount 6 legs. Power via current-limited supply first time. Pass: sits / stands without brownout.
  • [ ] Radio load EdgeTX model map. Pass: ARM switch sits the robot.
  • [ ] Field fit tether before any void. Walk gravel, then a pallet tunnel. Pass: failsafe sits, picture stays up.

Training loop

Week 1–2
print, assemble, calibrate, walk on carpet.
Week 3
gravel, roots, wet grass. Tune step height and body height from the radio.
Week 4
night walk with lights + analog FPV. Practice sitting on failsafe and pulling the tether.
Week 5
constructed yard void (pallets, pipe, furniture) before any real structure.

Practice body-pose mode: freeze the feet, pitch/yaw the body and camera around a corner. That is the move that makes hexapods useful in rubble.

First milestone that actually matters:

  1. Robot stands and sits from AUX1.
  2. Forward / turn from the right stick, speed from throttle.
  3. Failsafe sits.
  4. Analog FPV picture while it walks across a room.

Field / SAR rules

  • Always tether in a void. 3–5 mm line from the rear hook to a person outside. Radio multipath and battery sag will otherwise strand it.
  • Optional later umbilical: power + analog video up the same line.
  • Lights on before you lose the analog picture.
  • If the picture snows, turn around. Do not "just a little further."
  • Low-voltage telemetry on the radio. Sit, then reel.
  • Failsafe sits, lights stay on, VTX stays up.
  • Do not present this as a life-safety appliance. No onboard "find the victim" autonomy on v1.

What not to do

  • Do not drive 18 servos directly from an ER8 PWM receiver.
  • Do not start with 9g plastic-gear servos.
  • Do not share one weak 5 V BEC between servos, RX, and VTX.
  • Do not write a gait engine from scratch if an existing ESP32 hexapod already walks.
  • Do not start with LiDAR and a Jetson.
  • Do not use PLA on outdoor legs.
  • Do not invent a new chassis until one donor gait stands on the bench.
  • Do not skip centering servos before horns.
  • Do not power a VTX without an antenna.

Larger-platform note (not this build)

Yard/trail surveyor class is ~45 cm, 2–3.5 kg, 25–35 kg·cm servos, ~1 kg payload, HexArth-sized. Rejected for the void crawler because it will not fit the holes. Keep that as a second robot if outdoor payload outgrows MG92B.

Waveshare HexArth reference (too big here): 344 × 429 × 155 mm standing, 2.1 kg, 1 kg payload, 30 kg·cm bus servos, ESP32 + optional Pi.

Open questions / next artifacts

  • Firmware: CRSF → gait on this channel map.
  • v0.2 parts after measuring the actual servo batch (pocket slop, horn height, cable exits).
  • 900 vs 2.4 on the handset you actually own.
  • Whether throttle is walk speed or body height.
  • Whether to donor RookiDroid firmware or rasheeddo IK.

Notes