An overhead camera turns mobile-robot localization into a tracking problem: follow the marker on the chassis against a known origin. That works in a lab and struggles on a real floor, where ceiling height, racking and a building-sized route get in the way. If you are closing a position loop — PID or state feedback — on a wheeled robot and need (x, y, θ) without a ceiling camera, the sensors go on the robot itself. Wheel encoders and an IMU supply a high-rate estimate that always drifts; an absolute source such as taught-map LiDAR SLAM or printed fiducial tags resets that drift; UWB beacons cover zone-level jobs. The sections below give the accuracy to expect from each option, the arithmetic that sizes a tag camera, and the decision for each case.
What replaces an overhead camera on a wheeled robot?
Put the sensors on the robot and split the job: wheel encoders plus an IMU estimate motion at high rate, while an absolute source — taught-map LiDAR SLAM (tens of millimetres), printed fiducial tags (centimetres at rated range) or UWB beacons (10-30 cm) — resets the drift before it bends the loop.
The controller consumes one fused (x, y, θ) stream, so the architecture is the same in every installation: a fast relative estimate, a slower absolute correction, and a filter that joins them. Only the absolute source and its accuracy change. The sections take the options in the order you meet them: how far odometry drifts, how SLAM and tags anchor it, when beacons suffice, and how to size the camera that reads the tags.
How far do wheel encoders and an IMU drift alone?
On a clean floor, encoder odometry accumulates roughly 1-2% of the distance travelled, and heading is the dangerous part: a steady 1° of heading error bends a 10 m straight run about 175 mm off target (10 m × sin 1° = 0.175 m).
Differential-drive odometry integrates the wheel motions:
Both lines assume rolling without slip — the usual published band for differential drive on a clean floor is that 1-2% — and slip breaks the assumption exactly where floors are dusty or the chassis is skid-steered. The gyro in an IMU ignores slip but carries its own bias: a consumer MEMS part with about 10°/h of bias stability adds roughly 0.17° per minute (10/60), so five minutes of dead reckoning can hold a degree of heading error — the same 175 mm class of miss over a 10 m leg.
Odometry alone is for bridging short gaps between absolute fixes, not for closing a loop across a route. The standard join is a Kalman-family filter: the wheel odometry, IMU and EKF fusion guide steps through the predict-update loop in code, and this IMU-based localization walk-through on a small robot covers the configuration side end to end.
How does taught-map LiDAR SLAM localize the robot?
Drive the route once with a scanning LiDAR to record a 2D occupancy map, and scan matching then reports (x, y, θ) on every sweep — 10-40 Hz typical — holding tens of millimetres of accuracy, the docking figure warehouse AGV makers publish.
A particle filter re-localizes globally once the map exists, so the robot recovers its pose after power-up or after someone carries it past a junction. Long, blank corridors weaken the estimate along the corridor axis, so drop a column, a notched panel or a reflector where the walls run featureless. The scanner is a Class 1 laser product, safe under normal operation, and its mounting height must match the height used when the map was taught.
We do not carry navigation scanners: the laser profilers in the 3D sensors category are fixed-mount sheet-of-light units for inspection, not the spinning 2D scanner this job needs. Source the scanner and its compute from a robotics supplier, and plan the re-teach whenever the layout changes — that re-teach is the real running cost of SLAM.
Can printed fiducial markers give the absolute fix?
Yes: print tags from a family such as AprilTag tag36h11 or ArUco, fix each one at a surveyed pose, and every detection returns an absolute (x, y, θ) fix that resets odometry drift, good to centimetres while the tag fills enough of the image.
A calibrated camera is the only hard requirement: intrinsics (focal length, principal point, distortion) turn corner pixels into a pose, and the OpenCV fiducial pose estimation guide shows that pipeline. Stationary-tag jitter comes mostly from corner noise and range; the planar tag pose jitter reduction guide lists the fixes, filtering the pose before it enters the loop among them. Any area scan camera with a global shutter and calibrated intrinsics does the job; the next section sizes the tag against the pixel budget.
How do you size a tag for your camera and working distance?
A 100 mm tag on a 1920-pixel camera with a 90° horizontal field of view projects to about 96 pixels at 1 m — solid for a pose fix — and drops below a workable 60 pixels past roughly 1.6 m.
Two budgets matter: detection holds from about 20 pixels across the tag, a trustworthy pose fix wants 60 or more. Pinhole projection sets both:
The lens follows from the sensor: a 1/1.7-inch sensor is about 7.5 mm wide, so 90° of horizontal view needs f = (7.5/2) / tan 45° = 3.8 mm. Wide angles bend straight lines, so calibrate the distortion before trusting a pose, and remember the field grows linearly with distance — the FOV and working distance guide plots that line. Turn your own sensor width and target FOV into a lens pick here:
Monocular tag pose is weaker along the camera axis than across it: reported depth error runs 1-2% of range, so 10-20 mm at 1 m and 33-66 mm at the 3.3 m figure above. That re-anchors odometry well; it does not dock, so dock on a close-range tag or a mechanical datum. When a tag returns a distance that cannot be right, the fiducial wrong-distance checklist traces most causes to intrinsics or frame chains.
When is UWB or beacon positioning enough by itself?
For zone control, yes: commercial UWB TDoA systems resolve a robot-mounted tag against fixed anchors to about 10-30 cm, enough to gate junctions and assign lanes, not enough to dock or close a positioning loop on a 100 mm target.
TDoA — time difference of arrival — wants three or four anchors per zone, surveyed in, and one tag on the robot; answers come fast and cover a building. Wi-Fi and RSSI beacon schemes sit at metre-class accuracy: traffic logic only, never positioning. Treat UWB as the traffic layer under SLAM or tags, not as their replacement.
How do you fuse the fast drift with the slow absolute fix?
Run an extended Kalman filter: predict (x, y, θ) from wheels and gyro at the control rate, update whenever the LiDAR or the camera returns a fix, and gate each fix so one bad detection cannot jerk the loop.
A 100-200 Hz predict step rides on odometry and gyro; fixes arrive at 10-30 Hz from the scanner or the camera. The innovation gate — a chi-square test on the measurement residual — rejects tags read outside the pose budget and scans matched against a moved pallet. Between fixes the uncertainty grows, and that growth is the number to watch when you judge whether a fix rate is good enough; the mobile-robot localization confidence troubleshooting guide walks that diagnosis. Feed the fused estimate, not the raw fix, to your PID or state-feedback law.
Which localization option fits your case?
For a lab cell or a fixed dock, print tags; for a robot covering changing layouts and long routes, teach a map with 2D LiDAR SLAM; for junction gating across a large floor, add UWB zones; and run odometry plus an IMU under all of them.
| Approach | Absolute accuracy | On the robot | Setup | Fits when |
|---|---|---|---|---|
| Odometry + IMU only | Drifts 1-2% of distance plus heading error | Encoders, MEMS IMU | None | Bridging short gaps between fixes |
| 2D LiDAR SLAM | Tens of mm | Scanning LiDAR, compute | Teach once, re-teach on layout change | Long routes, changing floors |
| Fiducial tags | cm-level inside the pose budget (1.6 m in the worked example) | Calibrated camera | Print, laminate, survey | Lab cells, docks, junction anchors |
| UWB TDoA | 10-30 cm | Robot tag | 3-4 surveyed anchors per zone | Traffic control, zone gating |
A picking cell with three stations needs one camera and half a dozen printed tags — an afternoon of work. A tugger covering 200 m of aisle needs the taught map, because tag maintenance over that area never pays back. A mixed plant gets SLAM for travel and a docking tag at each stop, with the filter trusting the tag heavier inside its short range.
What do you check before ordering the camera and lens?
Buy global shutter, budget exposure for motion blur, and calibrate intrinsics before the first run: at 1 m/s, a 2 ms exposure smears the image 2 mm — about 2 pixels at the 1.04 mm/px of the worked example — while a 10 ms exposure at that speed is unusable.
Work the list before the order goes in:
- Global shutter — a rolling shutter shears the tag corners while the robot moves, and the pose math reads that skew as tilt.
- Exposure of 2-3 ms or less at 1 m/s — recover the light with illumination or gain, not with exposure time.
- Matte, flat-mounted tags — the lamination warning above is the most common field failure.
- Intrinsics calibrated at the running distance, with a checkerboard or ChArUco board.
- Tags surveyed to ±5 mm — placement error feeds straight into the map.
- A stop test: drive 10 m out, command a return, measure the final offset against the surveyed pose.
Two cameras cover most tag jobs. For the standard case, a compact global-shutter GigE model is the right size:
- Sensor format
- 1/1.7"
- Lens mount
- C-mount
- Interface
- GigE
- Resolution
- Up to 3 MP
When the aisle is wide and the tag must be read from metres away, spend pixels rather than tag area:
- Sensor format
- 1.1"
- Lens mount
- C-mount
- Interface
- USB3
- Resolution
- 12 MP
Size the lens with the focal-length math above, then finish the build in the camera finder or start at the camera configurator. Send us the route sketch — aisle widths, stop positions, ceiling height — and we will return the tag sizes and the lens pick, or work through it with you via the contact page.
Questions
How many tags does a route need?
Put a tag wherever the robot must re-anchor: every stop, dock and junction, plus intervals along open runs no longer than the pose budget from the sizing math — about 1.6 m for a 100 mm tag at a 60-pixel budget. If you accept more drift between fixes, stretch open-run spacing to 3-5 m, since uncorrected odometry adds only 1-2% of the distance travelled over each gap.
Can a standard USB webcam read AprilTags for localization?
Yes, provided you calibrate it: the intrinsics — focal length, principal point, distortion — are what turn corner pixels into a pose, and any fixed-lens USB camera can be calibrated at its running distance. Prefer a global shutter on a moving robot, disable autofocus so the focal length cannot change under the calibration, and keep the working distance fixed.
Does LiDAR SLAM need reflectors or wall markers?
No: the scanner matches natural geometry such as walls, racking and columns. Long featureless corridors weaken accuracy along the corridor axis, so add a column, a notched panel or a reflector there. Keep the scanner at the mapping height, and plan a re-teach whenever the layout changes, because a stale map is the main way SLAM installations drift out of spec.
What frame rate does the localization camera need?
30 fps is enough in almost every case. A robot at 1 m/s moves 33 mm between frames, and the odometry-plus-gyro loop bridges that gap at 100-200 Hz, so fix quality matters more than fix rate. Go faster only for cells above about 2 m/s, or if your fix gate rejects measurements for being stale.
Is an IMU still worth fitting when LiDAR SLAM runs?
Yes — it is the cheapest part of the stack and the one that carries heading between sweeps. The gyro holds orientation through spins, ramps and the feature-dropped moments when scan matching degrades, while the encoders propagate the pose at control rate; SLAM corrects both. Without them, the filter has nothing trustworthy to predict with between fixes.

