Cameras & sensorsGuide

IMX219 and IMX477 on Jetson: built-in driver support and stereo sync

Which CSI cameras Jetson Orin NX supports out of the box, how to enable the IMX219 and IMX477 drivers with Jetson-IO, and how to frame-sync a stereo pair.

LumaSpec Vision10 min read Share on LinkedIn

On this page 9 sections
  1. 01The short answer
  2. 02The two sensors the drivers already know
  3. 03Enable the connector: Jetson-IO, step by step
  4. 04The sensor numbers that decide stereo quality
  5. 05Worked example: depth accuracy of a two-camera head
  6. 06Frame sync: why FSYNC beats software triggering
  7. 07When the usual answer is wrong
  8. 08Checks before you order
  9. 09Questions

Building a stereo depth rig on a Jetson Orin NX 16GB with JetPack 5.1 raises two questions before anything moves: which cameras the module will actually drive, and how to make two of them expose at the same instant. Your supplier's catalogue does not match the platform vendor's partner-camera list, which makes the choice look riskier than it is. For the two most common CSI sensors the answer is simple: IMX219 and IMX477 have drivers built into the image, and the connectors are switched on in software. You will leave with the enable procedure, the sensor numbers that set depth accuracy, a worked accuracy example with the arithmetic shown, and the sync wiring that makes a two-camera pair usable for object detection and depth estimation.

The short answer

For this module family on JetPack 5.1:

  • IMX219 and IMX477 work out of the box. Drivers for both ship in the default distribution. No vendor SDK, no device-tree overlay, no kernel rebuild.
  • Each CSI connector must be enabled first. The Jetson-IO utility configures the CSI connector; pick the entry matching your modules and reboot.
  • Sync decides depth quality. Share one FSYNC pulse between the two sensors so both exposures start together. The software sync samples are a fallback for static scenes only.
  • Know when to step up. Moving parts, calibrated dimensions or parcel volume point to a binocular board module or a dedicated 3D camera instead.

The generic bring-up checks live in CSI camera carrier board compatibility: what to verify; this page covers what is specific to these two sensors.

The two sensors the drivers already know

JetPack 5.1 ships in-kernel drivers for IMX219 and IMX477. These are the sensors inside the most common low-cost CSI modules, so availability is rarely the obstacle the partner list suggests. A module wired to the standard sensor configuration binds to the built-in driver unchanged. A board that changes the clock, the lane assignment or the power-up sequence needs an overlay from the board vendor. The same 22-pin connector says nothing about the driver behind it: MIPI CSI-2 camera compatibility: beyond the connector covers that gap.

Both sensors are rolling shutter. That is invisible on a static bench and decisive on a moving conveyor — a point that returns in the frame-sync section and again at the end of this guide.

Enable the connector: Jetson-IO, step by step

CSI connectors on the carrier ship disabled. The reference boards in this family carry two 22-pin camera connectors, and Jetson-IO switches each one over to a selected camera.

  1. Run the Jetson-IO utility on the module. It ships with the JetPack image and edits the connector configuration.
  2. Choose the option to configure the CSI connector for compatible hardware.
  3. Select the camera entry that matches the modules: two IMX219 boards take the dual IMX219 entry, listed as Camera IMX219 Dual; an IMX477 takes the IMX477 entry.
  4. Save and reboot. The driver binds to each enabled connector at boot.
  5. Verify that the sensors appear as V4L2 video devices (/dev/video0 and /dev/video1) and that a one-frame capture from each returns an image.
  6. If a sensor is missing: power down, reseat the flex fully home in its 22-pin connector, re-run Jetson-IO, and only then ask whether the board needs the vendor overlay.

One special case: if the IMX219 head sits at the end of a SerDes link rather than directly in the connector, capture failures have their own sequence — IMX219 SerDes capture troubleshooting on Jetson Orin NX walks it step by step.

The sensor numbers that decide stereo quality

Sensor Resolution Pixel size Active area Optical format Shutter
IMX219 3280 × 2464 (8 MP) 1.12 μm 3.67 × 2.76 mm 1/4 in rolling
IMX477 4056 × 3040 (12.3 MP) 1.55 μm 6.29 × 4.71 mm 1/2.3 in rolling

Three of these numbers drive stereo quality. Pixels across the scene set disparity resolution: for the same lens, the IMX219 puts more pixels on the same object. Light per pixel sets matching reliability: the IMX477's 1.55 μm pixels collect (1.55 / 1.12)² ≈ 1.9× more light than the IMX219's, so matches hold at lower illumination. Shutter type sets whether a moving part survives capture at all.

