Camera Sensors#
Configuration details for supported camera models.
Supported Models#
| Model | Type | Resolution | Frame Rate | Features | Config |
|---|---|---|---|---|---|
| ZED X Mini | Stereo | 1920×1200 | 15-60 FPS | Depth, IMU, AI Detection | camera_model:=zedxm |
| USB Camera | Monocular | Varies | 30 FPS | Basic imaging | camera_model:=usb |
ZED X Mini#
Prerequisites#
Hardware: NVIDIA Jetson with ZED Link Duo capture card (GMSL connection) Software: ZED SDK 5.1.2 (see Installation Guide)
Connection#
Verify detection:
Driver Package#
Location: src/sensor_component/external/zed-ros2-wrapper/
Package: zed_components (composable node architecture)
Plugin: stereolabs::ZedCamera
Special: Namespace Workaround#
ZED Python launch file doesn't respect XML namespaces. Solution: Load composable node directly in XML.
Correct configuration:
<!-- Container with ABSOLUTE namespace -->
<node_container
pkg="rclcpp_components"
exec="component_container_isolated"
name="zed_container"
namespace="/sensing/camera/zedxm"> <!-- Starts with / -->
</node_container>
<!-- Load composable node -->
<load_composable_node target="/sensing/camera/zedxm/zed_container">
<composable_node pkg="zed_components" plugin="stereolabs::ZedCamera" ...>
</load_composable_node>
This creates topics at /sensing/camera/zedxm/* correctly.
Built-in IMU#
ZED has integrated 6-axis IMU (400 Hz, factory-calibrated).
Enable in ZED config:
IMU relay pattern:
Relay configuration:
<node pkg="topic_tools" exec="relay" name="zed_imu_relay">
<remap from="/sensing/camera/zedxm/imu/data" to="/sensing/imu/zed/imu_raw"/>
</node>
Object Detection#
ZED SDK includes AI-based object detection (persons, vehicles, animals).
Enable:
<param name="object_detection.od_enabled" value="true"/>
<param name="object_detection.model" value="MULTI_CLASS_BOX_MEDIUM"/>
<param name="object_detection.confidence_threshold" value="50.0"/>
Output: /sensing/camera/zedxm/obj_det/objects (ZED format)
Disable for performance:
Configuration Options#
Depth Mode:
depth.depth_mode:
NEURAL # Best quality (GPU-intensive)
ULTRA # High quality
QUALITY # Standard
PERFORMANCE # Fast
Frame Rate:
Resolution:
general.grab_resolution:
HD2K # 2208×1242 (highest)
HD1080 # 1920×1080
HD720 # 1280×720
VGA # 672×376 (lowest latency)
Test Standalone#
# ZED SDK test
ZED_Explorer
# ROS 2 wrapper test
ros2 launch zed_wrapper zed_camera.launch.py camera_model:=zedxm
# Verify topics
ros2 topic list | grep zedxm
ros2 topic hz /zedxm/zed_node/rgb/image_rect_color # ~15-30 Hz
Troubleshooting#
Camera not detected:
- Check lspci | grep NVIDIA shows ZED Link
- Check /usr/local/zed/settings/version.txt shows 5.1.2
- Power cycle camera and Jetson
Wrong namespace:
- Use composable node loading (not Python launch file)
- Use ABSOLUTE namespace /sensing/camera/zedxm
VNC issues: - Use TurboVNC + VirtualGL for hardware acceleration - Standard VNC doesn't support GPU
USB Cameras#
Hardware#
- Standard USB webcams (UVC-compatible)
- Connected via USB to Jetson
- Detected as
/dev/video*
Driver#
Package: v4l2_camera
Installation: sudo apt install ros-humble-v4l2-camera
Configuration#
<node pkg="v4l2_camera" exec="v4l2_camera_node" name="usb_camera">
<param name="video_device" value="/dev/video0"/>
<param name="image_size" value="[640, 480]"/>
<param name="pixel_format" value="YUYV"/>
<param name="camera_frame_id" value="usb_camera_link"/>
</node>
Test Standalone#
# List available cameras
v4l2-ctl --list-devices
# Test camera
ros2 run v4l2_camera v4l2_camera_node --ros-args -p video_device:=/dev/video0
Quick Reference#
# ZED SDK tools
ZED_Explorer # Live view
ZED_Calibration # Calibration tool
cat /usr/local/zed/settings/version.txt # Check SDK version
# Topic verification
ros2 topic list | grep /sensing/camera
ros2 topic hz /sensing/camera/zedxm/rgb/image_rect_color
ros2 topic echo /sensing/camera/zedxm/imu/data --once
# USB camera
v4l2-ctl --list-devices
ros2 topic echo /image_raw --once