kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Entwicklung autonomer mobiler Systeme day by day Sommersemester 2019

(EN google-translate)

(PL google-translate)

1 -- Donnerstag 21.03.2019

83_AV (Einführung)
83_AV/02_Architekturen

2 -- Donnerstag 28.03.2019

Arbeiten an der Kutsche

MotorAnsteuernSeriell_OOP2.zip MotorAnsteuernSeriell_OOP2.zip (Basisprojekt, Mikrocontroller der Kutsche -- Verbindungsglied zwischen Laptop und Antrieb, sowie Sicherheitselemente)

Entwicklungsumgebung: Processing

https://www.processing.org/

Sie in Processing Basisbeispiele zu:

  • Serial (Nachrichten an die Motorsteuerung senden)

Gruppenaufgaben:

  1. Motoren von Processing aus mit Library Serial ansteuern

3 -- Donnerstag 04.04.2019

Gemeinsam wird folgendes umgesetzt:

  • Modularisierung der Motoransteuerung mittles objektorientierter Programmierung.
  • Video Capturing (Verwendung einer USB-Kamera)f
  • Bestimmung des Rotanteils eines Pixels des Videobildes.
public class Antrieb
{
      private Serial seriell = null;
      //                       012345678901
      private byte[] puffer = "#+0000+0000$".getBytes();

      private PApplet pap;

      public Antrieb(PApplet pap)
      {
          this.pap = pap;
          try
          {
              seriell = new Serial(pap, "/dev/ttyACM0", 9600);
          }
          catch(Exception e)
          {
              println("Fehler in Klasse Antrieb: Arduino ist nicht verfügbar!");
          }
          setzeAntrieb(0, 0); //0...9999 nutzbar: 3300...4500
      }
      void setzeAntrieb(int links, int rechts)
      {
          if(links>9999)  links=9999;
          if(links<0)     links=0;
          if(rechts>9999) rechts=9999;
          if(rechts<0)    rechts=0;

          puffer[5] = (byte)(48+links%10);
          links/=10;
          puffer[4] = (byte)(48+links%10);
          links/=10;
          puffer[3] = (byte)(48+links%10);
          links/=10;
          puffer[2] = (byte)(48+links%10);
      
          puffer[10] = (byte)(48+rechts%10);
          rechts/=10;
          puffer[9] = (byte)(48+rechts%10);
          rechts/=10;
          puffer[8] = (byte)(48+rechts%10);
          rechts/=10;
          puffer[7] = (byte)(48+rechts%10);

          if(seriell!=null)
              seriell.write(puffer);              
      }
      
}

Code 0-1: Antriebsmodul

import processing.video.*;

Capture cam;
int VGABREITE = 640;
int VGAHOEHE = 480;
void setup() 
{
    size(1280, 960);

    cam = new Capture(this, 640, 480);
//    cam = new Capture(this, cameras[0]);
    cam.start();
}

void draw() 
{
  background(255);
  if (cam.available() == true) 
  {
    cam.read();
    cam.updatePixels();
  }
  image(cam, 0, 0);
  int x = VGABREITE/2;
  int y = VGAHOEHE/2;
  int index = y*VGABREITE + x;
  int pixelfarbe = cam.pixels[index];
  
  int ROT   = (int)red(pixelfarbe);
  int GRUEN = (int)green(pixelfarbe);
  int BLAU  = (int)blue(pixelfarbe);
  fill(0);
  textSize(40);
  text("R="+ROT+" G="+GRUEN+" B="+BLAU,50,50); 
  
  int ECHTESROT = ROT - GRUEN - BLAU;
  if(ECHTESROT<0)
      ECHTESROT = 0;
      
  text("ECHTESROT="+ECHTESROT,450,550);       
}

Code 0-2: Kamerabeispiel

Gruppenaufgaben:

  1. USB-Kamera benutzen
  2. Schwerpunkt des Rotanteils bestimmen
  3. Linienverfolgung für Kutsche realisieren (im Prinzip)
