Autonome Spurführung mit einem JetRacer ROS AI Robot: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(32 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
| '''Autor:'''  || Jonas Michael Beisler
| '''Autor:'''  || Jonas Michael Beisler
|-
|-
| '''Modul:''' || Projektarbeit, TBD (bitte eintragen)
| '''Modul:''' || Projektarbeit, MBP-B-2-6.05
|-
|-
|  '''Starttermin''': || 19.02.2024
|  '''Starttermin''': || 19.02.2024
Zeile 12: Zeile 12:
|  '''Abgabetermin''': || TBD
|  '''Abgabetermin''': || TBD
|-
|-
|  '''Prüfungsform''': ||  Modulabschlussprüfung als Hausarbeit (Praxisbericht, Umfang 30-50 Seiten Textteil)
|  '''Prüfungsform''': ||  Modulabschlussprüfung als Hausarbeit (Praxisbericht, Umfang 10-50 Seiten Textteil)
|-
|-
|  '''Betreuer''': || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]], Tel. 806
|  '''Betreuer''': || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]], Tel. 806
Zeile 33: Zeile 33:


== Durchführung ==
== Durchführung ==
# Nachvollziehen/Durchführung der Anleitung auf der WaveShare Website
*'''Zeitplanung'''
#  
:#Ursprüngliche Planung
:#Überarbeitete Planung
*'''Montage des Jetracers'''
:Der Jetracer wurde wie in diesem Tutorial: [https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit_Tutorial_I:_Assembly_Manual: Anleitung zum Aufbau des Jetracers] beschrieben aufgebaut. Besonders zu beachten hierbei ist dass das sogenannte Expansion Board welches die Batterien hält, und das Jetson Nano Modul vorher einmal aufgebaut und hochgefahren werden sollten. Somit kann nämlich sicher gegangen werden das beide funktionieren und nicht später wieder ausgebaut werden müssen.
:'''Verbesserung beim Aufbau'''
:Eine Abänderung/Verbesserung zum Montage-Tutorial war das die Schraubenlöcher die zum fixieren des Servo-Motor dienen, nach unten hin größer gefeilt wurden. Dies war nötig da der Servo Motor sonst zu die über ihm liegende Teile blockiert hätte. Außerdem wurde die Aufhängung des Motors durch größere Schrauben und Gummringe zur Dämpfung verbessert.
*'''Multimachine Communication'''
:#Jetracer Image
::[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit_Tutorial_II:_Install_Jetson_Nano_Image: Anleitung für die Inbetriebnahme des Racers]
:#Virtualbox Ubuntu Image
:[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit_Tutorial_III:_Install_Ubuntu_Virtual_Image: Anleitung für die Inbetriebnahme des Controllers]
:#Verbinden der beiden Parteien
:[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit_Tutorial_IV:_Configure_Multi-machine_Communication: Anleitung für die Verbindung zwischen Racer und Controller]
:#NoMachine
:Sehr nützlich für das Arbeiten mit dem Jetracer ist das Programm NoMachine.
*'''Austesten aller Funktionen'''
:#Kamera
:Kalibrieren der Kamera (Tutorial)
:#LIDAR
:Austesten des LIDARS und der verschiedenen Mapping-Algorithmen (Tutorial)
:#Verschiedene manuelle Steuerungsmodi
::#Steuerung per Tastatur
::#Steuerung per Joystick
:::Zu beachten ist hierbei das der Joystick/Controller von der Virtualbox richtig erkannt wird. Dafür muss in den Einstellungen das Gerät als USB-Eingabe festgelegt werden. Ebenfalls könnte es sein das die Ports js0 und js1 in der Virtualbox getauscht werden müssen, da sonst die Maus als Eingabe anstatt des Controllers benutzt wird. "Hier" wird beschrieben wie die Ports getauscht werden können.
:#Automatisches Fahren
:Im Tutorial "" ist beschrieben wie die Navigations-Funktion des Jetracers aktiviert und genutzt werden kann.
::#Anfahren eines einzelnen Zieles
::Um einen einzelnen Punkt auf der Karte anzufahren,
::#Abfahren mehrerer Punkte
::Um mehrere Zielpunkte setzen und dann abfahren zu können muss auf Seiten des Jetracers das sogenannte "Multipoint_navigation.py" Skript ausgeführt werden. Danach aktiviert sich im Rviz die Funktion "XYZ" und die Punkte können per Maus nacheinander gesetzt werden.
*'''Endziel festlegen'''
:Als Endziel wurde festgelegt das der Roboter die im Labor aufgemalte Strecke abfahren soll. Dies sollte anhand von automatisch gesetzten Navigationspunkten erfolgen. Als Automatisch wird in diesem Falle festgelegt das alle benötigten Punkte gesetzt werden sobald ein bestimmtes Skript im Jetracer ausgeführt wird.
*'''Raum Kartographieren'''
:[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit_Advanced_Tutorial_I:_SLAM_Lidar_Mapping: Anleitung für das erstellen einer Karte mit SLAM]
//Bild der Karte//
*'''Erstellen eigener Python Skripte'''
:Vorhandene Skripte verstehen
:Als Vorbild wurde das oben bereits erwähnte, Multipoint Navigation Skript, genutzt. In diesem war der Code, der für das markieren der Punkte in Rviz und das setzten der Zielpunkte für den Racer, vorhanden. Dieser Code wurde dann erstmal so abgeändert das einige Marker in Rviz nicht beim Mausklick, sondern direkt beim ausführen des Skriptes gesetzt wurden. Allerdings stellte sich das setzen der Zielpunkte als etwas schwierieger dar, da dieses ausführlicheren Publisher Code benötigte.
:ROS Publisher & Subscriber verstehen
:Die sogenannten Publisher und Subscriber sind eine der wichtigsten Funktionen die es in ROS gibt. Sie sind dafür zuständig Daten, wie zum Beispiel Informationen über Marker oder Befehle, zwischen den verschiedenen Nodes hin und her zu schicken. "ROS Tutorial Seite".
:Einbauen der gewollten Funktionen
*'''Austesten der Skripte'''
:Testen & Verbessern des Skriptes
*'''Finale Vorführung des Ziels'''
:Video
 
