How it works 01

From a walk to a bid, step by step

The five steps on the Story page in more detail, then the five steps the app takes to turn a walk’s data into quantities.

The workflow

From the field to the bid

  1. 01

    Capture

    Walk the lot once with the handheld scanner. It records lidar, camera and centimeter GPS together.

    Unitree L2 lidar · ELP AR0234 camera · Jetson Orin Nano Super · Unicore UM980 and UM982 RTK

    • A base on a tripod sends GPS corrections over a 915 MHz radio to the rover on the rig.
    • Hold still 10–20 s in the dock, walk the lot, come back and hold still again.
    • The 5-inch screen shows a live map and the GPS fix while it records.
    • Each walk is saved as a ROS 2 bag with its camera calibration and GPS log.
  2. 02

    Process

    The app stitches the walk into one 3D scan, and its AI picks out the pavement, paint, curbs and symbols.

    Pavement Pro for Windows · FAST-LIO · SAM 3

    • One command pulls the walk off the rig over Wi-Fi.
    • It runs on the estimator’s own machine, not in the cloud.
    • On three real lots, each walk closed to within 0.7–3.8 cm of its start once pinned to the GPS.
    • The steps inside are the data pipeline, below.
  3. 03

    Verify

    The estimator checks what was found in 2D and 3D, and fixes or adds anything missed.

    Plan view · 3D views: LiDAR, LiDAR + camera, Mesh

    • Every item sits in a takeoff list by bid item, laid out like the Bluebeam markups estimators already use.
    • Slope, point density and height spread show where the scan is thin or the ground uneven.
    • Patching, potholes and crack sealing are drawn by hand for now.
  4. 04

    Export

    The quantities come out as a spreadsheet: square feet, linear feet and counts, by bid item.

    CSV

    • Sealcoat in SF.
    • Striping in LF and SF, by line width.
    • Stalls counted by length; symbols by type.
    • Paving and patching in SF.
  5. 05

    Price

    Planned

    The contractor’s own rates turn the quantities into the bid.

    The contractor’s unit rates

    • Today the CSV is priced in the estimator’s own spreadsheet or bid software.
    • Next: rates by bid item in the app, and a priced bid PDF with a repair plan.

The data pipeline

Inside Process and Verify: from a walk’s files to quantities

  1. 01

    Upload

    Bring the walk into the app and make it one cloud, pinned to the GPS.

    A ROS 2 bag from the rig, or LAS and LAZ from any scanner

    • Every file is checked against the rig’s SHA-256 checksums, and the capture’s health is reported.
    • The SLAM path is fitted to the RTK fixes, finding the clock offset and heading, and the cloud is leveled.
    • Returns past a 6–8 m range limit are dropped, where the lidar’s noise grows.
  2. 02

    Color

    Paint every lidar point with the color the camera saw there.

    The calibrated camera · its measured position on the rig · a 0.6 s frame lag

    • Each point is projected into the camera frames that saw it and takes their color.
    • The lens, the camera’s position against the lidar and the frame timing were each measured on the rig first.
    • On real lots, 91–96% of points are seen, by about 11 frames each; the rest stay an exact gray.
  3. 03

    Segment

    SAM 3 labels the camera images, and the labels are laid over the scan.

    SAM 3, fine-tuned on GeoSynth’s simulated lots (examples)

    • SAM 3 masks every frame, plus a top view of the whole lot: pavement, lines, curbs, symbols, cars and trees.
    • The masks are voted onto the lidar points and checked by geometry: paint lies on the ground, poles stand up.
    • Geometry tidies the result, straightening stall lines to 4 in, and it lies over the scan as a 3D mesh, one object a class.
  4. 04

    Edit

    Turn the labels into takeoff items, then fix what is wrong or missing.

    Find features · the plan view and 3D scene

    • Find features measures paved area, lines by width, stall lines by length, symbols and hatching, inside a site boundary.
    • Add all puts them in the takeoff, each one listed by bid item to click and inspect.
    • The estimator fixes what is wrong and draws what was missed, on the plan or in 3D.
  5. 05

    Export

    Write the bid quantities out as a spreadsheet.

    CSV

    • The Bid tab sums the takeoff by bid item, in SF, LF and EA.
    • Export writes that table as a CSV.
Training data 02

The simulated lots SAM 3 learns from

Three camera frames from parking lots built by GeoSynth, each beside its training mask.

GeoSynth builds parking lots in 3D, then renders them in Blender through a simulated copy of the scanner’s camera, with its lens, exposure, noise and JPEG, so the images look like what the rig records. All three lots are simulated; none is a real place.

