Drobotics logo DROBOTICSTechnical Library

Guides Guide

Raspberry Pi Video Camera Setup

All Guides

Raspberry Pi Video Camera Setup

Complete guide to setting up and testing your Raspberry Pi camera with GStreamer

Introduction

Setting up a video camera on Raspberry Pi is essential for many robotics and computer vision projects. This guide will walk you through the installation of GStreamer, camera testing, and troubleshooting common issues for your drone or robotics projects.

This guide assumes you have a Raspberry Pi with Raspberry Pi OS installed and a compatible camera module connected.

GStreamer Installation

1 Install GStreamer and Required Packages

First, update your package list and install the necessary GStreamer packages and utilities:

sudo apt install -y gstreamer1.0-tools \ gstreamer1.0-plugins-base \ gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad \ gstreamer1.0-plugins-ugly \ gstreamer1.0-libav \ v4l-utils
2 Firmware config

Verify that UART is enabled and dtoverlay is disabled for dwc2/bool/fireware/config.txt

enable_urt=1 #dtoverlay=dwc2

It will make UART enabled this is connected with Pixhawk

3 Check Camera Devices

Verify that your camera is detected by the system:

v4l2-ctl --list-devices

This command will list all video devices connected to your Raspberry Pi.

4 Check Supported Formats

Determine what video formats your camera supports:

v4l2-ctl --device=/dev/video0 --list-formats

Replace /dev/video0 with your camera device if different.

Camera Testing

5 Test Camera with Simple Preview

Run a basic test to see if your camera is working properly:

gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink

This will open a preview window if you have a desktop environment installed.

6 Verify Permissions

Check camera device permissions and add your user to the video group if needed:

ls -l /dev/video0 sudo usermod -a -G video $USER

You may need to log out and back in for group changes to take effect.

7 Test JPEG Capture

Test if your camera can capture JPEG formatted video:

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegdec ! videoconvert ! fakesink

This command processes the video without displaying it (fakesink). It will first produce mjpeg and decode using jpegdec. Since it does not have monitor attached, it's using fakesink, which means fake monitor.

If the above command show continuous video output on the screen that means we our camera is capturing videos.

Troubleshooting

check /dev/video0 user

See how many users the video device has

fuser /dev/video0

If you see multiple PIDs, something else is holding the camera (Mission Planner / another pipeline / Rpanion). Only one should use it.

Check stream bitrate

See how much data is being sent

ifstat -i wlan0 1

Setting pipeline to PAUSED...

Pipeline is live and does not need PREROLL...

WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Could not initialise Xv output

Additional debug info:

../sys/xvimage/xvimagesink.c(1806): gst_xv_image_sink_open (): /GstXvImageSink:autovideosink0-actual-sink-xvimage:

Could not open display (null)

Pipeline is PREROLLED...

Setting pipeline to PLAYING...

New clock: GstSystemClock

Test UDP Video Streaming

Check if video streaming is working over UDP:

gst-launch-1.0 udpsrc port=5600 caps="application/x-rtp, media=video, encoding-name=H264, payload=96" ! \ rtph264depay ! avdec_h264 ! autovideosink sync=false

Setting pipeline to PAUSED...

Pipeline is live and does not need PREROLL...

WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0: Could not initialise Xv output

Additional debug info:

../sys/xvimage/xvimagesink.c(1806): gst_xv_image_sink_open (): /GstXvImageSink:autovideosink0-actual-sink-xvimage:

Could not open display (null)

Pipeline is PREROLLED...

Setting pipeline to PLAYING...

New clock: GstSystemClock

The "Could not open display" warning is normal if you're running headless (without a monitor).

Install Python GStreamer Bindings

For advanced applications, install Python bindings for GStreamer:

sudo apt-get update && sudo apt-get install -y python3-gi python3-gst-1.0
Install RTSP Server Library

For RTSP streaming capabilities:

sudo apt-get update && sudo apt-get install -y gir1.2-gst-rtsp-server-1.0
Quick Camera Streaming Test

Test if video is being streamed from your Raspberry Pi camera:

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=640,height=480,framerate=30/1 ! jpegparse ! multipartmux ! tcpserversink host=0.0.0.0 port=8080

This creates a TCP server streaming video on port 8080.