Use the same lens model on both sides. A mixed focal-length pair can be calibrated in theory, but it is a debugging tax you pay for the life of the rig.

Worked example: depth accuracy of a two-camera head

Stereo depth comes from the disparity d between two views separated by a baseline B:

FOV = WD × sensor_width / f f_px = f / pixel_size z = B × f_px / d Δz = z² × Δd / (B × f_px)

Take two IMX477 boards, 6 mm M12 lenses, a 120 mm baseline and parts at a 600 mm working distance.

  • Field of view: 600 mm × 6.29 mm / 6 mm = 629 mm wide.
  • Focal length in pixels: 6 mm / 0.00155 mm = 3871 px.
  • Depth noise per pixel of disparity error: (600 mm)² × 1 px / (120 mm × 3871 px) = 360,000 / 464,520 = 0.77 mm.

One pixel of matching noise costs 0.77 mm of depth at 600 mm. Correlators on textured parts typically repeat to 0.1–0.2 px, which lands practical noise near 0.1–0.2 mm. Back the rig up to 1,200 mm and the same head degrades 4×, because Δz scales with z²: 3.1 mm.

Swap in the IMX219 with the same 6 mm lens and the calculated number improves: 6 mm / 0.00112 mm = 5357 px, so Δz = 360,000 / (120 × 5357) = 0.56 mm. But the field narrows to 600 mm × 3.67 mm / 6 mm = 367 mm, and the 1.12 μm pixels need more light before matching is as steady.

Decision: for a ±1 mm depth tolerance at 600 mm, IMX477 with 6 mm lenses on a 120 mm baseline clears the budget with margin. Need more? Lengthen the baseline or add light before changing sensors.

For a different working distance or lens, this calculator sizes the field of view and links to matching lenses:

Lens focal length, field of view and working distance
Units
Solve for
Focal length
– mm
Field of view
– mm
Working distance
– mm
Magnification
– x
Angle of view
– °
Pixel on the part
– mm

Thin-lens model: m = sensor width / field of view, f = WD × m / (1 + m). Accurate to a few percent above about 150 mm; check the lens's minimum object distance.

Find lenses with this focal length Open the full calculator

Frame sync: why FSYNC beats software triggering

Stereo matching assumes both frames saw the same instant. Two software-started captures drift with CPU load, and the drift lands directly in disparity: a part that moves 10 mm between the two exposures reads as 10 mm of false depth. That is why the platform's stereo samples are samples, not a synchronization design.

FSYNC is the sensor's frame-start line. Wire one board as the master that generates the pulse and the other as the slave that takes it, and both exposures start within microseconds, independent of software load. The sensor supports this; the module decides whether the pin reaches the connector. Many low-cost boards leave it unconnected, so order boards with a sync line if depth matters.

Verify the wiring by pointing both cameras at a blinking LED: a synced pair captures the LED at the same state in both frames, while a drifting pair shows it in different positions.

The software fallback is real but limited. The Argus samples under Argus/public/samples/ — syncStereo and syncSensor — align two streams in software. They are fine for a static bench and for bring-up; they do not survive fast motion.

Two links worth keeping handy. A hardware trigger wired or configured wrongly gives worse results than software timing — the failure mode and its fix are in Hardware sync gives worse calibration than software: fix the trigger. And when a stereo pair streams RGB but returns no depth, the cause is usually a missing second sensor stream rather than geometry: Stereo camera works for RGB but no depth: fix missing mono sensors. For two CSI cameras on lane-limited connectors, Two single lane CSI cameras for stereo: what to verify lists the checks specific to that layout.

When the usual answer is wrong

The two-CSI-camera build is right when the scene holds still during exposure, carries enough texture to match, and needs relative depth rather than calibrated gauges. Four cases point elsewhere.

Moving parts. Both sensors are rolling shutter, so a part travelling during exposure is sheared in both frames and disparity fails at the edges. On a conveyor, use global-shutter stereo with a shared trigger — the wiring carries over from Hardware sync two USB cameras: trigger both cameras together — or measure per line with a profiler.

Calibrated dimensions. If the output must be millimetres with a tolerance attached, a structured-light system returns a calibrated depth map with no stereo calibration to maintain. The MV-DPS200P-02 is a projected structured-light 3D camera: pattern in, calibrated depth out.

