Skip to content

Holoscan ROS2 IMX274 Camera#

Authors: Holoscan SDK Team (NVIDIA)
Supported platforms: aarch64
Language: C++
Last modified: July 16, 2026
Latest version: 1.0.0
Minimum Holoscan SDK version: 3.0
Tested Holoscan SDK versions: 4.4
Contribution metric: Level 1 - Highly Reliable

Overview#

This unified IMX274 Camera application demonstrates advanced usage with real camera hardware, containing both publisher and subscriber components in a single structure. The application shows how to:

  • Capture images from an IMX274 camera (Holoscan Sensor Bridge) using Holoscan (Publisher mode)
  • Process camera data through a complete pipeline
  • Publish processed images to ROS2 topics for visualization or further processing
  • Subscribe to and visualize camera streams (Subscriber mode)

The application uses modes to run either the publisher or subscriber component, with both C++ implementations organized under a unified cpp/ directory.

Unlike the RoCE-based sensor bridge examples, this application receives camera data with the Linux socket receiver (LinuxReceiverOp) over the standard Linux network stack. On NVIDIA Jetson AGX Thor this uses the built-in MGBE 10GbE ports — no ConnectX NIC or RDMA/RoCE support is required.

File Structure#

applications/holoscan_ros2/imx274/
├── CMakeLists.txt          # Top-level build configuration
├── Dockerfile              # Container build (ROS2 Jazzy + holoscan-sensor-bridge)
├── README.md               # This file
└── cpp/                    # C++ implementation
    ├── CMakeLists.txt      # C++ build configuration
    ├── metadata.json       # Application metadata with modes
    ├── convert_16bit_to_8bit_kernel.h    # CUDA conversion kernel header
    ├── convert_16bit_to_8bit_kernel.cu   # CUDA conversion kernel
    ├── imx274_publisher.cpp    # Publisher implementation
    └── imx274_subscriber.cpp   # Subscriber implementation

Prerequisites#

  • NVIDIA Holoscan SDK v3.0 or later (container base image: holoscan:v4.4.0-cuda13)
  • ROS2 Jazzy (all examples and Dockerfiles are tested with Jazzy; other distributions may work but are not tested)
  • Docker (with NVIDIA Container Toolkit)
  • NVIDIA GPU drivers (suitable for your hardware and Holoscan SDK)

For IMX274 camera capture (publisher mode), you'll also need:

  • Holoscan Sensor Bridge (Hololink) board with an IMX274 camera module
  • Proper network configuration for camera communication (see below)

Tested on NVIDIA Jetson AGX Thor (JetPack 7.x, 6.8.12-*-tegra kernel, aarch64).

Network Setup#

Before running the IMX274 publisher, ensure proper network configuration:

  • Default Hololink board IP: 192.168.0.2
  • Connect the sensor bridge to one of the Thor MGBE ethernet ports and give that interface an address on the same subnet (e.g. 192.168.0.101/24)
  • Verify connectivity with ping 192.168.0.2
  • The Linux socket receiver benefits from a large kernel receive buffer, e.g.:
sudo sysctl -w net.core.rmem_max=31326208

No InfiniBand/RoCE (IBV) device configuration is needed.

Building the Application#

Build the unified IMX274 camera application:

./holohub build imx274

The build uses the public holoscan-sensor-bridge repository, built with -DHOLOLINK_BUILD_ROCE=OFF.

Application Modes#

The imx274 application uses modes to handle the publisher and subscriber components. You can list available modes using:

./holohub modes imx274 --language cpp

Available modes:

  • publisher: Captures and publishes IMX274 camera images (default mode)
  • subscriber: Receives and visualizes camera images

Running the Application#

Publisher Mode (imx274_publisher.cpp)#

Captures images from an IMX274 camera using Holoscan and publishes to ROS2:

  • Receives CSI frames over UDP (Linux socket receiver / Thor MGBE)
  • Processes images through a complete pipeline:
  • CSI to Bayer conversion
  • Image processing
  • Bayer demosaicing
  • GPU 16-bit to 8-bit RGB conversion
  • Publishes processed images to ROS2 topic imx274/image
  • Supports various camera modes and configurations

Usage:

# Run publisher (default mode)
./holohub run imx274 [options]
# Or explicitly specify publisher mode:
./holohub run imx274 publisher [options]

Publisher Options:

  • --camera-mode: IMX274 mode (0: 3840x2160 60FPS, 1: 1920x1080 60FPS (default), 2: 3840x2160 60FPS 12-bit)
  • --frame-limit: Exit after publishing specified number of frames
  • --hololink: IP address of Hololink board (default: 192.168.0.2)
  • --expander-configuration: I2C expander configuration (default: 0)
  • --pattern: Enable the sensor test pattern (0-11); useful for verifying the pipeline without a lens

Subscriber Mode (imx274_subscriber.cpp)#

Subscribes to camera images from ROS2 and visualizes them:

  • Subscribes to the imx274/image ROS2 topic
  • Receives and processes the images
  • Visualizes images using Holoviz
  • Supports headless and fullscreen modes

Usage:

./holohub run imx274 subscriber [options]

Subscriber Options:

  • --headless: Run in headless mode
  • --fullscreen: Run in fullscreen mode

Additional Resources#

Documentation#

  • Applications Overview: ../ - Background on ROS2 and Holoscan integration
  • Simple Examples: ../pubsub/ - Basic publisher/subscriber communication
  • VB1940 Examples: ../vb1940/ - RoCE/ConnectX based variant for the VB1940 (Eagle) camera
  • Bridge Library: ../../../operators/holoscan_ros2/ - Bridge implementation and headers

Community and Support#