Einleitung
Die Robotertechnologie wird in unserem alltäglichen Leben immer präsenter. Es gibt Roboter, die unseren Boden kehren, die unseren Rasen mähen oder uns in einem gewissen Umfang bedienen können. In der Industrie werden schon seit Längerem Roboter zur Fertigung eingesetzt. Es werden von ihnen dort aber auch Überwachungs- und Serviceleistungen erbracht. Es spannt sich schon jetzt ein weites Feld auf, in dem Roboter eingesetzt werden können.
Und die Einsatzmöglichkeiten werden immer ausgefeilter. Es befinden sich Roboter in der Entwicklung, die kranke und alte Menschen versorgen können, oder Roboter, die uns eine echte Küchenhilfe sein können.
Außerdem wäre die Erforschung anderer Planeten, wie beispielsweise des Mars, ohne Roboter nicht denkbar. Aktuell befindet sich der NASA-Roboter »Perseverance« (Ausdauer) auf dem Mars, um diesen nach Lebensspuren zu erkunden.
Wegen der großen Entfernung zwischen Mars und Erde sind die Signale, die der Roboter und das Kontrollzentrum der NASA austauschen, etwa drei Minuten unterwegs (der Mars ist zurzeit etwa 56 Mio. km von der Erde entfernt und die Lichtgeschwindigkeit beträgt etwa 300.000 km/sec). Diese Zeit ist zu lang, als dass die NASA den Roboter in Echtzeit steuern könnte. Es ist nur möglich, dem Roboter generelle Befehle zu senden, die er dann autark ausführt.
Der Roboter muss, um seine Aufgaben zu erfüllen, eigenständig Entscheidungen treffen können. Dazu ist eine gewisse Intelligenz notwendig.
Wie Roboter so agieren können, erfahren Sie in diesem Buch. Sie lernen Grundfertigkeiten von Robotern kennen, die für verschiedene Aufgaben angewendet werden können. Vielleicht verfügt ja ein NASA-Roboter auch über eine von mir vorgestellte Grundfertigkeit.
Sie können mit diesem Buch alles praktisch erkunden, indem Sie meine Roboter mit LEGO-Teilen nachbauen, um so einen persönlichen Eindruck von der Leistungsfähigkeit auch schon kleinerer Roboter zu erlangen. LEGO-Teile haben dabei den Vorteil, dass Sie einen aufgebauten Roboter später wieder zerlegen und dann einen neuen bauen können.
Wir beschäftigen uns zunächst mit der generellen Steuerung von Robotern, später aber auch mit Themen der »Künstliche Intelligenz Forschung«. Sie werden neuronale Netze und ein Expertensystem einsetzen, um Roboter zu steuern. Solche Roboter besitzen schon eine gewisse Grundintelligenz und treffen intelligente Entscheidungen auf der Basis eigener Steuerungen.
Mit dem Buch arbeiten
Dieses Buch ist in drei Teile geteilt. Als Erstes stelle ich die Hardware für die Roboter vor. Danach gebe ich Ihnen eine Einführung in Python, die von mir zur Robotersteuerung verwendete Programmiersprache. Im dritten Teil stelle ich Ihnen elf Projekte vor, bei denen Sie selbst Roboter bauen und programmieren. Sie lernen dabei sukzessive die Roboter-Programmierung mit der Programmiersprache Python, aber auch Konzepte kennen, die zur Steuerung von Robotern herangezogen werden.
Ich verwende zum Bau des Chassis der Roboter Bauteile aus dem LEGO-EV3-Baukasten. Sie können natürlich auch die Bauteile aus eigenen Beständen verwenden oder sich gewisse Teile, die Ihnen fehlen, von LEGO bestellen (Einzelteillisten befinden sich jeweils im Download zum Buch auf der Webseite www.mitp.de/0310). Ein Teil der Roboter wird mit den zum EV3-Baukasten gehörenden Motoren und Sensoren ausgestattet. Ich verwende aber auch LEGO-Sensoren, die dazugekauft werden können. Allgemein können Sie sich sämtliche LEGO-Komponenten separat beschaffen (richten Sie sich dazu an den oben genannten Teilelisten aus). Ein EV3-Baukasten ist natürlich nicht unbedingt erforderlich, Sie hätten aber so die Bauteile, bis auf die Hitechnic-Sensoren, komplett vorliegen.
Drei Projekte (Kapitel 18 bis 20) erstelle ich mit Fremdkomponenten im Sinne von allgemeinen Technikkomponenten, die nicht von LEGO sind. Es handelt sich dabei um Getriebemotoren und Sensoren wie einen Fototransistor oder Kommunikationsmittel wie eine LED. Wenn Sie Interesse haben, diese Projekte mit Fremdkomponenten zu erarbeiten, werden Sie in diesem Rahmen mit dem Lötkolben basteln.
Als Computer, der die Roboter steuert, verwende ich den Raspberry Pi-Computer. Dabei handelt es sich um einen etwa scheckkartengroßen Einplatinencomputer, der durch das Betriebssystem Linux gesteuert wird.
Er verfügt, wie Sie noch sehen werden, über eine Hardwareschnittstelle in Form von 40 kleinen Pins, an die die Roboterhardware zur Steuerung angeschlossen werden kann.
Zusätzlich verwende ich den BrickPi3. Das ist eine Hardwareplatine, die auf den Raspberry Pi gesteckt wird, um die LEGO-Hardware zu steuern. Der Verbund von Raspberry Pi und BrickPi3 erledigt dabei die Aufgaben, die der EV3-Baustein im LEGO-Baukasten erledigen würde. Der Vorteil bei der Verwendung des Raspberry Pi besteht darin, dass Sie zum einen eine vollwertige, momentan sehr aktuelle Programmiersprache (Python) einsetzen können, um Ihre Roboter zu steuern, der Einsatz neuronaler Netze wäre anders gar nicht denkbar. Zum anderen lernen Sie einen sehr interessanten und preiswerten Computer kennen, den Sie auch für andere Aufgaben verwenden können. Er verfügt über ein Betriebssystem, das Raspberry Pi OS, das eine grafische Benutzeroberfläche hat, sodass sich auch Apple- und Windows-Benutzer sehr schnell heimisch fühlen werden.
Der LEGO Digital Designer 4.3
Ich habe die Bauanleitungen zu den einzelnen Robotern mit dem Tool »LEGO Digital Designer 4.3« (https://www.lego.com/de-de/ldd) erstellt und diese in entsprechenden Dateien gespeichert, die dem Download zum Buch unter www.mitp.de/0310 beiliegen (die Dateien haben die Endung .lxf
). Auf diese Weise können Sie alle Roboter-Modelle im Buch ganz einfach nachbauen.
Wenn Sie, nachdem Sie den LEGO Digital Designer installiert haben, auf die Datei doppelklicken, wird das Programm gestartet und das Modell angezeigt. Da LEGO dieses Tool per Internetserver nicht mehr unterstützt, wird eine Fehlermeldung angezeigt, die Sie mit einem Klick auf den OK-Button quittieren.
In der oberen rechten Ecke der Buttonleiste befindet sich der Button , mit dem Sie die Bauanleitung generieren können. Danach können Sie mit den Pfeilbuttons zwischen den einzelnen Steinen hin- und herschalten und das Modell erstellen. Da es für den BrickPi3 natürlich kein Symbol im Programm gibt, habe ich den Platz, den er einnimmt, im Modell immer frei gelassen.
Nun sind Sie sicherlich schon ganz gespannt auf die Themen, die ich Ihnen in meinem Buch zeigen werde, daher sollten wir sofort in die Behandlung der Technologie einsteigen. Ich wünsche Ihnen viel Vergnügen bei der Lektüre meines Buches und beim Bau und der Programmierung der vorgestellten Roboter.
Thomas Kaffka, im Juli 2021
Kapitel 1:
LEGO als Grundlage für unsere Roboter
Es ist eine gute Idee, LEGO-Komponenten zum Roboterbau zu verwenden. Ein aufgebauter Roboter kann immer wieder zerlegt werden und ein neuer erfunden und gebaut werden. Der eigenen Fantasie sind dabei grundsätzlich keine Grenzen gesetzt. Daher verwende ich in meinem Buch LEGO-Komponenten, um ein Roboterchassis zu erstellen. Ich lege dabei die Bauteile des LEGO-EV3-Baukastens zugrunde.
Leser, die diesen Baukasten nicht besitzen, aber über LEGO-Bausteine verfügen oder gewillt sind, sich diese anzuschaffen, können auch ganz entspannt sein. Denn ich gebe bei jedem Roboter eine Teileliste über die LEGO- oder Fremdkomponenten an, die ich für den jeweiligen Roboter verwende. Diese Teilelisten sind im Download zum Buch (www.mitp.de/0310) sowie in den einzelnen Kapiteln zu finden.
1.1 Roboter als Bausatz
Sie könnten sich natürlich, wenn Sie sich mit der Robotik beschäftigen möchten, auch einen Bausatz zu einem fertigen Roboter anschaffen, statt eigene Roboter aus LEGO zu bauen. Diese Roboter haben aber den Nachteil, dass es sich um fertige Maschinen handelt, die in ihren Freiheitsgraden eben deshalb beschränkt sind. Wenn man ihre Motoren und sonstigen Aktoren programmiert hat, ist es nicht mehr interessant, sich mit ihnen weiter zu beschäftigen.
Dazu hier einige Beispiele von Robotern, die ich mir unter anderem angeschafft habe (Abbildung 1.1 bis Abbildung 1.3).
Der YETI (Abbildung 1.1) ist ein einfacher Roboter, der über zwei Beine verfügt. Er ist mechanisch so aufgebaut, dass er mit zwei Servomotoren gesteuert werden kann. Um zu gehen, verlagert er sein Gewicht auf eines der beiden Beine und bewegt das andere vor. Danach wird das gegenüberliegende Bein belastet. Ich habe für den Roboter zusätzlich ein Vier-Segment-Display angeschafft und eingebaut. Damit kann er Meldungen oder seinen Status mitteilen.
Die Caterpillar ist ein wurmförmiger Roboter. Sein Körper ist in verschiedene Segmente geteilt, die sich durch Servomotoren jeweils auf und ab oder links und rechts bewegen lassen. Durch eine koordinierte Ansteuerung der Motoren ist der Roboter in der Lage, sich fortzubewegen. Seine Sensoren sind zwei Antennen vorne und eine Antenne hinten sowie ein Rollsensor.
Der ALLBOT ist ein sechsbeiniger Roboter, der entsprechend anspruchsvoll programmtechnisch gesteuert wird. Die sechs Beine müssen sich ja koordiniert bewegen, damit er sich vorwärtsbewegt. Dem Roboter habe ich einen Infrarotsensor (vorne am Chassis) spendiert, damit er Abstände zu einem Hindernis messen kann, sowie einen Kompass-Sensor (oberste Platine), der ihn befähigt, die Richtung zu bestimmen, in der er sich bewegt.
Natürlich kann man mit den vorgestellten Robotern vortrefflich experimentieren und diese auch mit zusätzlichen elektronischen Komponenten erweitern. Aber irgendwann hat man sie ausgereizt und dann stehen sie nur noch herum und sehen schön aus. Das ist schade.
Daher gehe ich in diesem Buch einen anderen Weg und verwende LEGO-Komponenten sowie elektronische Fremdkomponenten, um Roboter zu bauen. LEGO-Roboter haben den Vorteil, dass man sie, nachdem man sich ausführlich mit ihnen beschäftigt hat, zerlegen und dann einen neuen Roboter bauen kann. Wenn man LEGO für seine Roboter verwendet, wird dieses interessante Hobby niemals langweilig.
1.2 LEGO mit Elektronikkomponenten versehen
Das LEGO-Mindstorms-System bietet Computer, Motoren und Sensoren für den Bau von Robotern aus LEGO-Technikteilen an. Diese originalen LEGO-Bauteile sind im Vergleich zu Fremdkomponenten sehr teuer. Daher können sowohl die Originalteile als auch – als Alternative – elektronische Fremdkomponenten verwendet werden, wie Sie in den letzten drei Kapiteln zu den Roboterprojekten sehen können.
1.2.1 Folgende LEGO-Elektronikkomponenten werden verwendet
Für die Modelle im Buch verwende ich die folgenden LEGO-Komponenten.
1.2.2 Folgende Fremdkomponenten werden verwendet
Ein echter Elektronik-Bastler hat keine Angst vor Komponenten von Drittanbietern. Diese Bauteile haben den enormen Vorteil, dass sie teilweise nur einen Bruchteil der originalen LEGO-Komponenten kosten. Man muss allerdings bereit sein, auch mal etwas zu löten, da beispielsweise der Lichtsensor zusammengebastelt werden muss. Aber keine Bange, das kriegen Sie hin.
Ich verwende beim elektronischen Basteln einen 16-Watt-Lötkolben. Seine Leistung darf nicht zu hoch sein, damit die elektronischen Bauteile keinen Schaden nehmen. Dazu benötigt man noch eine Spule Lötzinn und wer es ganz komfortabel haben möchte, der legt sich noch eine Abisolierzange zu, fertig.
Als Fremdkomponenten setze ich die folgenden Bauteile ein.
Kapitel 2:
Der Raspberry Pi stellt sich vor
2.1 Der Einplatinencomputer
Der Raspberry Pi 3 B+ hat das Format einer Scheckkarte, ist also sehr klein. Auch wenn es nicht so aussieht, er ist ein vollständiger Computer mit Betriebssystem. Es ist zumeist das Raspberry Pi OS, bei dem es sich um eine Linux-Distribution handelt. An den Raspberry Pi können eine USB-Tastatur, eine USB-Maus, ein HDMI-Monitor, ein LAN-Kabel sowie ein USB-Netzteil angeschlossen werden. Er verfügt aber auch über WLAN.
Das Betriebssystem wird auf einer Mikro-SD-Karte installiert. Das hat einen entscheidenden Vorteil. Wir verwenden den Raspberry Pi in diesem Buch sowohl zur Ansteuerung von LEGO-Komponenten als auch von sogenannten »Fremdkomponenten« (das sind elektronische Komponenten, die auf dem Elektromarkt verfügbar sind). Dazu werden zwei verschiedene Betriebssystemumgebungen benötigt. Insbesondere verwenden wir bei der Steuerung der LEGO-Komponenten eine spezielle Distribution von Raspbian (auch ein Betriebssystem für den Raspberry Pi), die von Dexter Industries, dem Lieferanten der Schnittstelle (BrickPi3) zu den LEGO-Komponenten, zur Verfügung gestellt wird. Beide Umgebungen halten wir jeweils auf einer eigenen Mikro-SD-Karte vor. Wenn wir zwischen der Ansteuerung von LEGO- und Fremdkomponenten wechseln, brauchen wir so nur die Mikro-SD-Karte auszutauschen, wirklich praktisch.
Das Betriebssystem Raspberry Pi OS sowie das Raspbian (der Vorgänger des erstgenannten Betriebssystems) bieten eine grafische Oberfläche (GUI, graphical user interface), ähnlich wie der von Windows, sodass man mit dem Computer komfortabel arbeiten kann.
Das Betriebssystem bringt bereits eine Installation von Python mit, sodass Sie mit dem Programmieren Ihrer Roboter sofort loslegen können. Dabei verwenden wir Python 3.
Python ist eine moderne Programmiersprache, die von Guido van Rossum 1989 erfunden wurde. Es gibt eine ganze Menge Erleichterungen, die das Programmieren sehr komfortabel gestalten. Python verfügt unter anderem auch über die Möglichkeit, Programmabschnitte parallel zum Hauptprogramm verarbeiten zu lassen. Solche Programmabschnitte werden »Threads« genannt. Diese Technologie machen wir uns etwa bei der Verwaltung der Zähler zunutze, die von den Encodern der Motoren gesteuert werden. Eine kurze Einführung in Python erfolgt in Teil II meines Buches.
Den Raspberry Pi gibt es mittlerweile in verschiedenen Ausführungen, wie beispielsweise:
Raspberry Pi 4, Modell B 4
Raspberry Pi 4, Modell B 2
Raspberry Pi 3, Modell B+
Raspberry Pi 3
Raspberry Pi 2, Modell B
Raspberry Pi 1, Modell B+
Raspberry Pi, Modell A+ etc.
Wir verwenden in diesem Buch den Raspberry Pi 3 B+, bei dem ich aber zumeist die »Drei« und das »B+« unterschlage. Leider können wir mit der neuesten Version des Raspberry Pi 4 nicht arbeiten, da er zur Zeit der Drucklegung des Buches nicht mit dem BrickPi3 (dem Modul zur Ansteuerung der LEGO-Komponenten) kompatibel ist.
Besonders schön ist es, dass es für den Raspberry Pi auch eine spezielle, preiswerte Kamera gibt, die direkt auf dem Board angeschlossen werden kann. Wir werden bei unseren Robotern auch diese Kamera zur Bilderkennung verwenden.
Für die Stromversorgung des Raspberry Pi bieten sich verschiedene Alternativen an. Wenn der Roboter programmiert wird, verwenden wir ein USB-Netzteil, das mindestens 2,5 Ampere liefern sollte. Damit ist es möglich, bei der Programmierung auch weitere elektronische Komponenten mit Strom zu versorgen. Die Motorspannung von +6 Volt (+9 Volt beim BrickPi3) entnehmen wir einem Batteriepack mit AA-Batterien. Wenn ein Roboter autonom laufen soll, verwenden wir zur Versorgung des Raspberry Pi einen USB-Akku.
2.2 Die GPIO-Schnittstelle
Die GPIO-Schnittstelle (general purpose input/output) ist eine 40-polige Stiftleiste am Rande der Raspberry-Pi-Platine, mit der Sie den Raspberry Pi mit verschiedenen Hardware-Komponenten verbinden können (siehe Abbildung 2.3).
Diese hat die Pinbelegung, die aus Abbildung 2.4 hervorgeht.
Die Pins 3 und 5 beziehen sich auch auf die I2C-Schnittstelle. Dabei handelt es sich um eine Schnittstelle, die zur Kommunikation zwischen dem Raspberry Pi und ICs verwendet wird.
Die Pins 11, 12, 13 können zum Anschluss von SPI-Bausteinen verwendet werden (Kanal 1). Auch die SPI-Schnittstelle dient zur Kommunikation mit elektronischen Komponenten.
ICs sind elektronische Bauteile, die sich in kleinen schwarzen Plastikboxen befinden und über verschiedene Kontaktbeinchen verfügen. Das IC MCP3008 wird beispielsweise in Kapitel 18 vorgestellt (siehe Abbildung 18.9). Bei SPI-Bausteinen handelt es sich zumeist auch um ICs, die über die SPI-Schnittstelle angesprochen werden.
Pin 12 hat noch eine Spezialaufgabe: Die Ausgabe von Audiosignalen über den Audioausgang der Platine erfolgt über Pin 12. Für den SPI-Kanal 0 sind die Pins 19, 21, 23, 24 und 26 zuständig. (Mit Kanal 0 und 1 lassen sich dann zwei unterschiedliche SPI-Bausteine ansprechen.) Es gibt elektronische Komponenten, wie beispielsweise Sensoren, die über die SPI-Schnittstelle angesprochen werden müssen. Das bereits erwähnte IC MCP3008 wird beispielsweise über die SPI-Schnittstelle gesteuert.
Die Aufzählung weiterer Spezialpins möchte ich an dieser Stelle nicht vornehmen, da diese für unseren Roboterbau nicht vonnöten sind. Das bedeutet, dass die übrigen Pins, die nicht Spannung oder Masse führen, uns als digitale Ein-/Ausgänge dienen können.
Mit Spannung ist die Stärke einer Spannungsquelle gemeint. Der Raspberry Pi arbeitet mit 3,3 und 5 Volt. Die Abkürzung GND steht für Ground oder Masse. Elektrischer Strom fließt zwischen der Spannungsquelle und Masse. Daher benötigen elektronische Komponenten immer beide Anschlüsse.
Wenn Sie sich nur mit den elektrischen LEGO-Komponenten beschäftigen, brauchen Sie die Pins der GPIO-Schnittstelle nicht zu kennen, da diese von der LEGO-Schnittstelle (BrickPi3) verwendet werden und Sie mit ihnen nicht direkt in Kontakt kommen. Nur wenn Sie mit Fremdkomponenten arbeiten, sind die Pins für Sie wichtig.
In Tabelle 2.1 werden die Pins noch einmal einzeln erläutert.
Tabelle 2.1: Bedeutung der Pins der GPIO-Schnittstelle
Pin
|
Bedeutung
|
1, 2, 4, 6, 9, 14, 17, 20, 25, 30, 34, 39
|
Verschiedene Spannungen
|
3, 5
|
I2C-Schnittstelle
|
11, 12, 13
|
SPI-Schnittstelle (Kanal 1), wobei über Pin 12 auch Audiosignale ausgegeben werden können
|
19, 21, 23, 24, 26
|
SPI-Schnittstelle (Kanal 0)
|
7, 8, 10, 15, 16, 18, 22, 27, 28, 29, 31, 32, 33, 35, 36, 37, 38, 40
|
Pins zur Steuerung elektronischer Komponenten
|
Der Raspberry Pi verfügt nicht über analoge Eingangsports. Analoge Eingangssignale können aber über einen entsprechenden ADC-Baustein (etwa den MCP3008) eingelesen werden. Ein analoges Ausgangssignal formt man mit der PWM (Pulsweitenmodulation) über einen digitalen Ausgang.
ADC ist eine Abkürzung für Analog / Digital Converter. Es handelt sich um einen Baustein, der eine Spannung (analog) in eine Zahl (digital) umwandeln kann.
Wenn bestimmte Pins der GPIO-Schnittstelle verwendet werden sollen, müssen sie zunächst initialisiert werden. In Listing 2.1 werden jeweils Pin 12 als Input und Pin 11 als Output konfiguriert.
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.IN)
Listing 2.1: Initialisierung von Pins der GPIO-Schnittstelle
Das erste Statement legt fest, dass wir Pin-Nummern und nicht GPIO-Nummern verwenden können, was ich als praktischer erachte.
Bei der GPIO-Schnittstelle hat die Pin-Nummer 37 die GPIO-Nummer 25, siehe auch Abbildung 2.4. Pin-Nummern sind daher übersichtlicher, da sie sich auf die Pins der Schnittstelle beziehen und beim Kontaktieren einfach abgezählt werden können.
Im Verlaufe des Programms können die Pins als Output-Pin angesteuert oder als Input-Pin abgefragt werden (Listing 2.2).
GPIO.output(11, HIGH)
if (GPIO.input(12) == 0):
pass
Listing 2.2: Ansteuerung von Pins der GPIO-Schnittstelle
2.3 Den Raspberry Pi konfigurieren
Bevor der Raspberry Pi eingesetzt werden kann, muss er konfiguriert werden. Außerdem muss er mit weiterer Hardware versehen werden, damit er als vollwertiger Computer verwendet werden kann.
2.3.1 Den RPi mit weiterer Hardware versehen
Der Raspberry Pi ist ein Einplatinencomputer ohne Peripherie. Sie müssen ihn also noch mit verschiedenen Komponenten ergänzen. Das sind:
eine USB-Tastatur
eine USB-Maus
einen HDMI-Monitor (kann auch der Fernseher sein, wenn HDMI-fähig)
eine Mikro-SD-Karte als Festplattenersatz. Diese wird, wenn entsprechend vorbereitet, in den SD-Kartenslot des Raspberry Pi gesteckt. Sie benötigen minimal eine 8-GB-Karte, ich würde diese aber noch höher dimensionieren.
ein Netzteil. Sie benötigen ein Netzteil, das eine Leistung von 5 Volt mit minimal 2,5 Ampere hat. Es muss einen Mikro-USB-Stecker besitzen, den Sie in die entsprechende Buchse am Raspberry Pi stecken können. Für den Raspberry Pi werden solche Netzteile im Fachhandel angeboten.
Der Raspberry Pi hat keinen Einschalter. Wenn Sie das Netzteil anschließen und einstecken, fährt er sofort hoch.
2.3.2 Die SD-Karte vorbereiten
Um eine Mikro-SD-Karte für den Raspberry Pi aufzusetzen, orientieren Sie sich an den Ausführungen der Webseite https://projects.raspberrypi.org/de-DE/projects/raspberry-pi-setting-up. Sie benötigen einen separaten Computer, auf dem Sie – abhängig von dem von Ihnen verwendeten Betriebssystem (Windows, macOS, Ubuntu) – den Raspberry Pi Imager installieren.
Ihr Computer sollte über einen separaten SD-Kartenleser verfügen. Wenn dies nicht der Fall ist, müssen Sie sich noch einen USB-SD-Kartenleser zulegen. Ich verwende den Transcend RDF5. Nachdem Sie den Ausführungen der zuvor erwähnten Webseite gefolgt sind, liegt Ihnen nun ein voll lauffähiger Raspberry Pi vor. Testen Sie ihn, indem Sie einige Experimente in Teil II meines Buches durchführen.
Anbieten würde sich hier das Experiment aus Abschnitt 7.6, »Experiment: LED dimmen« oder aus Abschnitt 9.4, »Experiment: Töne erzeugen«.
Legen Sie auf dem Raspberry Pi die folgende Ordnerstruktur an.
home / pi / Ae / Experimente
home / pi / Ae / Roboter / Interface
home / pi / Ae / Roboter / lib
home / pi / Ae / Roboter / Modelle
Dies können Sie mit dem Dateibrowser von Raspberry Pi OS durchführen. Gehen Sie so vor wie auf Ihrem PC. Sie können dann in die verschiedenen Ordner die Programme aus dem Download zum Buch (www.mitp.de/0310) geben. Dazu können Sie einen USB-Stick verwenden.
2.4 Den BrickPi3 anschließen
Um einen BrickPi3 aufzusetzen, richten Sie sich nach den Ausführungen der Webseite https://www.dexterindustries.com/BrickPi/brickpi3-getting-started-step-1-assembly/. Nach dem Aufbau befindet er sich zusammen mit dem Raspberry Pi in dem mitgelieferten Acrylgehäuse. Denken Sie daran, vor dem Zusammenbau des Acrylgehäuses die Mikro-SD-Karte zu konfigurieren. Ich nutze den Win32 Disk Imager, um das Betriebssystem von Dexter Industries auf die Mikro-SD-Karte zu bekommen. Von Dexter Industries wird eine spezielle Distribution des Betriebssystems Raspbian zur Verfügung gestellt.
Nach dem ersten Start des Raspberry Pi muss noch die Lokalisation eingestellt werden, insbesondere die von Ihnen verwendete, vermutlich deutsche Tastatur. Geben Sie in dem Terminalfenster (schwarzes Fenster in der Buttonleiste) die Befehle aus Listing 2.3 ein. Da momentan das anglo-amerikanische Tastaturlayout eingestellt ist, befindet sich der Bindestrich auf der Taste ß. Das Konfigurationsprogramm startet nach der Eingabe des Befehls und Enter in demselben Fenster.
sudo raspi-config
Listing 2.3: Aufruf des Konfigurationsprogramms des Raspberry Pi
Expandieren Sie zunächst das Filesystem. Wählen Sie dazu den Menüpunkt 7 / A1. Rebooten Sie danach den Raspberry Pi mit »Finish« Reboot »Yes«.
Stellen Sie in einem nächsten Schritt die Auflösung Ihres Bildschirms ein. Wählen Sie dazu die Menüpunkte 7 / A5 / CEA Mode 16, wenn Sie über einen 16:9-Monitor verfügen, der mit 60 Hz betrieben wird. Rebooten Sie dann den Raspberry Pi. Jetzt sieht der Desktop doch schon viel besser aus!
Stellen Sie danach die Tastatur ein. Es wird, wenn bei Ihrer Tastatur ein Nummernblock vorhanden ist, eine 105-Tasten-Tastatur sein. Wählen Sie in raspi-config 4 / I3 / Generic 105 Key ... / Other / German / German / The default ... / No compose key / No. Rebooten Sie danach den Raspberry Pi, indem Sie auf den Menübutton / Shutdown / Reboot klicken. Falls Ihre Tastatur keinen Nummernblock hat, stellen Sie hier eine entsprechend andere Tastatur ein.
Mit den drei Punkten kürze ich jeweils nur die angezeigten Texte im Menü ab.
Aktivieren Sie mit dem entsprechenden Icon auf dem Desktop das Programm »Advanced Communication«. Sollte bei »UART / BrickPi« Disabled stehen, dann aktivieren Sie diesen Punkt mit dem Button Enable UART / BrickPi, damit der BrickPi3 später mit dem Raspberry Pi kommunizieren kann.
Und zuletzt richten Sie sich noch das WLAN ein. Wählen Sie in raspi-config den Menüpunkt 2 / N2. Geben Sie dann Ihren WLAN-Namen und das zugehörige Passwort ein. Rebooten Sie den Raspberry Pi. Das WLAN-Zeichen oben rechts müsste jetzt aktiviert sein.
Legen Sie auch hier die bekannte Ordnerstruktur an.
home / pi / Ae / Experimente
home / pi / Ae / Roboter / Interface
home / pi / Ae / Roboter / lib
home / pi / Ae / Roboter / Modelle
Dies können Sie mit dem Dateibrowser von Raspbian durchführen. Sie können dann auch hier in die verschiedenen Ordner die Programme aus dem Download zum Buch speichern.
Tabelle 2.2 zeigt die Ports des BrickPi3.
Tabelle 2.2: Die Ports des BrickPi3
Port
|
Bedeutung
|
MA
|
Motorport A
|
MB
|
Motorport B
|
MC
|
Motorport C
|
MD
|
Motorport D
|
S1
|
Sensorport 1
|
S2
|
Sensorport 2
|
S3
|
Sensorport 3
|
S4
|
Sensorport 4
|
In Abschnitt 3.1.7 wird ein Experiment beschrieben, mit dem Sie die Installation des BrickPi3 testen können.
Kapitel 3:
Die elektronischen Komponenten
Roboter arbeiten mit Motoren, die sie antreiben, und Sensoren, mit denen sie sich in ihrer Umgebung orientieren. Ich stelle in meinem Buch sowohl vollkommen aus LEGO-Komponenten gebaute Roboter als auch aus LEGO und Fremdkomponenten gebaute Roboter vor. Die nächsten beiden Abschnitte zeigen diese Komponenten und geben jeweils eine kurze Beschreibung. Außerdem stelle ich mit »Codeschnipseln« die Verwendung der Komponenten vor. Dabei werden die Klassen (siehe Kapitel 9 für mehr Informationen über Klassen) verwendet, die ich zu den einzelnen Komponenten entwickelt habe. Die Codeschnipsel nehmen hier natürlich die Themen des Teils II meines Buches vorweg. Sie sollen Ihnen später als Nachschlagewerk dienen, wenn Sie sich mit der Programmierung des Raspberry Pi vertraut gemacht haben.
3.1 Verwendung der LEGO-Elektronik-Komponenten
Die in diesem Abschnitt aufgeführten LEGO-Sensoren und -Motoren werden in die Roboter der Kapitel 10 bis 17 eingebaut.
3.1.1 Der LEGO-Colorsensor
Der LEGO-Colorsensor wird hier als Lichtsensor verwendet. Er soll dabei den Status »Hell« vom Status »Dunkel« unterscheiden. Der Colorsensor wird beispielsweise eingesetzt, um die Grenzen eines Parcours zu erkennen, die mit weißen Papierstreifen auf dem Boden gekennzeichnet wurden.
color = LegoColorSensor(PORT_1, TYPE_SENSOR_EV3_COLOR_M0)
light = color.getLight()
if (light < 1000):
print(light)
Listing 3.1: Verwendung des LEGO-Colorsensors
3.1.2 Der LEGO-Touchsensor
Damit ein Roboter merkt, dass er gegen einen Gegenstand gefahren ist, wird der LEGO-Touchsensor eingesetzt. Außerdem lassen sich mit dem Touchsensor dem Roboter allgemeine Signale geben, z.B. wann er mit seiner Arbeit beginnen soll.
touch = LegoTouchSensor(PORT_2, TYPE_SENSOR_EV3_TOUCH_0)
if (touch.isTouched()):
pass
Listing 3.2: Verwendung des LEGO-Touchsensors
3.1.3 Der LEGO-Infrarotsensor
Der Abstand zu einem Gegenstand kann mit dem LEGO-Infrarotsensor ermittelt werden. Mit dem IR-Sensor kann ein Roboter seine Umgebung scannen. Er kann feststellen, wie weit bestimmte Gegenstände von ihm entfernt sind oder bis wohin ein Gegenstand reicht.
ir = LegoInfraRedSensor(PORT_1, TYPE_SENSOR_EV3_INFRARED_M0)
dist = ir.getDistance()
if (dist < 1000):
print(dist)
Listing 3.3: Verwendung des LEGO-Infrarotsensors
3.1.4 Der Hitechnic-Kompass-Sensor
Um einem Roboter die Orientierung in einem Raum zu ermöglichen, wird der Kompass-Sensor eingesetzt. Wenn es wichtig ist, dass ein Roboter immer genau um 90° wendet, kann der Kompass-Sensor eingesetzt werden. Der Roboter orientiert sich dann an den Himmelsrichtungen.
compass = HitechnicCompassSensor(PORT_1, 0, 0)
direction = compass.getDirection()
Listing 3.4: Verwendung des Hitechnic-Kompass-Sensors
3.1.5 Der Hitechnic-Gyrosensor
Der Gyrosensor meldet dem Roboter, ob sich seine Lage verändert hat. Fährt er beispielsweise mit dem Rad auf ein Buch und steht dann schräg im Raum, kann der Roboter dies durch den Gyrosensor erkennen.
gs = HitechnicGyroSensor(PORT_1)
pos = gs.getPosition()
Listing 3.5: Verwendung des Hitechnic-Gyrosensors
3.1.6 Der mittlere LEGO-Motor
Der mittlere Motor wird zum Bewegen kleinerer Lasten herangezogen. Soll der Roboter einen Sensor bewegen oder eine Klaue öffnen und schließen, kann der mittlere Motor eingesetzt werden.
motor = LegoMotor(PORT_A)
motor.resetTachoCount()
motor.setSpeed(power)
motor.forward(360)
while(motor.isMoving()):
time.sleep(0.5)
Listing 3.6: Verwendung des mittleren LEGO-Motors
3.1.7 Der LEGO-Motor
Zum LEGO-EV3-System gehören die großen Motoren. Zwei von ihnen bewegen zumeist den gesamten Roboter. Die Motoren können nur verwendet werden, wenn sie an das BrickPi3-Modul angeschlossen werden.
motor = LegoMotor(PORT_A)
motor.resetTachoCount()
motor.setSpeed(power)
motor.forward(360)
while(motor.isMoving()):
time.sleep(0.5)
Listing 3.7: Verwendung des LEGO-Motors
Um die Installation der Motoren zu testen, schließen Sie einen LEGO-Motor an den Port A des BrickPi3 an und einen Touchsensor an Port 1 (siehe Abbildung 3.8). Geben Sie danach das Programm in Listing 3.8 ein, im Vorgriff auf die in Teil II dieses Buches dargestellte Einführung in Python. Benutzen Sie dazu das Programm Thonny (sehen Sie sich vorher die Einführung in das Programm in Abschnitt 4.1 an). Schließen Sie das Powerpack an den BrickPi3 an und stellen Sie den Schalter auf »on«.
#!/usr/bin/python3
#########################
# Motor und Sensor Test #
# 15.10.2020 #
#########################
import brickpi3 #
import time
BP = brickpi3.BrickPi3() #
BP.set_sensor_type(BP.PORT_1, BP.SENSOR_TYPE.TOUCH)
time.sleep(10) #
power = 20 #
direction = 1
done = False
print ("Start") #
try:
while True: #
touch_value = BP.get_sensor(BP.PORT_1)
if touch_value == 1: #
if not done: #
BP.set_motor_power(BP.PORT_A, power * direction)
direction = 0 - direction
done = True
else: #
BP.set_motor_power(BP.PORT_A, 0)
done = False
time.sleep(0.1)
except KeyboardInterrupt:
print ("Ende") #
Listing 3.8: Test des BrickPi3 (MotorRun.py)
Es werden die nötigen Modulbibliotheken importiert.
Dann wird eine Variable für den BrickPi3 erzeugt. Im Anschluss daran erfolgt die Definition des Touchsensors an Port 1.
Um einen Fehler des BrickPi zu vermeiden, wird zehn Sekunden gewartet.
Drei Variablen werden definiert: power
, um die Laufgeschwindigkeit des Motors zu bestimmen, direction
für die Drehrichtung des Motors und done
zur Steuerung der Drehrichtung.
Es wird in der Konsole »Start« ausgegeben.
Die weitere Steuerung des Motors erfolgt in einer Endlosschleife.
Nachdem der Wert des Touchsensors geholt wurde, wird der Motor angeschaltet, wenn der Touchsensor gedrückt ist.
Wurde bisher noch keine Steuerung vorgenommen, dann wird die Motorgeschwindigkeit auf power
*
direction
gesetzt. Abhängig davon, ob in der Variablen direction
eine 1 oder eine -1 steht, dreht sich der Motor in die eine oder andere Richtung. Danach wird die Zahl in direction
umgedreht, aus der 1 wird eine -1 oder aus der -1 eine 1. Damit dieser Teil des Programms nicht ständig ausgeführt wird, wird die Variable done
auf True
gesetzt.
Wird der Touchsensor nicht gedrückt, wird die Motorgeschwindigkeit auf null gesetzt und done
auf False
.
Nach einem Keyboard-Interrupt wird »Ende« ausgegeben.
Starten Sie das Programm. Wenn Sie auf den Touchsensor drücken, dreht sich der Motor in eine Richtung. Lassen Sie den Touchsensor los, stoppt der Motor. Drücken Sie noch mal auf den Touchsensor, dreht sich der Motor in die andere Richtung. Beenden Sie das Programm, indem Sie die Tasten Strg+C drücken.