3D sensorsHikrobot MV-DPS200P-02 Projected structured-light 3D cameraMV-DPS200P-02
Type
Stereo / structured light
$8,829.00 · quotedView and quote

Volume and logistics. Box and pallet dimensioning is a packaged problem: a speckle structured-light volume camera returns calibrated depth out of the box, so the integration work is placement and data handling, not photogrammetry. The logistics and volume 3D cameras in the 3D sensors category are built for exactly that job.

One-interface stereo. If two CSI drivers plus a sync wire are more integration than the project buys, a binocular board-level camera pairs matched sensors behind one interface. The LS-BCM-0043 carries two 1/2" global-shutter sensors on one USB3 module. Its catalogue entry lists 1280 × 1024 at 123 fps. The LS-BCM-0059 takes the split-sensor approach over GigE in mono. For the fuller comparison, see Board level camera selection for embedded vision machines.

Board-level camerasBinocular camera / module, 1.3 MP, USB3, Colour/Mono, 1280 x 1024 @ 123FPS resolution (LS-BCM-0043)LS-BCM-0043
Sensor format
1/2"
Lens mount
M12
$179.00View part
Board-level camerasGigE board camera with split sensor, 1.0 MP, Mono (LS-BCM-0059)LS-BCM-0059
Sensor format
1/4"
Lens mount
M12
$209.00View part

For packaged 3D beyond these two, the 3D sensors finder lists profilers, structured-light and volume systems in one place.

Checks before you order

  • Connector count. Two free 22-pin CSI connectors on your carrier board; reference boards carry two, custom boards may carry fewer.
  • Module wiring. Standard sensor configuration binds to the in-kernel driver; anything modified needs the board vendor overlay, so ask before buying.
  • Sync. Confirm the module routes FSYNC to a pin you can wire master-to-slave; otherwise plan for static-scene capture only.
  • Lens pair. Same lens model both sides, on a mount whose coverage matches your field of view — most modules take M12 board lenses.
  • Baseline mechanics. A rigid bracket at a measured spacing; 120 mm of aluminium holds its length far better than cantilevered plastic.
  • Motion. Parts still during exposure, or global shutter and profiling instead.
  • Texture. Matte, patterned scenes match reliably; bare plastic needs projected pattern or a structured-light camera.

When the checklist passes, size the head in the camera finder or start at the camera configuration step. If the build ends up needing a quoted 3D sensor alongside the Jetson, the contact page reaches the applications team. Related integration pages sit on the cameras topic page.

Questions

Do both camera connectors on the carrier board support these sensors?

The carrier boards in this family expose two 22-pin CSI camera connectors, and either drives an IMX219 or IMX477 module once Jetson-IO is configured for that connector. An unconfigured connector enumerates nothing, which looks exactly like a dead camera. If your carrier board is not the reference board, confirm its connector count first — that is a board feature, not a module feature.

Can I mix one IMX219 and one IMX477 as a stereo pair?

Both drivers load independently, so the pair will stream, but stereo matching wants matched sensors. With the same 6 mm lens at 600 mm the fields of view differ (367 mm versus 629 mm), the pixel scales differ, and the noise floors differ, so matching degrades at the edges. Keep both sensors the same model and the same module revision.

How wide a baseline do I need for ±5 mm depth at 1 m?

Rearrange the accuracy formula: B = z² × Δd / (f_px × Δz). With an IMX477 and a 6 mm lens, f_px is 3871 px, so at z = 1000 mm with 1 px of disparity error, B = 1,000,000 / (3871 × 5) = 52 mm. Subpixel matching at 0.2 px relaxes that to about 10 mm, but keep margin for calibration error.

Why does my third-party IMX477 module show a black image on JetPack 5.1?

The in-kernel driver targets modules wired to the standard sensor configuration. Boards that change the clock, lane count or power-up sequence need the vendor's own device-tree overlay, and without it you get a black or torn image. First confirm the connector is enabled in Jetson-IO and the flex is fully seated, then apply the board vendor's overlay before suspecting the sensor itself.

Is a USB3 board camera simpler than CSI for stereo?

For bring-up, yes: a USB3 board camera enumerates on any host without device-tree work, and industrial models expose hardware trigger lines, so frame sync becomes a wiring task instead of an overlay task. CSI wins when USB ports are scarce, when the head must be minimal, or when you want the module's ISP pipeline doing image processing on the Jetson itself.