Skylens
Registration method · measured, not assumed

Corner Anchor

One rigid body on a building corner, seven coded targets, and a single shared frame for the drone, the ground station and the lidar — anchored to a datum that already exists in the BIM model.

7coded targets
21independent distances
1516.5mm longest baseline
31 mauto-detection range
12 kgcomplete, folds flat

HE · עברית →

The problem

Every sensor arrives in its own frame

An RTK drone gives absolute position with a bias of a few centimetres. A ground 360 capture gives excellent density and drifting scale. A mobile lidar gives a beautiful cloud in an internal SLAM frame nobody measured. All three describe the same building — and none of them agrees with the others.

The usual answer is to stitch afterwards: ICP between clouds, manual point picking, coarse alignment then refinement. It works, sometimes. The problem is not accuracy — it is that the result cannot be repeated and cannot be documented. There is no number to show the client, no residual to inspect, and if someone rescans in six months nothing ties the two surveys together.

This method inverts the order. Instead of matching clouds after the fact, you place one rigid body whose geometry is known in advance, and every sensor that sees it is tied to it — and through it, to each other.

The fixture

Seven targets wrapping an external corner

Seven panels on one frame: three per arm — one lying on the slab, one at 45°, one flat against the facade — plus a seventh that anchors the corner itself. Targets sit flush in the print plane; no hardware stands proud of them.

Isometric view of the fixture on an external building corner: two symmetric arms, each carrying a slab panel, a 45-degree panel and a wall panel, with a square corner panel between them whose vertex points at the building corner.
The fixture on an external corner. Five distinct surface normals — slab (+Z), two 45° planes and two facade planes — are what let a drone and a ground scanner, looking from opposite directions, share the same identified targets. The corner panel is square and axis-aligned, so its vertex points at the building corner, 70.7 mm away.

Every panel is cut from the same 550 × 610 mm blank, out of a standard 1220 × 2440 ACM sheet — eight blanks per sheet, zero waste. The frame is aluminium, 14.5 m in total. The fixture breaks down into two arms and a corner panel and fits a car boot at roughly 650 × 650 × 295 mm.

Dimensions

Every dimension is derived, not chosen

There is no round number in this fixture that was picked because it looked right. Each dimension falls out of a constraint — the raw sheet, Metashape's detection threshold, or the requirement that the fixture never obscures itself.

FACADE ASLABMK1MK2MK36106106101072.31072.3313145°SECTION THROUGH ARM Aarm B is the mirror image about X = Yall dimensions in mm
Section through arm A. Three panels of 610 mm each — slab, 45°, facade — meeting at an identical reach and height of 1072.3 mm. That equality is not a coincidence: both are 31 + 610 + 610/√2. The print face stands 31 mm off the slab and off the facade alike, with nothing behind it but the depth of the frame.
BUILDINGX = YMK1MK4MK7MK2 / MK3 edge onMK5 / MK6 edge on6106105501072.31072.370.7 vertex to cornercorner post 45×45MK7 at 355, 355PLANseven identical blanks · mirror symmetric about X = Y
Plan. The two arms are identical and mirrored about the plane X = Y. The corner panel is square and axis-aligned, centred at 355, 355, its vertex 70.7 mm from the building corner — as close as the 45 × 45 corner post allows. MK2, MK3, MK5 and MK6 are edge-on in this view.
55061052074.3⌀371.4⌀247.6⌀123.8PRINTED BLANKtarget 7 · 12-bit code 011111010000 · 30° per sectormedia, ring and dot are concentric on the marker centre
The printed blank, identical on all seven panels. Standard 1:2:3 coded-target proportions: inner dot ⌀123.8, ring from ⌀247.6 to ⌀371.4, and a 74.3 mm white quiet zone around it. Twelve 30° sectors carry the code.
Where each dimension comes from
DimensionValueThe constraint that fixes it
Panel pitch6101220 × 2440 ACM sheet — eight blanks, zero waste
Print face height316 mm pad stand-off + 25 mm frame depth
Stand-off from each facade31Equal to the height — symmetry, not convenience
Reach, and also height1072.331 + 610 + 610/√2 — equal by construction
Corner panel centre355610/2 + 45 mm post + 5 mm clearance
Vertex to building corner70.7(355 − 305) × √2 — the closest possible
White media520550 less a 15 mm margin each side
Ring diameter371.4520 ÷ 1.4 — a 20% quiet zone
Inner dot diameter123.8Ring ÷ 3 — Metashape's 1:2:3 proportion

The right-hand column is the point. Change the raw sheet and 610 moves with it; change the detection threshold and the print artwork changes. No dimension here is independent, which means no dimension can drift quietly.

