EM2017SSP13: Unterschied zwischen den Versionen

Aus Verteilte Systeme - Wiki
Zur Navigation springen Zur Suche springen
Zeile 79: Zeile 79:
   
 
==Implementierung==
 
==Implementierung==
  +
'''Erste Schritte'''
  +
Fahrzeug einfach geradeaus fahren lassen und nach ablenken (ohne Benutzung des Ultraschallsensors):
  +
  +
task body Movement is
  +
takte : Integer := 0;
  +
while takte <= 400 loop
  +
takte := takte+1;
  +
case takte is
  +
when 0 .. 100 => Forward;
  +
when 101 .. 150 => Stop;
  +
when 151 .. 250 => Spin_Left;
  +
when 251 .. 300 => Stop;
  +
when 301 .. 400 => Forward;
  +
when 401 .. 450 => Stop;
  +
when 451 .. 550 => Spin_Left;
  +
when 551 .. 600 => Stop;
  +
when others => Forward;
  +
end case;
  +
Forward;
  +
end loop;
   
 
==Quellen==
 
==Quellen==

Version vom 20. August 2017, 16:29 Uhr

Projektbeschreibung

In diesem Projekt soll die Programmiersprache Ada erlernt werden und eine beispielhafte Firmware für einen Lego Mindstorms Roboter implementiert werden, welcher autonom (zB. durch einen Raum) fahren kann und mit Hilfe von Abstandsmessung durch einen Ultraschallsensor Hindernissen erkennt. Wenn ein mögliches Hindernis erkannt wird, soll der Roboter seine Fahrtrichtung ändern und somit dem Hindernis ausweichen.

Lego Mindstorms

Lego Mindstorms ist ein Programmierbarer Legostein der Firma Lego welcher Sensoren und Motoren ansprechen kann um Roboter oder andere autonome Systeme zu entwickeln bzw. zu programmieren. In meinem Projekt habe ich mich auf die Bauteile Ultraschallsensor und 2 Motoren konzentriert.

NXT:

9841.png


Motor:

9842.png


Ultraschall-Sensor:


9843.png

Vorbereitung

Zu aller Erst muss das richtige Umfeld für die Entwicklung geschaffen werden, hierzu müssen ein paar Programme, Tools und Dateien heruntergeladen und installiert werden:


Unter folgendem Link kann man sich den Ada für Lego Mindstorms compiler für Linux herunterladen: http://www.dit.upm.es/%7Estr/proyectos/mindstorms/2011/index.html


Adaformindstorms-linux-2011-x86-gdb-bin.tar.gz ← downloaden, in diesem Verzeichnis liegt das makefile um ein Ada Programm für einen nxt Brick zu kompilieren


Die Firmware für den NXT Brick kann auf: https://lc-www-live-s.legocdn.com/r/www/r/mindstorms/-/media/franchises/mindstorms%202014/downloads/firmware%20and%20software/nxt%20software/firmware131_download1.zip?l.r2=798380141 heruntergeladen werden.


Als nächstes müssen einige Pakete und Treiber unter Linux installiert werden, damit man im folgenden die USB-Schnittstelle verwenden kann und der NXT Brick erkannt wird.


  • sudo apt-get install gnat → ist der normale gnatcompiler für ada
  • sudo apt-get install libusb-dev
  • sudo apt-get install libusb-1.0
  • sudo apt-get install git → wird benötigt um libnxt zu bekommen, git ist eine art Repository verwaltung
  • git clone https://github.com/xerpi/libnxt.git → hier liegt libnxt, es wird ins aktuelle Verzeichnus kopiert
  • sudo apt install scons → ähnlich wie make
  • scons


Um das programm kompilieren zu können, muss das beiliegende Makefile abgeändert werden. Der Kernel Path muss auf den Pfad geändert werden, in dem das makefile für das Ada programm liegt. In meinem Fall: /home/danielring/gnatmindstorms2011/lib/gcc/arm-eabi/4.5.3/rts-ravenscar-sfp/ravenscar


Damit man jetzt mit dem Brick per USB (als serielle schnittstelle) kommunizieren kann muss man noch dem user die Gruppe “dialout” geben. Hierzu muss man “sudo adduser username dialout” eingeben. Hier nach muss man sich dann einmal aus- und wieder einloggen, damit die Einstellung wirksam wird.


Wenn man jetzt den befehl Group in die Komandozeile eingibt kann man testen ob die Gruppe hinzugefügt wurde oder nicht. Mit “lsusb” kann man sehen ob das NXT Brick angeschlossen bzw. erkannt wurde.


Firmware neu aufspielen: cd ~/libnxt sudo ./fwflash /home/danielring/Downloads/LEGO\ MINDSTORMS\ NXT\ Firmware\ V1.31.rfw


Programm auf das Brick laden: cd ~/libnxt sudo ./fwexec /home/danielring/Downloads/vehicle_v12/vehicle_v12.bin

Fortschritt

  1. Roboter zusammen gebaut
  2. Erstes einfaches "Hello World" Programm in Ada geschrieben und getestet
  3. Tools heruntergeladen und installiert
  4. Standardfirmware auf NXT geladen um zu testen ob das Übertragen funktioniert
  5. Testfirmware mit einfacher Motoransteuerung auf den NXT geladen um auch hier zu testen ob alles funktioniert
  6. Mit der Programmierung und Ansteuerung der Motoren und dem Ultrasonic-Sensor auseinander gesetzt (wie kann man über Ada die Distanz ermitteln und benutzen)
  7. Einfaches fahren und drehen/ablenken bei einer Distanz kleiner als 10 cm zum Hindernis

Implementierung

Erste Schritte Fahrzeug einfach geradeaus fahren lassen und nach ablenken (ohne Benutzung des Ultraschallsensors):

task body Movement is takte : Integer := 0;

   while takte <= 400 loop 
       takte := takte+1;
       case takte is
           when 0 .. 100      => Forward;
           when 101 .. 150      => Stop;
           when 151 .. 250    => Spin_Left;
           when 251 .. 300      => Stop;
           when 301 .. 400    => Forward;
           when 401 .. 450      => Stop;
           when 451 .. 550    => Spin_Left;
           when 551 .. 600      => Stop;
           when others        => Forward;
       end case;
       Forward;
   end loop;

Quellen

https://shop.lego.com/en-US/NXT-Intelligent-Brick-9841

https://shop.lego.com/en-US/Interactive-Servo-Motor-9842

https://www.generationrobots.com/de/401180-ultraschallsensor-lego-mindstorms-nxt.html