The masks are the exact labels SAM 3 is fine-tuned on, not a model’s predictions. They come from the 3D scene itself, so every pixel is labeled for free, in 31 classes: 26 for the scene, such as pavement, lines, curbs, symbols, cars, trees and buildings, and 5 for the pavement’s condition: cracks, sealed cracks, alligator cracking, potholes and patches. The cracks are projected from each lot’s aging map through the frame’s depth and camera position. Black is unlabeled: the sky and anything far off.

A driving aisle with parked cars, a concrete valley gutter, red curbs and trees. Lot 73015: a large lot of angled stalls, designed as if built in 1972.

asphalt pavementvehiclevalley guttertreebuildingunlabeledlandscapepainted curbcurblight polesingle linesign

An aisle by an office building, with curbs, landscaping, shrubs, trees and signs. Another frame of the same lot.

asphalt pavementunlabeledtreebuildinglandscapecurbshrubvalley guttervehiclelight polesignconcrete sidewalk

A heavily aged lot by a storefront. The cracks come from the lot’s aging map and show in the mask as red lines. Lot 73190: a small side lot, designed as if built in 1988.

asphalt pavementvalley gutterbuildingtreevehicleunlabeledsite furnitureconcrete pavingcracklandscapecurbpainted curblight polesingle linealligator crackingasphalt streetsignsealed crackpatch

The cars are the “Generic passenger car pack” by Comrade1280, licensed under CC BY 4.0. GeoSynth split them into single cars, rescaled and repainted them.

The scanner 03

A handheld lidar and camera rig

The scanner rig, v5

Handheld and drill-style, with the battery under the grip as its stand. Built only from parts already on hand: a Unitree L2 4D lidar with its own IMU, a Jetson Orin Nano Super (8 GB), an ELP global-shutter camera (AR0234, 110°), a 5-inch touchscreen and a 20,000 mAh, 140 W battery. Nine parts printed in black PETG on a Creality K2; about 1.8 kg with the battery.

The CAD is Fusion 360 driven by scripts: the scripts are the design, and v5 rebuilds from them exactly (63 of 63 checks, the print files byte-identical).

On the Jetson: JetPack 7 (Ubuntu 24.04), ROS 2 Jazzy, Unitree's L2 driver, FAST-LIO tuned for the L2 (a denser config, a 2 s still start, a zero-velocity update), the camera driver, and a full-screen kiosk: START, RECORD, STOP, a live 10 cm voxel map and a GNSS status strip. It records ROS 2 bags at about 13.6 MB/s with the camera at 1080p, logs RTK fixes into each capture, and is driven and deployed from the desktop over SSH.

DateVersion
Jun 2026Concept: aluminum rail, a Teensy for sync, the lidar tilted forward 60°
to 09-21v2 on a 2020 rail, then a clean-room rebuild
09-22 – 09-25v4: a one-piece sensor module; printed
10-04v5 draft: all PETG, handle and battery separable from the head
10-11 – 10-16v5 on-hand build: no rail, no Teensy (software sync); printed and assembled
10-16A printed capture dock to start and end every walk at the same spot
10-25The RTK rover on the rig (zip-tied; a printed mount is next)
Render of the assembled v5 rig from behind: the sensor head with the touchscreen, the L2 lidar on top, the handle and the battery cradle on the dock.
v5 assembled, from the assembly guide.
Exploded render of v5's nine printed parts: knob, tray that is the door, bezel, chassis, hinge pins, handle, battery gate and dock.
The nine printed parts, exploded.
A hand-drawn side-profile concept of the scanner from June 2026: Jetson, touchscreen, lidar rotated forward 60 degrees, camera, Teensy, aluminum extrusion handle and battery.
Where it started: the June 2026 concept sketch.
In 3D 04

Turn it, zoom in, look inside

Scanner v5 as designed: the nine printed parts from the CAD, with simple stand-ins for the bought parts (lidar, computer, camera, screen, battery) placed where the design puts them. Drag to turn it, right-drag or use two fingers to move it, scroll or pinch to zoom, and tap a part to name it.

Tap a part to name it
Iterations 05

From a sketch to v5