Datum

The corner is the intersection of three lines

This is the heart of the method. An external building corner is not a point somebody marked — it is a point the world has already defined, where three real lines meet.

  • A vertical line — where facade A intersects facade B.
  • The first base line — where facade A intersects the slab.
  • The second base line — where facade B intersects the slab.

Three lines, one point. It needs no paint, no peg and no marking — it is implied by three surfaces the builder already poured. And more importantly: that exact point exists as a vertex in the IFC model. Anchor to it and the survey and the model speak the same language without a separate control network.

The fixture locates on the corner by 3-2-1 kinematic constraint: three contacts on the slab, two on facade A, one on facade B. Six contacts for six degrees of freedom — no more, no fewer. No legs, no levelling, no shims. Set it on the corner and it is located. The CAD origin (0, 0, 0) is the building corner itself.

Marker centres — mm from the building corner, exact in CAD
MarkerPanelXYZFrom datum
target 1Slab A−305.000767.33531.0000.8263 m
target 245° A−305.000246.668246.6680.4634 m
target 3Facade A−305.00031.000767.3350.8263 m
target 4Slab B767.335−305.00031.0000.8263 m
target 545° B246.668−305.000246.6680.4634 m
target 6Facade B31.000−305.000767.3350.8263 m
target 7Corner anchor355.000355.00031.0000.5030 m

Why it holds

This geometry is checked on every build of the model: nothing sits in front of any print face, no part penetrates the facades or the slab, no two parts interfere, and mirror symmetry about the plane X = Y is proven part by part. Five checks, at boolean-volume level — not assumptions.

Scale

Not one scale bar — twenty-one

Seven markers produce 21 independent distances, from 0.4752 m to 1.5165 m — a 3.19× spread of scales, every one of them known in CAD.

The difference between one scale bar and 21 is the difference between belief and measurement. With a single bar, a bad observation quietly rescales the model. With 21 independent distances the system is over-determined: an outlier shows up as a residual instead of as a scale error. That residual is something you can put in front of a client.

Three points are enough to fix a rigid six-degree-of-freedom transform. Seven give more than double the redundancy — and therefore robustness: if one marker is obscured, dirty, or falls outside the frame, the solution is still fixed and still checked.

And from there, georeference

Occupy the building corner once with RTK. The moment that point is known in world coordinates, all seven markers are known with it — because their offsets from it are fixed in CAD to the micron. And everything registered to those markers — drone, ground capture, lidar — comes along into the same frame.

The export is a CSV in metres at micron precision, with a 1 mm accuracy field per axis. It loads straight into Metashape as Reference.

Detection

Detection is automatic, and the labels bind themselves

Detect Markers with CircularTarget12bit finds the targets and decodes their IDs. The CSV is imported and binds by label. No manual point picking, at any stage.

For that to actually work, the printed rings have to be legal codes. That is less obvious than it sounds: of the 4096 possible 12-bit ring patterns, only 266 decode at all, and they collapse to exactly 161 IDs1 through 161. An illegal pattern prints perfectly and is never detected, with no warning of any kind.

161 IDs ÷ 7 markers = 23 fixtures on one site before the 12-bit space runs out. There is no need to move to 14- or 16-bit.

The detector also has a size window: the inner dot radius has to land roughly between 5 and 40 pixels. Too large fails exactly as reliably as too small — worth knowing if you photograph a big target from very close.

These targets were sized around a 15 pixel threshold on the inner dot. With a 123.8 mm dot and a Mavic 3E wide lens, that gives automatic detection out to 31 m.

Air ↔ ground

The envelope you can shoot from

The question that matters is not "can you see the fixture" but where can you see at least three markers. Three is the minimum for a rigid transform. The maps below are an actual count: a marker scores only if it is inside the frame, facing the camera, larger than 15 pixels after foreshortening, and unoccluded.

Drone at 20 m — markers detectable per view
Elevation−80−70−60−50−40−30−20−1001020304050607080
80°44555555555555544
70°44445555555554444
60°44444555555544444
50°44555455555455544
40°33333342224333333
30°22222223232222222
20°22222222222222222
10°22222222222222222
Columns: azimuth in degrees from the corner bisector below 3 — not enough 3 — minimum 4 5 or more

The operational conclusion for the drone: at 20 m the envelope is open from 40° elevation upward, at any azimuth — 3 to 5 markers. Below 30° coverage drops to two. A flight plan that holds 40° or above gets the whole fixture.

