Toolbox Interactiondesign


Emerging Technologies

Der Raspberry Pi als drittes Auge

Einen kableloser Live-Videostream von der Pi-Kamera

Robin Krause, 24.04.2014 | Cam-Eleon bei Sascha Reinhold

Raspberry Pi – der kleine Alleskönner kurz und knapp 

Der Pi ist ein kleiner Einplatinencomputer mit einem auf Linux basierende Betriebssystem, das von einer SD-Karte gebootet wird. Er verfügt über Audio- und Videoausgänge via HDMI ebenso wie über Composite-Video und 3.5mm Mini-Klinke. Dank seiner GPIO-Pins, kann man zudem externe Sensoren wie beispielsweise eine GPS-Modul oder ein NFC-Reader mit ihm verbinden und in die die Python geschriebenen Programme einbinden. Der Pi eignet sich dank seines geringen Energiebedarfs zudem für den mobilen Einsatz über einen Akku.

Vorbereitung – Den Raspberry Pi für den Einsatz als kabellose Kameraeinheit fit machen

Vorbereitung der SD-Karte
Raspberry Pi anschließen
  • SD-Karte in den dafür vorgesehenen Einschub am Pi schieben
  • beim ersten Mal empfiehlt es sich alle Komponenten am besten auch schon die Kamera aber min. den Bildschirm und die Tastatur anzuschließen
  • Raspberry Pi an das micro USB Netzteil (5V und min 700 mA) anschließen
Raspberry Pi für kabellosen Netzwerkzugriff und Kamera konfigurieren
  • Expand Filesystem – nein
  • Change User Password – ja (Ein neues Passwort eingeben und merken – default raspberry)
  • Enable Boot to Desktop – nein
  • Internationalisation Options: change locale – en_GB.UTF-8 UTF-8 /change timezone – europe – berlin /change keyboard layout – generic 105key – german – german – default – no compose key – yes
  • camera – enable
  • add to rastrack – nein
  • overclock – turbo
  • advanced options: overscan – nein /  hostname – picamera(laufendenummer) / memory split – min. 256mb / SSH – enable / update – nein
  • finish
Anschließend in /etc/sysctl.conf suchen und bei Vorhandensein anpassen:
  • vm.swappiness = 0 // Dadurch wird nur noch dann ausgelagert, wenn der RAM restlos voll ist.
  • Zudem kann folgendes sinnvoll sein:
  • vm.dirty_background_ratio = 20
  • vm.dirty_expire_centisecs = 0
  • vm.dirty_ratio = 80
  • vm.dirty_writeback_centisecs = 0 // Dadurch werden Schreibvorgänge auf die SD-Karte extrem gepuffert und in größeren Blöcken im Hintergrund geschrieben, was die SD-Karte schont und einen Bug abmildert, der für einen Teil der beim Pi vorkommenden Kartenkorruption verantwortlich ist.
Pi neu starten
| sudo shutdown -r now
oder
| sudo reboot
Pi updaten
  • Paketverwaltung aktualisieren

| sudo aptitude update
| sudo aptitude safe-upgrade
| sudo reboot

  • Raspi-Update installieren und Raspi-Update durchführen

| sudo aptitude update
| sudo aptitude install rpi-update
| sudo rpi-update
| sudo reboot

  • Tipp: Weiter Infos zum Aufsetzen eines Raspberry Pis gibt es hier.
Pi für Fernzugriff und Bildschirmsharing einrichten
  • Zugriff per SSH auf den Pi unter Mac OSX
  • Kommandozeileneingabe über das Terminal oder iterm

| ssh [benutzer]@[ip] -p [port]

  • Beispiel

| ssh pi@192.168.0.12 -p 22 

  • Tipp: So bekommt man die IP-Adresse seines Pis heraus.
  • Bildschirmsharing für Mac OSX einrichten
  • VNC installieren:

| sudo apt-get update
| sudo apt-get upgrade

| sudo apt-get install tightvncserver netatalk avahi-daemon
| sudo update-rc.d avahi-daemon defaults

  • Konfigurations Datei erstellen und bearbeiten

