Isaac ROS Hawk GMSL Stereo Camera Setup#

The Leopard Imaging Hawk is a GMSL2 stereo camera built around two synchronized 1920x1200 AR0234 global-shutter sensors. It is supported by NVIDIA’s Sensor Interface Processing Library (SIPL) framework and integrated to ROS through the isaac_ros_sipl_camera package.

For more information on the SIPL framework, see:

Host System Compatibility#

Only the Jetson AGX Orin Developer Kit on JetPack 7.2.0 (R39.2.0) with a Leopard Imaging Hawk camera attached over GMSL with a P3762_A03 GMSL board was validated together with the Isaac ROS isaac_ros_sipl_camera package. Other platforms may also be compatible.

Hardware Requirements#

  • Jetson AGX Orin Developer Kit with JetPack 7.2 installed.

  • Leopard Imaging Hawk stereo camera (dual AR0234, GMSL2).

  • A GMSL camera distribution board for the Orin AGX (e.g. Leopard Imaging P3762_A03 GMSL board. Older revisions of P3762 and E3653 boards are not currently supported.), with a dedicated 12 V power input and one or more camera channels.

  • The FAKRA/coax cabling that ships with the camera kit.

Note

The GMSL distribution board requires its own 12 V power supply, separate from the Jetson. The board in turn delivers power to the cameras over the coax.

Setup Instructions#

This tutorial assumes you have completed the instructions in Developer Environment Setup.

  1. If the Hawk camera is not connected, power off the Jetson to connect the Hawk camera to the GMSL distribution board. Connect the distribution board to the Jetson, supply the board’s 12 V power, and turn the Jetson back on.

    Note

    A single Hawk stereo pair on channel 0 corresponds to the default link_mask: 0x0001 in hawk_stereo.yaml. After power-up, verify that the corresponding channel LED on the P3762 distribution board is green. An orange LED indicates that the camera is not powered or the link is not established; check the power and connections at the board and camera before continuing.

  2. Install the V4L2 utilities, which provide the v4l2-ctl tool used by the readiness checks below (the base image does not include it):

    sudo apt-get update && sudo apt-get install -y v4l-utils
    
  3. Run the readiness checks.

    Check 1: capture subsystem up (the camera-agnostic path SIPL captures over):

    lsmod | grep -E 'tegra_camera_rtcpu|capture_ivc'
    ls /dev/capture-vi-channel0 /dev/capture-isp-channel0
    

    Both modules and both nodes must be present. If not, the capture subsystem (or RCE firmware) did not come up. Fix this first. These channels are a fixed pool and say nothing about whether a camera is attached.

    Check 2: Hawk overlay applied and links locked. The Hawk overlay binds the max96712 kernel driver and exposes a V4L2 device per locked sensor:

    lsmod | grep max96712
    cat /proc/device-tree/tegra-camera-platform/modules/module0/badge
    v4l2-ctl --list-devices
    

    Expect max96712 listed, an ar0234_* badge, and one or more vi-output, ar0234 <bus>-00xx entries (two /dev/video* nodes per stereo camera).

  4. If Check 2 fails, configure the AGX CSI connector for the P3762 and Hawk camera device-tree overlay with Jetson-IO, then reboot.

    List the camera configurations available on the target:

    sudo python3 /opt/nvidia/jetson-io/config-by-hardware.py -l
    

    Select the Hawk configuration that best matches your setup:

    sudo python3 /opt/nvidia/jetson-io/config-by-hardware.py \
       -n '2=Jetson Camera 1-Hawk p3762 module' && sudo reboot
    

    Jetson-IO creates a boot entry containing both the explicit base FDT and the Hawk OVERLAYS directive.

    If Jetson-IO tool fails with RuntimeError: No DTB found, apply the overlay manually as described in Jetson-IO Cannot Find a Base DTB section.

    After the target restarts, repeat the readiness checks in the previous steps.

Note