Seven versions in five months, each changed for a reason the last one taught. From v2 on, the design is Python scripts that build it in Fusion 360, so every version can be rebuilt exactly. The RTK pods’ own versions are below.

  1. May – Jun 2026

    Parts on a bench

    No enclosure yet: a Jetson Orin Nano, a Unitree L2 lidar with its own IMU, a global-shutter camera, a 140 W power bank and a 5-inch touchscreen, running ROS 2, FAST-LIO and a kiosk that records each walk.

    What changed: the lidar moved from USB-serial to Ethernet, after serial dropped frames whenever the power dipped; an external IMU was dropped, since the L2’s own is already in step with its points.

  2. Jun 2026

    The concept sketch

    The lidar tilted forward 60° to see the ground ahead, the camera below it, the Jetson and screen behind, a handle on an aluminum extrusion and the battery at the bottom. One rule: neither sensor may see the other.

    A hand-drawn side-profile concept of the scanner from June 2026: Jetson, touchscreen, lidar rotated forward 60 degrees, camera, Teensy, aluminum extrusion handle and battery.
  3. Summer 2026

    The first shells, v40 and v41

    A printed shroud on a 150 mm rail, modeled by hand: the lidar on a 60° face, the camera below, the Jetson and screen back to back, the battery in a shoe under the rail.

    Why it was replaced: both sensors hung off a printed box with a screen cut-out in the load path, so any flex would move the camera against the lidar and smear the color. The model had no parameters or joints, so a rebuild was cheaper than a repair.

    Render of the legacy v41 scanner shell: a boxy printed sensor housing with the lidar tilted on top, a see-through rear plate and a battery block below.
  4. Sep 19 – 21, 2026

    v2 and v3: rebuilt in code, on a rail

    A new design built only by scripts, with a 250 mm aluminum rail as the datum: the lidar and camera on one rigid member, the battery under the rail. Placing the makers’ own 3D models found clashes the part checks had missed, such as the rail arm passing through the Jetson’s board. v3 then rebuilt it into an empty document from the scripts alone, every part matching its reference volume exactly.

    Render of scanner v2: the lidar and camera on a sensor head at the top of a vertical aluminum rail, the Jetson and screen on a plate behind, a battery grip at the bottom.
  5. Sep 22 – 25, 2026

    v4: one printed module

    One shroud around a rail sleeve instead of four parts, the lidar back at 60° to see the ground from about 0.7 m ahead.

    What printing it taught: the layout worked, but the Jetson’s ports sat about 80 mm down inside the module, hard to plug, and the fastener sizes needed fixing.

  6. Oct 4 – 16, 2026

    v5: built like a cordless drill

    No rail. The handle and battery are one unit under the head, and it stands on the battery when set down. The tray is the door, with the Jetson turned so its ports face a plug bay. Remade from parts already on hand and assembled by 10-14: nine printed parts, about 585 g as printed. “Everything fits into place and works well.”

    Proof it can be rebuilt: on a second machine the scripts rebuilt v5 with 63 of 63 checks the same and all nine print files byte-identical (E-055).

    Render of scanner v5: a yellow and navy printed head with the lidar on top and the camera on the front, on a short handle standing in its dock.
  7. Oct 16 – 26, 2026

    The dock, then RTK on the rig

    A flat printed dock marks every capture: start still in it, walk, return to it, so any drift shows between the two still moments. The RTK rover was zip-tied to the tray for the first fixed captures on 10-25; the next day the tray was redrawn with the rover’s mount built in.

    Top view render of v5 with the redrawn tray: the lidar on top and the rover's mount with two keys and inserts built into the tray.
RTK GPS 07

Centimeter positions from a base and a rover

The RTK pods

A base and a rover for centimeter-grade positions, so the SLAM path can be pinned to the ground. The base is a Unicore UM982 with a helical antenna on a tripod; the rover is a UM980 with its puck screwed straight on, riding the rig. A pair of 915 MHz LoRa radios broadcasts the base's RTCM corrections (GPS, Galileo and BeiDou observations every second).

Pod v3 is plug-and-play: each receiver is powered and read over its own USB-C (the Jetson on the rig, a power bank on the tripod), and the radio runs from the receiver's 8-pin over one pre-crimped link. No soldering, no stripping.

The kiosk logs every fix into the capture; Process fits the walk to them, finding the clock offset and heading. The first fix on the rig, on 10-25, read horizontal sigmas of 1.0–1.4 cm and vertical 2.7–3.6 cm.

DateVersionWhy it changed
10-18Receivers bench-checkedFirst data off both
10-22v1 draft: receiver on edge, bank inside, a jumper to the puckFrom measured parts
10-24v2: the puck screws onto the UM980, one flat body 35–40% smaller, no supportsThe jumper's threads could not join puck and receiver
10-24v3: no power wiring inside, 86.8 × 48.5 × 32.8 mm, 44% of v2's footprint28–30 AWG soldering was the hard part; the goal was under 20 min a pod
10-25Base as one body on the tripod screw; RTK fixed on the rigSimpler to set up
Render of rover pod v1, a tall see-through box with the puck on top and a radio antenna.
v1
Render of rover pod v2, a flatter see-through box with the puck on top.
v2
Render of rover pod v3, a compact see-through box with the puck on top, a radio antenna and a round foot.
v3 rover
Render of the v3 base: a box holding the receiver, with the helical antenna column and a radio antenna.
v3 base, one body on the tripod screw
Render of the inside of pod v3: the radio in green, the pre-crimped link in red, the USB-C hole and insert bosses.
Inside v3: radio (green), link (red), USB-C hole

The pods in 3D

Rover pod v3: body, lid and pole foot
Base pod v3, first draft: body, lid and tripod mount (built as one body)