Heute gibt es eine kleine Gute-Nacht Geschichte von mir :-).

Es war einmal vor langer Zeit, als sich, hmm… nennen wir ihn Mr. Roboto, vorstellte, wie es wohl sein wird, wenn er eines Tages einen eigenen kleinen WiFi Webcam Roboter haben würde, den er von überall auf der Welt in seiner Wohnung steuern könnte.

Er versuchte sich in vielen Disziplinen, wie dem Löten, dem Programmieren und der Elektrotechnik, um seinem Traum ein wenig näher zu kommen. Viele kleine Erfolge, wie bspw. das erste Mal einen Roboter über Bluetooth zu steuern, oder aber Infrarot und Ultraschallsensoren trieben ihn ständig an, sein Projekt weiter zu verfolgen.

Nun nach so langer Zeit ist es endlich vollbracht. Nach MEZ 16.00 Uhr am Sonntag, den 11.11.2012, fuhr der Roboter das erste Mal, per WLAN gesteuert und mit Webcam ausgerüstet, durch die Wohnung von Mr. Smith :-).

Und am Ende lebte er glücklich und zufrieden mit seinem Roboter bis zu seinem nächsten Projekt :-D…

FAKTEN!!!

Mir war einfach mal danach. Aber nun gibt es Fakten. Nachdem ich meinen Robo mit dem Arduino und dem Motorshield fit gemacht habe für eine externe Steuerung, habe ich ja angefangen mich mit dem Raspberry Pi zu beschäftigen. Dieser ist leistungsfähiger und in der Lage einen Webcam Stream zu verarbeiten inkl. weiterer Aufgaben. Also habe ich zwei Welten verbunden und den Arduino als Motorsteuerung gelassen und für die Steuerung per Browser, sowie die Webcam den Raspberry Pi im Einsatz.

Wie die beiden miteinander verbunden werden, habe ich bereits im letzten Tutorial erklärt: Arduino und Raspberry Pi verbinden. Zusätzlich habe ich mir einen 10k mAH Akku geleistet, der per USB seine Energie an den Raspberry Pi überträgt. Der Raspberry Pi ist per USB mit dem Arduino verbunden und der Motorshield ist per 9V Block versorgt.

Ich versuche das mal in Bildern zu zeigen :-). Sieht ziemlich chaotisch aus, weil ich einfach nur alles miteinander verbunden habe und die Kabel ellenlang sind. War einfach zu aufgeregt :-D…

Alleine alle Teile zusammenstecken reicht natürlich nicht aus. Wir benötigen immer noch eine Weboberfläche für den Stream und die Steuerung. Wir haben ja vor einiger Zeit bereits einen Apache auf dem Raspberry Pi installiert. Dort haben wir auch drei Scripte verwendet: „arduino-connect.sh, arduino-bridge.sh, arduino-disconnect.sh“. Diese werden wir weiterverwenden. Hinzu kommt eine Layout Datei für Oberfläche:

control.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Robosphere.de - Raspberry Pi controls Arduino Robot</title>
</head>
<body>

<div style="width: 1000px;">
    <div style="float: left; width: 700px; height: 500px;">
        <iframe frameborder="0" width="700" height="500" src="http://192.168.23.111:8081/"></iframe>
    </div>
    <div id="controls" style="float:left;">
        <a href="robot-control.php?GO=ON">Connect to Engine</a><br/>
        <a href="robot-control.php?GO=OFF">Disconnect from Engine</a><br/>
        <img src="help_steuerkreuz.png" usemap="#controls" />
        <br />
        <a href="robot-control.php?GO=SLOWER">Slower</a><br/>
        <a href="robot-control.php?GO=FASTER">Faster</a><br/>
    </div>
</div>
<div class="clear: both;">&nbsp;</div>

