Skip to content

Camera & ROS 2

Integrating a USB or Raspberry Pi camera with ROS 2 using usb_cam or v4l2_camera.

Installation

bash
sudo apt install ros-humble-usb-cam ros-humble-v4l2-camera

Launch USB Camera

bash
ros2 run usb_cam usb_cam_node_exe --ros-args \
  -p video_device:=/dev/video0 \
  -p image_width:=640 \
  -p image_height:=480

View Image

bash
ros2 run rqt_image_view rqt_image_view /image_raw

Subscribe in Python

python
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2

class CameraNode(Node):
    def __init__(self):
        super().__init__('camera_node')
        self.bridge = CvBridge()
        self.sub = self.create_subscription(
            Image, '/image_raw', self.callback, 10)

    def callback(self, msg):
        frame = self.bridge.imgmsg_to_cv2(msg, 'bgr8')
        cv2.imshow("Camera", frame)
        cv2.waitKey(1)

rclpy.init()
rclpy.spin(CameraNode())

Camera Calibration

bash
ros2 run camera_calibration cameracalibrator \
  --size 8x6 --square 0.025 \
  --ros-args -r image:=/image_raw

WARNING

Always calibrate your camera before using it for ArUco pose estimation or depth calculations.

Released under the MIT License.