Ground station, tripod fixed at 1500 mm, 360° camera
Distance−80−60−40−20020406080Elevation
2 m56777776536°
3 m55777775526°
4 m55677765520°
5 m55677765516°
6 m44477744414°
8 m22244422210°
10 m222444222
14 m222242222
Usable from any azimuth at 2, 3, 4, 5 and 6 m — 4 to 7 markers

And that overlap is what the method is built around. The drone looks down and sees mostly the slab panels and the corner panel. The ground scanner, at a metre and a half, sees mostly the facade panels. The 45° panels are visible to both — they are the bridge. Five distinct surface normals on one rigid body is what lets two sensors at opposing angles share identified targets.

Lidar

Lidar does not see ink — it sees return

This trips a lot of people up, so it is worth saying plainly. In pure geometry a printed target is invisible: it is flush in the panel plane, with no bump and no recess. But lidar does not only measure XYZ — it measures return intensity.

At 905 nm, carbon-black ink returns about ρ ≈ 0.06 and matte white vinyl about ρ ≈ 0.80. A ratio near 13:1. The rings stand out in the intensity channel exactly as they do in a photograph.

Four crops from a lidar intensity panorama showing the same coded target at four decreasing resolutions: sharp and legible in the first two, blurred and pixelated in the last two.
What the lidar sees: the facade panel in the intensity channel, from 4 m. Left to right — point spacing 4, 6, 8, 12 mm. The two on the left are decoded automatically by Metashape; the two on the right are not. The noise is 12% speckle plus 4 mm range noise, as on a real scanner.

And Metashape does detect them in the scan

The mechanism exists and works: importing a structured scan with is_laser_scan generates a panorama camera from the scan, and Detect Markers runs on it exactly as on a photograph. The panorama is built at a resolution matched to the scan density.

The table below is an actual run of Metashape's own detector over synthetic scans of the fixture, carrying the seven legal codes:

Automatic detection in a lidar cloud — measured
StationPoint spacingAngularInner dotDetected
Ground, 2 m2.5 mm1.26 mrad25–33 px7 / 7
Ground, 2 m4.0 mm2.05 mrad16–20 px7 / 7
Ground, 2 m6.0 mm3.07 mrad10–14 px7 / 7
Ground, 4 m3.0 mm0.77 mrad15–25 px7 / 7
Ground, 4 m5.0 mm1.29 mrad9–15 px7 / 7
Ground, 4 m6.0 mm1.58 mrad7–12 px7 / 7
Ground, 4 m8.0 mm2.05 mrad5.5–9 px4 / 7
Ground, 4 m12.0 mm3.07 mrad3.7–6 px1 / 7
Airborne, 30 m8.0 mm0.27 mrad8–13 px6 / 7
Airborne, 30 m12.0 mm0.41 mrad5–9 px4 / 7
Airborne, 30 m20.0 mm0.66 mrad3–5 px0 / 7
Airborne, 30 m30.0 mm1.02 mrad2–3 px0 / 7

Rule of thumb: you need about 7 points across the inner dot, measured along the surface. For a 123.8 mm dot that means an on-surface spacing of 17 mm or less.

Note "along the surface". Foreshortening counts in full. A target lying on the slab is struck at 68.6° from a tripod at 1.5 m and 4 m out, so its effective spacing is 2.7× the nominal figure. That is why standing at 2 m beats 4 m — not because of range but because of angle: it brings incidence down to 45–53° and restores 7 out of 7 even on a relatively coarse scanner.

What this means for your kit

  • Tripod or pole scanner — RTC360, FARO Focus, Trimble X7, around 0.3–0.6 mrad: 7 out of 7 comfortably, from 2 to 6 m. Even a 3 mrad SLAM-class scanner gets 7 out of 7 if you stand at 2 m.
  • Airborne lidar — Zenmuse L1 / L2 and similar: will not decode the rings. A typical mission gives 5–10 cm spacing; you need 8 mm, on the order of 15,600 points per square metre. Even slow flight with repetitive scanning falls three to four times short.

The airborne answer

Do not chase ring decoding from the air. The fixture is already an excellent geometric lidar target: seven planes in five distinct normal directions, with relative pose exact to the millimetre in CAD. Even at 20 mm airborne spacing each 550 mm panel still collects about 750 points — ample for fitting planes to the CAD model and recovering all six degrees of freedom. Airborne registration then rides on the same rigid frame the photogrammetric markers sit on.

Light

Shadow: what is actually dangerous and what is not

A coded-target detector works on local contrast, not absolute brightness. A target in full sun and a target in full shade are both decoded. What breaks decoding is a hard shadow edge crossing the ring and splitting it into two brightness regimes.