<map name="controls">
    <area shape="rect" coords="30,1,120,60"
                href="robot-control.php?GO=FORWARD" alt="Forward" title="Forward">
    <area shape="rect" coords="1,60,70,120"
                href="robot-control.php?GO=LEFT" alt="Left" title="Left">
    <area shape="rect" coords="30,130,120,180"
                href="robot-control.php?GO=BACKWARD" alt="Backward" title="Backward">
    <area shape="rect" coords="140,60,180,120"
                href="robot-control.php?GO=RIGHT" alt="Right" title="Right">
    <area shape="rect" coords="80,60,120,120"
                href="robot-control.php?GO=RELEASE" alt="Stop" title="Stop">
</map>

</body>
</html>

Das Steuerkreuz habe ich von einer Seite runtergeladen. Über Google werdet ihr schnell fündig :-).

Hinzu kommt das PHP Script zur Steuerung:

robot-control.php

<?php
session_start();
include "control.html";

$action = $_GET['GO'];
$key = "";

switch ($action)
{
case "ON":
if ($_SESSION['connected'] != 1)
{
shell_exec("./arduino-connect.sh");
$_SESSION['connected'] = 1;
sleep(2);
}
break;
case "OFF":
if ($_SESSION['connected'] == 1)
{
shell_exec("./arduino-disconnect.sh");
$_SESSION['connected'] = 0;
}
break;

case "FORWARD":
$key = "w";
break;
case "BACKWARD":
$key = "s";
break;
case "LEFT":
$key = "a";
break;
case "RIGHT":
$key = "d";
break;
case "RELEASE":
$key = "x";
break;

case "SLOWER":
$key = "q";
break;
case "FASTER":
$key = "e";
break;
}

if (!empty($key))
{
system("/bin/bash arduino-bridge.sh " . $key);
}

Und so sieht das dann aus:

Robotersteuerung - Weboberfläche

Robotersteuerung – Weboberfläche

Auf dem Arduino muss noch das Steuerungsscript für das Motorshield aufgespielt werden und damit ist es fast erledigt.

Bevor wir ein Bild sehen, muss mit sudo motion -n der Webcam Stream gestartet werden und dann kann man einfach mal auf die Oberfläche wechseln, indem man im Browser: „[IP des Raspberry Pi]/robot-control.php“ aufruft. Jetzt sollte man die Steuerung inkl. des Webcam Bildes sehen.

Wie das ganze dann im Betrieb aussieht hier:


Man sieht das der Stream extrem ruckelig ist und das Fahrzeug nur mit Sicht gesteuert werden kann. Werde demnächst versuchen über VLC zu streamen. das sollte um einiges performanter werden. Aber das Projekt macht große Schritte vorwärts :-).

6 Responses to “Raspberry Pi steuert Arduino Roboter”

  1. Thyson sagt:

    @Topic

    Detailiert erklärt und einfach zu verstehen, jedoch habe ich ein problem mit den script datein (arduino-connect,disconnect & bridge). Ich bin jeden schritt 1 zu 1 durchgegangen und alles funktioniert… jedoch das einzige was nicht funktioniert ist die Steuerung des Roboters durch betätigung des Steuer kreuzes auf der HTML webseite.

  2. john kipkoech too sagt:

    Thanks so much for the tutorial. I learnt alot and was actually able to built my robot. I used mjpg-streamer for the video and added a servo on the web cam.
    Thanks alot.
    below are some of the photos:
    https://www.dropbox.com/s/8jdzql1e2fwksvl/DSC05859.JPG
    https://www.dropbox.com/s/h5dsszrvlwgkpjg/DSC05880.JPG

    when i take i video i will share it.

  3. Roboman sagt:

    Ich habe mal meine Dateien hochgeladen. Das sind die Source Dateien für den Roboter.

    http://www.robosphere.de/wp-content/uploads/2013/02/RobospherePiDuino.zip

  4. Roboman sagt:

    Bin gerade dabei alle Teile wieder ordentlich im Gehäuse zu verstauen und teste ebenfalls mjpg-streamer. Wenn das gut läuft, gibt es bald wieder nen video 🙂

  5. […] Robo mit Webcam hat ja inzwischen schon funktioniert, aber irgendwie auch nicht, wenn man ständig irgendwo […]

Leave a Reply