| /etc/avahi/services/afpd.service
| sudo nano /etc/avahi/services/afpd.service

  • Folgende Zeilen einfügen
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
   <name replace-wildcards="yes">%h</name>
   <service>
      <type>_afpovertcp._tcp</type>
      <port>548</port>
   </service>
</service-group>

 

  • Den Daemon neu starten

|sudo /etc/init.d/avahi-daemon restart

  • VNC Server einrichten

|sudo vncserver
|cd /etc/init.d
|sudo nano tightvncserver

 

#!/bin/bash
# /etc/init.d/tightvncserver
#
 
# Carry out specific functions when asked to by the system
case "$1" in
start)
    su pi -c '/usr/bin/vncserver -geometry 1650x1280'
    echo "Starting VNC server "
    ;;
stop)
    pkill vncserver
    echo "VNC Server has been stopped (didn't double check though)"
    ;;
*)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac
 
exit 0
  • VNCServer beenden

| sudo chmod +x tightvncserver
| sudo pkill Xtightvnc

  • Überprüfen ob das Beeneden erfolgreich war

| ps aux | grep vnc

  • VNC Einstellungen aktualisieren

| cd /etc/init.d
| sudo update-rc.d tightvncserver defaults

 

    • Tipp: So findet ihr euren Pi über Bonjour.

 

Der Pi im WLAN

| sudo apt-get update
| sudo sudo apt-get install wicd-curses
| sudo wicd-curses

Video-Stream – nahezu latenzlose Livebilder vom Raspberry Pi

Kamera testen
  • Ein Video drehen:

| raspivid

  • Ein Foto machen:

| raspistill

Installieren des G-Streamers auf dem Raspberry Pi
  • Das Verzeichnis für den GStreamer1.0 einfügen

| sudo nano /etc/apt/sources.list

  • Am Ende der Datei folgende Zeile anfügen:

deb http://vontaene.de/raspbian-updates/ . main

  • Dann des Verzeichnis aktualliesieren

| sudo apt-get update

  • Gstreamer installieren

| sudo apt-get install gstreamer1.0

  • Gstreamer ist jetzt auf dem Pi installiert.
  • Folgender Befehl öffnet einen VideoStream von der Kamera:

| raspivid -t 999999 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=YOUR-PI-IP-ADDRESS port=5000

Installieren des auf MacOSX
  • Der einfachste weg ist die Installation über Brew.
  • Wenn man brew installiert hat, erst Mal folgenden Befehl im Terminal eingaben:

| brew update

  • Jetzt mit diesem Befehl GStreamer installieren:

| brew install gstreamer gst-libav gst-plugins-ugly gst-plugins-base gst-plugins-bad gst-plugins-good

  • Jetzt kann man über diesen Befehl den vom geöffneten Stream anzapfen:

| gst-launch-1.0 -v tcpclientsrc host=YOUR-PI-IP-ADDRESS port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

  • Der Stream sollte nahezu latenzfrei sein.
  • Gstreamer lässt sich auch auf Windows oder Linux installieren, etwas komplizierter ist die Einbindung unter Android oder iOS.

Alles im Blick - CAMeleon

Nicole Bielenski, Robin Krause, Christian Schliebs, Daniel Strohbach, Holger Timme, Falko Quinger, Martin Zimmermann, 19.12.2013 | CAMeleon bei Sascha Reinhold, Michael Dienst
//Technische Umsetzung