Reglerentwicklung.zip Reglerentwicklung.zip -- Alle drei in der Vorlesung entwickelte Processing-Projekte.

4 -- Donnerstag 11.04.2019


Geplant: Linienfahrt ODER Ansteuerung Laserrotationssensor


Das Sicherheitskonzept muß reaktiviert werden:

  • Analysieren Sie die nachfolgend dargestellte Totmann-Klasse aus MotorAnsteuernSeriell_OOP2 (Arduino-Projekt).
  • Wie kann sie benutzt werden, um für den sicheren Ablauf der Versuche zu sorgen?
#include "Arduino.h"

class Totmann
{
    private:
        const int totmannPin = 11;
        unsigned long totmannzeit = 1000;        
        unsigned long previousMillisSerial;
        unsigned long previousMillisButton;
        int buttonState = 0;        
    public:
        Totmann(long totmannzeit)
        {
            this->totmannzeit = totmannzeit;
        }        
        void start()
        {
            previousMillisButton = millis();
            previousMillisSerial = millis();            
        }        
        void auffrischenButton()
        {
            buttonState= digitalRead(totmannPin); // Knopf auslesen
            if(buttonState == HIGH)
            {
                previousMillisButton = millis(); 
            }                    
        }
        void auffrischenSerial()
        {
            previousMillisSerial = millis();            
        }
        bool buttonOK()
        {
            if((millis()-previousMillisButton)>totmannzeit)
            {
                return false;
            }          
            else
            {
                return true;
            }
        }
        bool serialOK()
        {
            if((millis()-previousMillisSerial)>totmannzeit)
            {
                return false;
            }          
            else
            {
                return true;
            }
        }
};

Code 0-3: Totmann-Klasse aus MotorAnsteuernSeriell_OOP2 (Arduino-Projekt).

Vorbereitungen für die Fahrt:

  • Rote Linie am Boden mit Isolierklebeband anbringen.
  • Strecke sichern (ggf. Leute bitten für den Zeitraum der Versuche den Fahrbereich zu verlassen).
  • Fangseile an der Deichsel richtig anbringen.
  • Vorversuch in aufgebocktem Zustand.
  • Vortrieb langsam im Verlauf mehrerer Versuche steigern, bis die Kutsche gerade so fährt.

5 -- Donnerstag 18.04.2019


Geplant: Linienfahrt ODER Ansteuerung Laserrotationssensor


6 -- Donnerstag 25.04.2019


Theoretische Einheit im Raum IWZ141.


Theoretische Konzepte für die Softwareentwicklung an der Elektrokutsche

Programmiergrundlagen:

  • Vererbung
  • Schnittstellen
  • Threads
77_Android/11_Tonerkennung/03_Java_Threads
AutonomesFahrzeug001.zip
AutonomesFahrzeug002.zip
AutonomesFahrzeug003.zip
AutonomesFahrzeug004_PI.zip

7 -- Donnerstag 02.05.2019

  • Lösen des Problems mit Instabilität bei Simulation
  • Einbinden des Lidar-Sensors in die Elektrokutsche
LIDAR005.zip

8 -- Donnerstag 09.05.2019

Optionen:

  • Aufbau und Test des LIDAR-Sensors an die Kutsche (Maschinenhalle) ODER WENN NICHT VERFÜGBAR:
  • Modellierung eines Liniensensors in der AV-Simulation (IWZ141)

9 -- Donnerstag 16.05.2019

Beteiligung am Tag der offenen Tür als Teilprüfung zum Fach AV

Studierende erarbeiten in Gruppen einen bestimmten Stand bei Elektrokutsche und präsentieren diesen am Tag der offenen Tür am Freitag den 24.05. von 10 bis 12 im Audimax.