== Anforderungen ==
== Anforderungen ==
Das Projekt erfordert Vorwissen in den nachfolgenden Themengebieten. Sollten Sie die Anforderungen nicht erfüllen müssen Sie sich diese Kenntnisse anhand im Rahmen der Arbeit anhand von Literatur/Online-Kursen selbst aneignen.
Das Projekt erfordert Vorwissen in den nachfolgenden Themengebieten. Sollten Sie die Anforderungen nicht erfüllen müssen Sie sich diese Kenntnisse anhand im Rahmen der Arbeit anhand von Literatur/Online-Kursen selbst aneignen.
* Umgang mit Linux
* Umgang mit Linux
* C-Programmierung
* Python-Programmierung
* Dokumentenversionierung mit SVN
* Dokumentenversionierung mit SVN
* Optional:  
* Optional:  
Zeile 60: Zeile 105:
== Repositorium ==
== Repositorium ==
* Sciebo-Projektordner: \JetRacer_ROS_AI_Robot\  
* Sciebo-Projektordner: \JetRacer_ROS_AI_Robot\  
* Sciebo-Abgabeordner: \Jonas_Baisler\Projektarbeit\
* Sciebo-Abgabeordner: \Jonas_Beisler\Projektarbeit\


== Getting started ==
== Getting started ==
Zeile 91: Zeile 136:


== Nützliche Artikel ==
== Nützliche Artikel ==
*[https://www.waveshare.com/product/robotics/mobile-robots/jetson-nano-ai-robots/jetracer-ros-ai-kit.htm#none; Waveshare: JetBot Professional Version ROS AI Kit]
*[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit Waveshare: JetRacer ROS AI Kit Wiki]
*[https://www.waveshare.com/wiki/JetRacer_ROS_AI_Kit Waveshare: JetRacer ROS AI Kit Wiki]


----
----
→ zurück zum Hauptartikel: [[Studentische_Arbeiten|Studentische Arbeiten]]
→ zurück zum Hauptartikel: [[Studentische_Arbeiten|Studentische Arbeiten]]

Aktuelle Version vom 18. September 2024, 17:50 Uhr

Abb. 1: JetRacer ROS AI Roboter von Waveshare
Autor: Jonas Michael Beisler
Modul: Projektarbeit, MBP-B-2-6.05
Starttermin: 19.02.2024
Abgabetermin: TBD
Prüfungsform: Modulabschlussprüfung als Hausarbeit (Praxisbericht, Umfang 10-50 Seiten Textteil)
Betreuer: Prof. Dr.-Ing. Schneider, Tel. 806
Mitarbeiter: Marc Ebmeyer, Tel. 847

Einführung

Der JetRacer ist ein Modellrennwagen im Maßstab 1:10. Hierbei handelt es sich um ein leistungsstarkes intelligentes KI-Modellfahrzeug, das speziell für Studierende entwickelt wurde, die den Umgang mit dem Robot Operation Systelm (ROS) erlernen möchten. Das System besteht aus zwei Steuereinheiten. Den Host-Controller bildet das JETSON-NANO-DEV-KIT-A und als Sub-Controller wird ein Raspberry Pi RP2040-Mikrocontroller verwendet. Die Hauptplatine integriert die OLED, den Servomotor-Antriebsschaltkreis, den Batterieschutzschaltkreis, einen Audioausgangsschaltkreis usw., das lästige Löten des Schaltkreises erspart, das Entladen und Laden unterstützt und kein wiederholtes Entfernen des Akkus erfordert. Der verbauter IMU-Lagesensor und DC-Encodermotor regelt die Geschwindigkeit über einen PID-Regler und kann einen Radkilometerzähler ausgeben. Die Software ist mit dem Open-Source-Projektprogramm NVIDIA Jetbot kompatibel und unterstützt AI Deep Learning, SLAM-Mapping und -Navigation, visuelle OpenCV-Verarbeitung, intelligente Sprachinteraktion und andere Funktionen.

Aufgabenstellung

  1. Einarbeitung in den JetRacer
  2. Ansteuerung des Antriebs und der Lenkung
  3. Einlesen der Sensoren
  4. Fokus auf eines der Schwerpunktgebiete
    1. SLAM LiDAR Mapping
    2. Bahnplanung, Autonome Navigation, dynamische Hindernisbehandlung
  5. Systemtest
  6. Optimierung
  7. Dokumentation der Vorgehensweise im HSHL-Wiki

Durchführung

  • Zeitplanung
  1. Ursprüngliche Planung
  2. Überarbeitete Planung
  • Montage des Jetracers
Der Jetracer wurde wie in diesem Tutorial: Anleitung zum Aufbau des Jetracers beschrieben aufgebaut. Besonders zu beachten hierbei ist dass das sogenannte Expansion Board welches die Batterien hält, und das Jetson Nano Modul vorher einmal aufgebaut und hochgefahren werden sollten. Somit kann nämlich sicher gegangen werden das beide funktionieren und nicht später wieder ausgebaut werden müssen.
Verbesserung beim Aufbau
Eine Abänderung/Verbesserung zum Montage-Tutorial war das die Schraubenlöcher die zum fixieren des Servo-Motor dienen, nach unten hin größer gefeilt wurden. Dies war nötig da der Servo Motor sonst zu die über ihm liegende Teile blockiert hätte. Außerdem wurde die Aufhängung des Motors durch größere Schrauben und Gummringe zur Dämpfung verbessert.
  • Multimachine Communication
  1. Jetracer Image
Anleitung für die Inbetriebnahme des Racers
  1. Virtualbox Ubuntu Image
Anleitung für die Inbetriebnahme des Controllers
  1. Verbinden der beiden Parteien
Anleitung für die Verbindung zwischen Racer und Controller
  1. NoMachine
Sehr nützlich für das Arbeiten mit dem Jetracer ist das Programm NoMachine.
  • Austesten aller Funktionen
  1. Kamera
Kalibrieren der Kamera (Tutorial)
  1. LIDAR
Austesten des LIDARS und der verschiedenen Mapping-Algorithmen (Tutorial)
  1. Verschiedene manuelle Steuerungsmodi
  1. Steuerung per Tastatur
  2. Steuerung per Joystick
Zu beachten ist hierbei das der Joystick/Controller von der Virtualbox richtig erkannt wird. Dafür muss in den Einstellungen das Gerät als USB-Eingabe festgelegt werden. Ebenfalls könnte es sein das die Ports js0 und js1 in der Virtualbox getauscht werden müssen, da sonst die Maus als Eingabe anstatt des Controllers benutzt wird. "Hier" wird beschrieben wie die Ports getauscht werden können.
  1. Automatisches Fahren
Im Tutorial "" ist beschrieben wie die Navigations-Funktion des Jetracers aktiviert und genutzt werden kann.
  1. Anfahren eines einzelnen Zieles
Um einen einzelnen Punkt auf der Karte anzufahren,
  1. Abfahren mehrerer Punkte
Um mehrere Zielpunkte setzen und dann abfahren zu können muss auf Seiten des Jetracers das sogenannte "Multipoint_navigation.py" Skript ausgeführt werden. Danach aktiviert sich im Rviz die Funktion "XYZ" und die Punkte können per Maus nacheinander gesetzt werden.
  • Endziel festlegen
Als Endziel wurde festgelegt das der Roboter die im Labor aufgemalte Strecke abfahren soll. Dies sollte anhand von automatisch gesetzten Navigationspunkten erfolgen. Als Automatisch wird in diesem Falle festgelegt das alle benötigten Punkte gesetzt werden sobald ein bestimmtes Skript im Jetracer ausgeführt wird.
  • Raum Kartographieren
Anleitung für das erstellen einer Karte mit SLAM

//Bild der Karte//

  • Erstellen eigener Python Skripte
Vorhandene Skripte verstehen
Als Vorbild wurde das oben bereits erwähnte, Multipoint Navigation Skript, genutzt. In diesem war der Code, der für das markieren der Punkte in Rviz und das setzten der Zielpunkte für den Racer, vorhanden. Dieser Code wurde dann erstmal so abgeändert das einige Marker in Rviz nicht beim Mausklick, sondern direkt beim ausführen des Skriptes gesetzt wurden. Allerdings stellte sich das setzen der Zielpunkte als etwas schwierieger dar, da dieses ausführlicheren Publisher Code benötigte.
ROS Publisher & Subscriber verstehen
Die sogenannten Publisher und Subscriber sind eine der wichtigsten Funktionen die es in ROS gibt. Sie sind dafür zuständig Daten, wie zum Beispiel Informationen über Marker oder Befehle, zwischen den verschiedenen Nodes hin und her zu schicken. "ROS Tutorial Seite".
Einbauen der gewollten Funktionen
  • Austesten der Skripte
Testen & Verbessern des Skriptes
  • Finale Vorführung des Ziels
Video

Anforderungen

Das Projekt erfordert Vorwissen in den nachfolgenden Themengebieten. Sollten Sie die Anforderungen nicht erfüllen müssen Sie sich diese Kenntnisse anhand im Rahmen der Arbeit anhand von Literatur/Online-Kursen selbst aneignen.

  • Umgang mit Linux
  • Python-Programmierung
  • Dokumentenversionierung mit SVN
  • Optional:
    • AI Deep Learning mit NVIDIA Jetson Nano
    • OpenCV Vision Processing
    • Simulation mit WeBots
    • Umgang mit ROS2
    • Partikel Filter SLAM
    • Mensch-Roboter Sprachinteraktion

Anforderungen an die wissenschaftliche Arbeit

Repositorium

  • Sciebo-Projektordner: \JetRacer_ROS_AI_Robot\
  • Sciebo-Abgabeordner: \Jonas_Beisler\Projektarbeit\

Getting started

Lesen Sie zum Einstieg diese Artikel

Tabelle 1: Checkliste
LOP Status Bemerkung
Sicherheitseinweisung für die Labore von Marc Ebmeyer
Schlüsselübergabe für die Labore von Marc Ebmeyer
SVN-Zugang bereitstellen user: Jonas_Beisler
Vereinbarung wöchentlicher Meetings user: Jonas_Beisler
Wiki-Zugang bereitstellen user: Jonas_Beisler


Nützliche Artikel


→ zurück zum Hauptartikel: Studentische Arbeiten