Raw Mechatronics

Project

Orbiter — Lab-Kit Pan-Tilt Camera Rig

A two-axis Wi-Fi-controlled pan-tilt camera rig for taking calibrated photo sets of small objects. Open hardware + firmware + server + UI, packaged as a lab kit you can build on a weekend.

Results

What a scan actually produces: the hemisphere of camera poses (each frustum is one shot, with its photo pinned to the frustum), plus the dense COLMAP point cloud reconstructed from those photos. Switch objects in the top bar, toggle layers, or expand full-screen.

Loading scan viewer…
Orbiter v2 — 3/4 isometric render: azimuth drive module with the platform on the left, elevation drive module with the orbit arm on the right, on the aluminium tube frame
Orbiter v2 — front view, showing the two drive housings on the main rail and the arm's pivot height
Orbiter v2 — side view, showing the elevation module on the vertical bar and the cross rail under it
Orbiter v2 — top view, showing the GT2 belt runs from both NEMA 17 motors to the 112-tooth and 160-tooth pulleys
AngleSensorMount Ribbed — Three-legged AS5600 sensor mount on the elevation housing
BarMountInsert — Elevation insert: 1:5 taper into the shaft, clamp for the 25x25 orbit arm, M10x0.75 for the extractor
BaseExtractor M10x0.75 — Taper extractor: M10x0.75 plug with a hex socket (printed tool, not part of the machine)
BaseFootPlug M75x2 — Foot plug of the base housing, external M75x2, hexagon for a 32 mm socket
BaseOuterRingSpacer — Spacer between the bearing outer rings inside the base housing
BasePlatformInsert Taper — Base insert: 1:5 taper into the spindle, 120 mm platform disc, M10x0.75 for the extractor
BasePulley GT2 112T — Base GT2 112-tooth pulley on the spindle splines
BaseSensorRing — Disc holding the base AS5600 sensor under the spindle
BaseSpindle — Base spindle (vertical axis): collar, splines for the pulley, M32x1, taper socket on top
BearingSpacer — Spacer between the bearing inner rings
BottomHousin — Elevation drive housing on the vertical bar: bearing seats, motor mount
BottomHousin(Mirror) — Base drive housing on the main rail, mirrored sibling of the elevation housing, internal M75x2 at the bottom
ClampNut M32x1 — M32x1 nut that clamps the bearing stack on the shaft and on the spindle
ClampNut Wrench AF32 — Wrench for the clamp nut (printed tool, not part of the machine)
CrossRail foot cap — Foot cap on each end of the cross rail
CrossRail load spreader — Load spreader under the head of the main stack bolt, inside the cross rail
ElevationShaft — Elevation shaft: splines for the pulley, M32x1 for the clamp nut, 1:5 taper socket for the insert
HexPlug — Plug holding the AS5600 magnet in the end of the shaft and of the spindle
MainRail tie cap — H-shaped cap tying the main rail to the cross rail, ears around the cross rail
MainRail tie wedge — Nut wedge inside the tie cap
Rail cap wedge — M5 nut wedge inside the rail caps
ReplacablePulley — Elevation GT2 pulley on the shaft splines
Stack clamp jaws — Jaws clamping the vertical bar to the rails (main M5x70 bolt)
Stack clamp wedge — Nut wedge of the main stack bolt
VertivalBar top cap — Top cap of the vertical bar

A two-axis Wi-Fi-controlled pan-tilt rig for small objects. The platform spins under a camera arm that pitches between horizontal and straight-down; at any pose the server records a photo with its 6-DOF camera extrinsic.

v2 mechanics

The renders above are the second generation of the hardware: two near-identical rotary drive modules on a 25 × 25 mm aluminium tube frame, each spindle in two 6008 bearings with a 1:5 taper socket for the platform or the arm, and an AS5600 encoder on both axes. STL, STEP and FreeCAD files, 25 printed parts, under cad/v2/. The story is in the v2 mechanics post.

Orbiter v2 — render of the aluminium tube frame with the azimuth drive module and platform on the left and the elevation drive module with the arm on the right
Orbiter v2 — exploded view: azimuth drive module stacked on the left, elevation drive module on the right, rails and printed caps between them
Orbiter v2 — section through the azimuth drive: spindle in two ball bearings, clamp nut, taper insert on top, GT2 belt to the NEMA 17 motor

The server and firmware below still model the v1 rig; the v2 files are there to print, measure and build into your own projects.

Under the hood

  • CAD — v1 printable parts + full assembly (.glb / .fbx / .obj); v2 mechanics as STL, STEP and FreeCAD in cad/v2/.
  • Firmware — ESP-IDF v6 on ESP32. Treats the rig as a generic 2-axis IP actuator with absolute encoder feedback (AS5600 + AS5048A).
  • Server — FastAPI. Owns the scan-session state, talks to the ESP32 and the camera, writes manifests and photo files.
  • UI — Vite + React + react-three-fiber. Two tabs: Scaner (live 3D + motion control) and Library (sessions + hemisphere of photos).
  • Native CV workbench (v0.3) — PySide6 desktop app for a binocular pair with a line laser: staged calibration, laser-stripe scanning, orbiter-rigcheck and the offline orbiter-recon chain through COLMAP. The web UI gains a Stereo tab for the pair.
  • Optional COLMAP container consumes the session's SfM-priors JSON to jump straight to dense reconstruction.

Machine Itself

Loading 3D viewer…

Treat this as a kit, not a product

Orbiter is a sandbox for testing ideas. If your bench has different parts, the architecture should still work — swap and adapt.

We're showing the application here, not selling a finished build.

Get the code

RawMechatronicsOrg/Orbiter

Two-axis Wi-Fi pan-tilt camera rig — CAD + ESP32 firmware + FastAPI server + Vite/R3F UI + native CV workbench + Docker stack + optional COLMAP container. Lab kit, v0.3.

Python13060Updated 11 days ago

Code is Apache-2.0; hardware designs are CERN-OHL-S-2.0; docs are CC-BY-4.0. The latest activity is in the devlog below.

Support us on Ko-fi

Project blog

Devlog

View all →