So that is exactly what was measured: 384 sun directions over the hemisphere (azimuth 0–345° in 15° steps, elevation 10–85° in steps), sampling each target at 81 points over the area the detector actually reads — the inner dot and the coded ring.

384 sun directions — lighting state over the decoded area
MarkerUniformly litUniformly shadedSplitOf which: by the rigSun behind
Slab A2558643260
45° A19674564958
Facade A173033208
Slab B2578641240
45° B21274403358
Facade B176000208
Corner anchor2517162530

Splitting caused by the fixture's own hardware amounts to 188 of 2688 marker-direction combinations, or 7.0%. And here is the whole picture, counted per sun direction:

  • 7 markers uniformly lit — in 185 of the 384 directions
  • 6 or more — in 341 of 384, that is 88.8%
  • 5 or more — in 381 of 384
  • Never fewer than 4 — in any sun direction tested

The requirement is 3. The measurement says at least 4 at every hour of the day, from every direction. There is no window in which it is a bad time to go out.

The two facade panels barely split at all (3 and 0 out of 384) — they are the most shadow-immune, and they are also the ones the ground scanner sees best. That is not luck: a panel flat against a wall with no hardware in front of it has almost nothing that can cast an edge onto it.

Field procedure

What you do on site

  1. Set it on the corner

    The six kinematic contacts seat themselves — three on the slab, two on one facade, one on the other. No levelling, no adjustment.

  2. Occupy the corner with RTK

    One measurement of the building corner. From there all seven markers are known in world coordinates.

  3. Fly, scan, capture

    Drone at 40° elevation or above; ground station between 2 and 6 m; laser scanner at 2 m if you want automatic detection in the cloud as well.

  4. Detect Markers

    CircularTarget12bit. IDs decode themselves and become labels.

  5. Import Reference

    Load the CSV. Binding is by label — not a single point picked by hand.

  6. Check the residuals

    The 21 distances leave the system over-determined. Those residuals are the evidence you can show a client.

Limits

What the method does not do

Every claim here was measured. These are the things that were measured and came back negative, and they belong in the picture as much as the rest.

  • Airborne lidar will not decode the rings. Not at the densities current DJI payloads produce. For airborne registration, use the plane geometry, not the targets.
  • The drone needs at least 30° elevation at 20 m, and 40° for comfortable margin. A very flat approach sees only two markers.
  • Range is 31 m, not 100. The fixture was deliberately scaled down from a 100 m version because the weight there was unreasonable. From 100 m the targets are too small.
  • It needs a genuine 90° external corner. The kinematic location assumes two perpendicular facades and a slab. A rounded, clad or out-of-square corner needs a different design.
  • 7% of sun directions produce a shadow edge on one marker or another. It does not break the solution — at least four always survive — but it is not zero.
What it costs

One sheet, two people, a car boot

Bill of materials — one complete fixture
ItemSpecificationQuantity
ACM sheet1220 × 2440 × 4 mm, 8 blanks per sheet1 sheet
Worked areaSeven identical 550 × 610 blanks2.32 m²
Aluminium profilePanel frames, beams, corner post14.5 m
Total massAssembled fixture12 kg
Transport volumeTwo arms and corner panel, folded650 × 650 × 295 mm

Zero waste on the sheet, one part repeated seven times, and it goes through an ordinary house door. Building four fixtures for the four corners of a structure consumes 28 of the 161 available IDs — still nowhere near the ceiling.

About the numbers. Every figure in this document was measured, not estimated. The geometry is built procedurally and checked on every build by five boolean-volume tests. The coverage maps are a virtual-camera count using the Mavic 3E lens model, including ray-cast occlusion. The lidar results are a run of Metashape 2.3.2's own detector over synthetic structured scans with a physical return model, speckle noise and range noise. The shadow sweep is 384 sun directions over the decoded area only. The table of legal codes was recovered by brute force — all 4096 patterns through the detector — and round-tripped, 161 of 161, zero wrong IDs.

Skylens Viewer

How evidence is delivered in Skylens Viewer

The Viewer does not perform the survey adjustment or invent accuracy. It brings measured outputs, source, position, time and residual evidence into one permission-aware project environment.

Request a Skylens Viewer demo with your own data

Complete one form and choose the data types you want to upload. If approved, you will receive a personal demo workspace for material you own or are authorized to use.

Demo access and uploaded material will remain available for up to 30 days from the date access is granted.

Which data types do you want to test?

Select one or more. These are the working formats supported in the demo path.

Page analytics records funnel progress only. It never includes passwords, survey files or the professional details you type.