dnovischi/rpicamv3-ros-humble-node

By dnovischi

Updated 7 months ago

Image
Languages & frameworks
Machine learning & AI
Operating systems
0

651

dnovischi/rpicamv3-ros-humble-node repository overview

Overview

dnovischi/rpicamv3-ros-humble-node provides a ROS 2 Humble camera node for Raspberry Pi Camera Module 3 using Picamera2/libcamera.

This image is intended for low-latency live viewing in ROS. By default it publishes:

  • image_raw/compressed (sensor_msgs/CompressedImage, JPEG)
  • camera_info (sensor_msgs/CameraInfo)

Optional outputs (configurable via ROS parameters / launch args):

  • Raw sensor_msgs/Image (uncompressed)
  • H264 (sensor_msgs/CompressedImage)

Source repository:
https://github.com/dnovischi/rpicamv3-ros


How to use this image

Requirements
  • Raspberry Pi with libcamera working (Camera Module 3 enabled)
  • Device access to /dev/media*, /dev/video*, /dev/v4l-subdev*, /dev/dma_heap
  • Host networking is recommended for ROS 2 DDS discovery

Create a compose.yaml:

services:
  rpicamv3:
    image: dnovischi/rpicamv3-ros-humble-node:v1.0.0
    privileged: true
    network_mode: host
    ipc: host
    tty: true
    stdin_open: true
    command: bash
    volumes:
      - type: bind
        source: /run/udev
        target: /run/udev
        read_only: true
      # Optional (development): mount your source tree into the container
      # - type: bind
      #   source: .
      #   target: /ws/src/rpicamv3-ros
    devices:
      - /dev/video0:/dev/video0
      - /dev/video1:/dev/video1
      - /dev/media0:/dev/media0
      - /dev/media1:/dev/media1
      - /dev/media4:/dev/media4
      - /dev/v4l-subdev0:/dev/v4l-subdev0
      - /dev/v4l-subdev1:/dev/v4l-subdev1
      - /dev/dma_heap:/dev/dma_heap
    group_add:
      - video
    security_opt:
      - seccomp=unconfined

Start the container:

docker compose run --rm rpicamv3
Build the ROS workspace (inside the container)
source /opt/ros/humble/setup.bash
cd /ws
colcon build --symlink-install
source /ws/install/setup.bash
Run the node (inside the container)

Default behavior (compressed-only on image_raw/compressed):

ros2 launch rpicamv3_ros rpicamv3.launch.py

Example override (1280x720 @ 30 fps, compressed-only JPEG):

ros2 launch rpicamv3_ros rpicamv3.launch.py \
  publish_raw:=false \
  enable_jpeg:=true \
  width:=1280 height:=720 \
  fps:=30 publish_rate_hz:=30

Topics

  • image_raw/compressed (sensor_msgs/CompressedImage) — JPEG stream (default)
  • camera_info (sensor_msgs/CameraInfo)

Notes

  • RViz “Image” display expects sensor_msgs/Image. For JPEG sensor_msgs/CompressedImage, use image_transport-aware tools or a viewer that supports compressed transport.
  • Container is typically run with privileged: true to ensure reliable access to libcamera media devices.

Tag summary

Content type

Image

Digest

sha256:b58db771b

Size

415.9 MB

Last updated

7 months ago

docker pull dnovischi/rpicamv3-ros-humble-node