On Orin/R39.2 the Hawk overlay binds the kernel max96712/nv_hawk_owl drivers and creates /dev/video* nodes. SIPL does not stream through these, but they are a convenient way to confirm the overlay is applied and the GMSL links are locked. This guide targets Jetson AGX Orin / JetPack 7.2 (R39.2); other releases may not create /dev/video* nodes.

Visualize the Camera Streams#

Use the isaac_ros_sipl_camera package to publish the Hawk stereo streams over ROS 2. Refer to the Isaac ROS SIPL Camera documentation for instructions on how to install, launch the camera driver nodes (GMSL launch tab), and visualize the camera streams. The Hawk publishes /left/image_raw and /right/image_raw at 1920x1200 @ 30 fps.

Troubleshooting#

This section covers problems bringing up the camera hardware and device tree. For problems running the camera nodes, refer to the troubleshooting section of the Isaac ROS SIPL Camera documentation.

Jetson-IO Cannot Find a Base DTB#

Symptom#

config-by-hardware.py exits before it lists or applies any configuration:

RuntimeError: No DTB found for NVIDIA Jetson AGX Orin Developer Kit!

Jetson-IO searches /boot/dtb for a kernel device tree blob whose compatible and model properties both match the running board exactly. This error means the directory holds no matching blob, so the tool exits before it can list or apply anything.

Solution#

Add the base device tree and the camera overlay to /boot/extlinux/extlinux.conf manually. The boot entry must name an explicit FDT. Adding only an OVERLAYS line to an entry that boots the firmware-supplied device tree does not apply the camera nodes.

  1. Install the device tree compiler, which provides the fdtget tool:

    sudo apt-get update && sudo apt-get install -y device-tree-compiler
    
  2. Identify the base DTB that matches the running board. The kernel always exposes the booted board’s compatible property, which identifies the Jetson carrier and module, not the camera. Print it, then list the device trees in /boot that declare the same string:

    board=$(tr '\0' ' ' < /proc/device-tree/compatible | sed 's/ *$//'); echo "$board"
    for f in /boot/*.dtb; do
       if [ "$(fdtget -t s "$f" / compatible)" = "$board" ]; then
          echo "$f"
       fi
    done
    

    The command matches on the compatible property rather than the file name because the two do not always agree.

    An AGX Orin Developer Kit with a p3701-0005 module reports compatible string as nvidia,p3737-0000+p3701-0005 nvidia,p3701-0005 nvidia,tegra234 and matches /boot/tegra234-p3737-0000+p3701-0005-nv.dtb. When several files match, use the -nv variant, which is the device tree the flashing tools install as the kernel DTB. The same device tree can also appear with a kernel_ prefix. These copies are expected to be identical, so either path works.

  3. Identify the Hawk overlay for the number of cameras attached to the board:

    ls /boot/*3762*.dtbo
    

    The one-Hawk configuration uses /boot/tegra234-p3737-camera-p3762-a00-1Hawk-overlay.dtbo.

  4. Back up the boot configuration:

    sudo cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux.conf.bak
    
  5. Add the FDT and OVERLAYS lines to the primary entry in /boot/extlinux/extlinux.conf, leaving the existing APPEND line unchanged:

    LABEL primary
          MENU LABEL primary kernel
          LINUX /boot/Image
          INITRD /boot/initrd
          APPEND ${cbootargs} ...
          FDT /boot/tegra234-p3737-0000+p3701-0005-nv.dtb
          OVERLAYS /boot/tegra234-p3737-camera-p3762-a00-1Hawk-overlay.dtbo
    

    Use one OVERLAYS directive per boot entry. If the entry already has an overlay, append the Hawk overlay to it as a comma-separated list and no spaces.

  6. Reboot and repeat the readiness checks in Setup Instructions:

    sudo reboot
    

Note

An incorrect FDT can leave the target unable to boot. Have a serial console available so you can restore /boot/extlinux/extlinux.conf.bak if the target does not come up.

Frame Drop / Discontinuity Warnings at Startup#

A short burst of ICP Frame drop detected and Frame discontinuity ... frame 0 warnings at node startup is expected as the pipeline fills. The stream settles to a steady 30 fps; these startup warnings can be ignored.