Die Aufgabe:

  • Das Fahrzeug wird eine Runde geschoben und speichert dabei an bestimmten Stellen Daten vom Lidar-Sensor.
  • Das Fahrzeug fährt eine zweite Runde, diese aber autonom mittels Linienverfolgung und hält aufgrund der Lidar-Daten genau dort, wo es gestartet ist.
  • Die aktuelle Position auf dem Kreis, bzw. das Passieren der gespeicherten Stationen wird geschätzt und per OSC-Protokoll über W-LAN an einen zweiten Laptop geschickt, der die Schätzung über einen Beamer für alle Zuschauer sichtbar anzeigt.

Hinweise:

  • Teilaufgaben können im Team untereinander verteilt werden.
  • Fragen an mich beantworte ich immer, aber dann für alle.
  • Auch die Porjektarbeitsgruppen sollten allen alles zur Verfügung stellen.
  • Die Verwendung von OSC kann durch Studierende präsentiert werden, die Fehlertoleranten Softwareentwurf bereits gehört haben.
  • Mittwoch 22.5. (ev. 8h) und der Tag der offenen Tür am Freitag 24.5. können als Zusatztermine genommen werden. Entsprechend viele Termine fallen am Ende der LV weg.
  • Neben der mündlichen Präsentation und Vorführung an der Kutsche, ist von jeder Gruppe ein gemeinsamer Bericht abzugeben.

Beurteilungskriterien und Bereiche, die eingehend bearbeitet werden sollten:

  1. Die Linienverfolgung sollte robust und fehlerfrei arbeiten.
  2. Das Erkennen der Zwischen- und der Endstation mittels Lidar-Sensor sollte gut funktionieren.
  3. Die aufgrund per W-LAN übertragener daten verfügbare visuelle Darstellung auf dem zweiten Laptop sollte gut verständlich sein und einen möglichst guten Einblick in das Funktionieren des Gesamtsystems gewährleisten.
  4. Ausarbeitung einer interessanten mündlichen Präsentation vor dem Publikum (Nutzen Sie die Möglichkeit, Sachen direkt durch kleine Versuche mit der Kutsche zu zeigen!)
  5. Bericht (erst am Ende der Vorlesungszeit abzugeben, 5-10 Seiten, bitte alle Processing-Projekte mit abgeben, z.B. per E-Mail od. USB-Stick)
LIDAR018_LADEN_SPEICHERN.zip -- Laden und speichern, siehe FILE und Lidar.merken()
  • OSC-Beispiel (Datenübertragung mit W-LAN)
OSC_EMPFAENGER_PULT.zip
OSC_SENDER_AUF_KUTSCHE.zip

***** NEU ***** NEW ***** NEU ******

LIDAR_30.zip -- Neue Version zur LIDAR-Ansteuerung der Studierenden Sharif, Zawawi, Nasir

10 -- Donnerstag 23.05.2019

  • Arbeit an der Kutsche im Audimax

11 -- Donnerstag 30.05.2019


vorlesungsfrei (Feiertag)


12 -- Donnerstag 06.06.2019

Nachbesprechung zum Tag der offenen Tür / Ergänzungen:

  • Frühe Forschungen zum autonomen Fahren in der Landwirtschaft
  • Bildverarbeitung für das autonome Fahren
Kantenfilter.zip -- Vollkreis als Beispiel
Kantenfilter2.zip -- horizontale Kantenfilterung
Kantenfilter3.zip -- horizontale und vertikale Kantenfilterung

13 -- Donnerstag 13.06.2019


Findet nicht statt: Wurde bereits vorgeholt am Mittwoch den 22.05.2019 / Bei Bedarf Arbeiten an der Kutsche


14 -- Donnerstag 20.06.2019


Findet nicht statt: Wurde bereits vorgeholt am Mittwoch den 22.05.2019 / Bei Bedarf Arbeiten an der Kutsche


15 -- Donnerstag 27.06.2019


Letzter gemeinsamer Termin: Ergänzende Präsentationen zur Elektrokutsche und LIDAR, sowie Vortrag zu einer Hausarbeit.