Es bot sich aus mehreren Gründen an den Raspberry-Pi und seine Kamera als zusätzliches Augen für das Projekt eines Helmes mit einer dem Chamäleon ähnlichen Rundumschau einzusetzen. Zuvorderst wären die Aspekte Mobilität und Schnittstellenoffenheit des Raspberry Pis zu benennen. Der Mini-Computer lässt sich mit einem einfachen Akkupack für Smartphones (ca. 3000mha) je nach Leistungsaufnahmen für mehrere Stunden mobil betreiben. In einem kurzen Test konnten wir feststellen, dass die von uns wegen ihrer Kompaktheit ausgewählten 3000 mAh Akkus der Marke TrekStore bis zu vier Stunden Anwendungsbetrieb erlauben. Durch den Einsatz eines kleine W-Lan Dongle der Firma Edimax konnten die beiden Pis kabellos auf eine Distanz von bis zu 50m vollständig mobil genutzt werden. Das dritte und vierte Auge ließen sich somit vom Nutzer sogar vom Helm getrennt platzieren, um zum Beispiel ein Zimmer im Blick zu haben in dem man sich nicht befindet. Das Wasser auf dem Herd im Blick kann man so nebenan noch mal kurz die Wäsche zusammenlegen. Damit diese Anwendungsszenario möglich wird, muss jedoch ein nahezu verzögerungsfreies Bild von den externen Augen zum Helm übertragen werden.

//Latenz freier Videostream

Die latenzfreie Videoübertragung von den externen Augen erwies sich als die größte Herausforderung bei der Umsetzung des kabellosen und somit mobilen Aufbaus. Das Streaming über verschiedene browserbasierte Anwendung wie den MJPG-Streamer wies je nach Signalstärke eine Latenz von mehreren Sekunden auf. Diese ließ sich auch nicht durch eine Einschränkung der Übertragungsqualität beseitigen. Deshalb musst ein alternativer Weg für das Videostreaming gefunden werden. Die iOS native App berrycam eignete sich leider nur zum fernauslösen der Kamera des Pi und zur Übertragung der gemachten Fotos. Auch die erweiterte Funktionalität der Anwendung reichte nicht zur Liveübertragung eines Videos aus. Die Lösung für einen nahezu Latenz freien Livestream bot die in der Kommandozeile aufgerufene Funktionalität der G-Streamer-Bibliothek eine Videopipeline an einem festgelegten Netzwerkport zur Verfügung zustellen, die dann von jedem Gerät (die Bibliothek muss auch dort installiert sein) im Netzwerk aus durch einen entsprechen Kommandozeilenbefehl zu geöffnet werden kann. Mit Hilfe dieser Pipeline konnte eine direkte Übertragung der Kamerabilder von den externen Augen zu einem Computer ohne Verzögerungen realisiert werden.

//iOS als Hürde

Das Öffnen der Pipeline von einem iOS-Gerät wie den für den direkten Blick und die Bilddarstellung eingesetzten I-Phones war jedoch nicht ohne weiteres möglich. Durch die Geschlossenheit der Apple-Geräte und einer fehlenden Möglichkeit, diese ohne Garantieverlust in einen Entwicklermodus zuschalten, konnte die Bibliothek die eine iOS Version beinhaltet leider nicht auf den Empfangsgeräten im Helm installiert werden. Der Workaround für diese Problem war die Installation eine App zum Teilen des Bildschirms den Computern auf denen der Videostream geöffnet wurde. Dies erzeugte unter Umständen wieder eine leichte Latenz erwies sich aber als störungsfreier und besser aufgelöst als die Bilder des MJPEG-Streamers.

//Lösungsansätze und Zukunftsaussichten

Mit einer direkten Installation der G-Streamer-Bibliothek auf iOS oder einer Streaming-App die G-Streames-Pipelines anzapfen kann, sollte dieser Umweg unnötig werden. Eine latenzfreie Übertragung der Blicke aus den externen Augen auf das Visier des Helmes liegt demnach durchaus im Rahmen des technisch machbaren. Auch eine Umrüstung des Helms auf zwei baugleiche Androidgeräte oder einen weiteren PI mit einem hochauflösenden Bildschirm, würde das Problem beseitigen. Der Einsatz von Bildverarbeitungsbibliotheken wie OpenCV und SimpleCV ließen bei einer vollständig auf Pis setzenden Version, sogar die zielgerichtet Auswertung der aufgezeichneten Bilder und die einfach Implementierung von erweiterten Inhalten zu.

19.01.2015 | Robin Krause |