An arm hung from the ceiling or a gantry frees floor space and reaches into machines, but the first robot vision session on one often ends the same way: picks land high, land low, or slide a couple of millimetres toward one edge of the tray. The camera calibration itself is rarely wrong. It was made against the robot's factory base frame, whose XY plane sits up at the ceiling mount, while the parts lie on a table that is never exactly parallel to it. On this page you teach a work plane with three jogged points, fit that plane's normal, convert camera pixels into plane coordinates, and prove the whole chain to ±0.5 mm before the first production pick.
Why do picks miss when the robot hangs from the ceiling?
Because the calibration maps camera pixels onto a plane parallel to the robot's base XY, and on a hanging arm that plane sits at the ceiling mount while the parts table sits about 850 mm below it, tilted a few tenths of a degree.
The base frame is machined into the robot's mounting face. Calibrate a camera 'to base' and it reports points on one plane parallel to base XY at a fixed height, so every pick assumes the part lies exactly there. Floor-standing cells get away with it because the table is levelled to the arm during commissioning. Overhead installs usually skip that step: the arm bolts to steel above, the table rolls in below, and nothing checks the two for parallelism.
Run the arithmetic before trusting any of it. A 0.5° tilt between base XY and the table puts the assumed part plane 300 × tan(0.5°) = 2.6 mm off the real surface at 300 mm of reach; the gripper digs into the tray on one side and closes on air on the other. And 0.5° is not an extreme: a table levelled by eye to 1 mm over 300 mm is already 0.2°. The tilt is invisible in a perfect image and fatal at the gripper, which is why the plane, never the base, has to be the calibration target.
Should I calibrate to the base or to a work plane?
Calibrate to a user-defined work plane taught on the actual part surface; the base frame is good enough only on a machined, bolted fixture levelled within 0.05°, which almost no shop table is.
Nearly every robot vision package ships the feature: a work plane, user plane or plane object in the setup tree. Teach it once on the surface the parts sit on, whether tray, fixture plate or machine bed, and every vision output is expressed in it from then on. It is the same construct as the controller's own three-point user frame, so the taught numbers move between controller and vision software without conversion.
Wrist camera or fixed camera changes the hand-eye work, not the plane; the trade-offs are laid out in eye-in-hand vs eye-to-hand camera mounting for robots. If the cell is still on paper, settle the layout questions in 2D vision pick and place: selecting a planar guidance system first. For a map of the calibration cells vendors expose, grid, N-point and robot-driven, read this robot vision calibration integration methods overview alongside.
How do I teach the work plane with three points?
Jog a pointed tool to three non-collinear spots on the part surface, each at least 250 mm from the others, and record the robot XYZ at each; three points fix the plane completely.
- Fit a pointer, a ground pin or the gripper's own pick tip, and set the TCP so the controller reads the tip, not the flange.
- Jog the tip onto the surface at the centre of the pick area, closing in with 1 mm and then 0.1 mm steps. Record P1.
- Jog 250 mm or more along the table's long axis and land the tip again. Record P2. Spacing sets angular resolution: a 0.1 mm height misread over 250 mm is 0.02° of normal error.
- Jog 250 mm or more along the second axis, off the P1–P2 line, and record P3. Three points in a row give a degenerate cross product and a meaningless normal.
- If the vision software has a plane or user-frame feature, enter P1, P2 and P3 there; it builds the frame and you can skip the next step.
- Otherwise compute the normal and offset yourself with the cross product in the next section, and store them with the calibration data.
- Calibrate the camera onto that same plane: lay the calibration grid flat on the surface, or run a multi-point alignment with the target on it. The nine-point variant is the quickest, and robot hand-eye calibration: how nine-point alignment works shows the pattern.
- Route every vision output through the plane transform before it reaches motion: pixel point, then plane millimetres, then the robot command.
With the camera on the wrist, the hand-eye step still applies: the plane fixes where the output lives, and the hand-eye calibration fixes how the camera relates to the TCP. Choose poses that keep the target in view at every station, as eye-in-hand calibration pose selection: robot positions that work sets out.
How do I turn camera pixels into work-plane coordinates?
Multiply pixels by the on-plane scale to get millimetres, then rotate through the taught plane normal before commanding the arm; skip that rotation on a 0.51° tilt and a pick 300 mm out misses by 2.7 mm.
Work it through with real taught points, base frame, millimetres: P1 (400, −150, 850.0), P2 (550, −150, 851.2), P3 (400, 0, 849.4).
- v1 = P2 − P1 = (150, 0, 1.2)
- v2 = P3 − P1 = (0, 150, −0.6)
- n = v1 × v2 = (−180, 90, 22500)
- |n| = √(180² + 90² + 22500²) = 22501
- u = (−0.0080, 0.0040, 1.0000)
- tilt = atan(√(0.0080² + 0.0040²)) = atan(0.0089) = 0.51°
- height error 300 mm from P1 if the tilt is ignored: 300 × 0.0089 = 2.7 mm
Those three taught points looked harmless, with under 2 mm of height spread, yet the fit says the table leans half a degree, and half a degree is a missed pick at the far edge. The image side then needs only the scale: the grid calibration on the plane gives millimetres per pixel, and the rotation built from u carries each point into plane coordinates, where plane Z is zero at the surface. The output pattern matches use eye-to-hand calibration results to compute robot-base picks, with the taught plane standing in for the base.
What camera, lens and settings does the calibration image need?
A 12 MP camera on a 1.1-inch sensor with a 16 mm lens at 300 mm working distance covers a 250 mm field of view at 0.061 mm per pixel, clean margin for a ±0.5 mm pick.
A 12 MP 1.1-inch sensor runs 4096 × 3000 pixels at about 3.45 µm on a 14.1 × 10.4 mm chip. With the wrist holding 300 mm above the table and a 16 mm lens fitted:
- Magnification: m = 16 / (300 − 16) = 16 / 284 = 0.056
- Field of view: 14.1 / 0.056 = 250 mm wide, 10.4 / 0.056 = 185 mm deep
- Object pixel: 0.00345 / 0.056 = 0.061 mm, so a 60 mm part spans about 980 pixels
- Depth of field at f/8, with a 2-pixel circle of 6.9 µm: 2 × 8 × 0.0069 × 1.056 / 0.056² = 37 mm, or ±18 mm, enough for a ±10 mm part height spread; f/4 gives ±9 mm, too tight
- Exposure: a 100 µs strobe pulse at 250 mm/s of wrist motion smears 0.025 mm, under half a pixel; a 2 ms free-running exposure at the same speed smears 0.5 mm, about 8 pixels
On shutter: a rolling sensor reads line by line, so it only works if the arm settles fully before each trigger. A global shutter reads the whole frame in one instant and takes that timing risk off the table.
The MV-CH120-11UC is a 12 MP area scan camera with a C-mount, a USB3 interface and a global shutter.
- Sensor format
- 1.1"
- Lens mount
- C-mount
- Interface
- USB3
- Resolution
- 12 MP
The LS-FFL-0567 is a 16 mm C-mount lens rated at 20 MP, with an F2.8-22 iris and under 0.3% distortion.
- Type
- Machine vision fixed
- Sensor format
- 1.1"
- Mount
- C-mount
- Resolution
- 16-25 MP
A 1.1-inch sensor carries a 17.5 mm diagonal, from √(14.1² + 10.4²), so the lens must hold its image circle above that: the 16-22 mm circle class does, while a 2/3-inch lens vignettes the corners black. Distortion under 0.3% keeps the grid fit clean between nodes. Other sensor sizes and focal lengths are in area scan cameras and machine vision lenses, or in the camera finder.
How do I check the plane calibration before running parts?
Run a five-point check with a fiducial target placed at taught robot positions, and accept the calibration only when every vision report lands within ±0.5 mm of the taught coordinate.
- Mount a target with a high-contrast centre fiducial. Lay it flat at the centre of the pick area and at its four corners, five stations in total.
- At each station, teach the robot the fiducial centre with the pointer, then ask the vision system for the same point in plane coordinates. Log the difference.
- Gate the system at 0.5 mm maximum deviation. Expect far less: one pixel is 0.061 mm and a small six-axis arm repeats within about ±0.05 mm, so a healthy cell reads 0.1-0.2 mm.
- Check scale: displace the target exactly 25.0 mm and confirm the reading moves 25.0 ± 0.2 mm.
- Check height: command the pointer to plane Z = 0 at the farthest station; it should kiss the surface, with no lift and no dig.
The LS-MNT-0220 is a manual XY and rotation stage, 60 mm, on a 60 mm diameter base.
- Type
- Rotary stages
Under the target, its dials give exact, repeatable displacements for the scale test without touching the robot. When a station fails, chase causes in order, plane drift, grid scale, then hand-eye, because that is their likelihood; the failure patterns are mapped in diagnose an eye-in-hand pick point offset. For a fixed overhead camera, the mounting hardware is in camera stands.
When is calibrating straight to the base good enough?
Only when the surface is parallel to the base XY plane within 0.05° and every part sits at one taught height; then the plane assumption costs no more than 0.26 mm across a 300 mm pick area.
| Base-frame calibration | Taught work plane | |
|---|---|---|
| Target plane | Base XY, up at the ceiling mount | The actual part surface |
| Safe when | Machined fixture levelled within 0.05° | Any surface the pointer can touch |
| Error at 300 mm reach, 0.5° tilt | 2.6 mm | Removed by the transform |
| Extra teaching | None | Three jogged points |
| Re-teach triggers | Robot remount only | Table move, collision, camera or lens change |
A precision level reads 0.05°, which is 0.9 mm per metre, and a machined, bolted fixture plate can hold it. Shop tables and pallets measure 0.2-0.5°, so teach the plane unless you can put a level on the fixture and watch the bubble stay put. Parts on a moving belt are a different design altogether; the timing and placement questions start in conveyor tracking camera placement relative to the robot.
What else changes on a hanging or inverted arm?
Re-run the controller's tool load identification for the inverted attitude, set the TCP Z axis to point out of the gripper toward the table, and dress cables so the loop hangs clear of the lens.
An arm bolted overhead loads its joints differently than the same arm standing on the floor, and load data captured in one attitude does not transfer cleanly to the other. Re-identify the tool load with camera and gripper fitted, in the hanging attitude; a tool weight calibration for inverted robots walkthrough covers the steps. Set the mounting-orientation flag, floor or ceiling, if the controller offers one, so gravity compensation and joint limits match reality; the taught plane is unaffected either way.
Two smaller items bite later. Dress wrist-camera cables with strain relief above the connector and a loop that cannot swing in front of the lens at full extension. And if the camera sits in a housing near the ceiling, remember that warm air pools there: size the housing for ceiling temperature, not floor temperature. With the camera on the wrist, run the capture-and-solve sequence upside down at the real stations rather than upright on a bench; robot mounted camera calibration: capture and solve lays out the capture pattern.
What do I check before committing to the layout?
Before ordering anything, confirm the field of view covers the pick area with 20% margin, the lens image circle covers the sensor, and the arm can reach all three teach points without a pose limit.
- Field of view: pick area plus 20% margin inside the 250 mm frame, so a part shoved to a corner still lands in view.
- Image circle: the 16-22 mm class for a 1.1-inch sensor's 17.5 mm diagonal; a smaller circle vignettes the corners.
- Shutter: global, or a settled-trigger budget of at least 100 ms per station.
- Pointer: a tool whose tip the TCP reads, long enough to reach the surface at the teach poses.
- Reach: every teach point and every pick point inside the working envelope, checked at slow speed.
- Software: the plane or user-frame feature present, or a transform step in the pipeline to apply the normal.
- Light: a strobe wired to a trigger output, 100 µs class, bright enough for f/8.
Teach the plane, calibrate onto it, prove it with five points, and a hanging arm guides as well as a floor-standing one. To size the rest of the cell, run the camera configurator with the numbers above, or bring the taught points to the contact page for a second opinion before you buy.
Questions
Can I reuse the robot's existing user frame as the work plane?
Yes, when that frame was taught with a pointer on the actual work surface it is the same plane; most controllers' three-point user frame and the vision system's work-plane feature produce interchangeable numbers. Enter the taught frame values into the vision setup instead of re-teaching. Do not reuse a frame taught on a machine bed or pallet at a different height, or the tilt error comes straight back.
How flat does the table itself need to be?
Hold the surface within about a third of your pick tolerance: a ±1 mm pick wants the surface flat to ±0.3 mm across the whole pick area, checked with a dial indicator on a height stand. A single plane fit cannot follow a warped top; past that limit, teach one plane per fixture or have the surface machined.
Does the work-plane method work when the parts are moving?
No. A taught plane is a static frame, and parts on a running belt leave it immediately. Moving parts need an encoder-synchronised transform and a camera looking at one fixed point in the cell; the plane you taught still helps, but the timing chain is a separate design with its own camera placement rules.
How often should the plane be re-taught?
Re-teach after any collision, after the table or the overhead frame is moved, and after any change of camera, lens or focus. Between events, run the five-point check weekly and re-teach the moment a station passes the ±0.5 mm gate. On long reaches expect a few tenths of a millimetre of seasonal drift as the steel frame breathes.
Is a rolling shutter camera acceptable here?
It can be, if the arm is fully settled before each trigger: allow at least 100 ms of settle time per station and never calibrate on the fly. A global shutter sensor reads every row in one instant, so the 100 µs strobe freezes the scene with no settle dependency, which is why it is the safer default on a moving arm.
What if my vision software has no work-plane feature?
Compute the plane externally and apply it in the data path: the cross product of the two taught edge vectors gives the normal, the rotation matrix built from that normal converts base coordinates into plane coordinates, and you publish that transform next to the camera-to-robot data. A small script or a transform node in the pipeline closes the gap.


