SDE Systementwicklung WS25/26: Spurverfolgung mit Kamera: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Lukas.berkemeier@stud.hshl.de (Diskussion | Beiträge)
Jan.steffens@stud.hshl.de (Diskussion | Beiträge)
Zeile 80: Zeile 80:
=Umsetzung (Do)=
=Umsetzung (Do)=
[[Datei:SimulinkModellSpurverfolgung.png|thumb|center|800px|Abb. 3: Simulink Gesamtmodell]]
[[Datei:SimulinkModellSpurverfolgung.png|thumb|center|800px|Abb. 3: Simulink Gesamtmodell]]
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong><code>starteAlphaBotMapping.m</code>&thinsp;</strong>
|-
|<syntaxhighlight lang="MATLAB" style="background-color: #EFF1C1; font-size:small">
%**************************************************************************
%                  Hochschule Hamm-Lippstadt                            *
%**************************************************************************
% Modul           : starteAlphaBotMapping.m                              *
%                                                                        *
% Datum          : 09.12.2025                                            *
%                                                                        *
% Funktion        : Empfang der Messwerte der Topcon Robotik Station      *
%                  PS-103A via Bluetooth, Umwandlung in W-KOS,          *
%                  Kartografierung von Position und Kurs                *
%                                                                        *
% Implementation  : R2025b                                                *
%                                                                        *
% Toolbox        : >= R2020b: Bluetooth Verbindung möglich              *
%                  <  R2020b: COM Verbindung                            *
%                                                                        *
% Authoren        : Prof. Ulrich Schneider                                *
%                  Jan Steffens                                          *   
%                                                                        *
% Benötigt        : PositionserfassungPrisma.m, KosTrafoTzuWelt.m        *
%                                                                        *
% Letzte Änderung : 07.10.2025                                            *
%                                                                        *
%**************************************************************************
% Wiki-Artikel: https://wiki.hshl.de/wiki/index.php/SDE_WS25:_AP_2.4_Messung_der_Ist-Position_mittels_Topcon_Robotic_Total_Station
%**************************************************************************
%% MATLAB Initialisierung
clear all; close all; clc;
KalmanFilter(); % Reset Kalman-Filter
param_AlphaBot; % Parameter des AlphaBot aus der Parameterdatei laden
% Daten aus dem Datenordner laden
stAktuellerOrdner = cd;
stDatenOrdner = [stAktuellerOrdner(1:findstr(stAktuellerOrdner,'AlphaBot')+8),'Daten'];
addpath(stDatenOrdner)
%% Karte laden
load('Rundkurs.mat');
%% Grafik vorbereiten
figure
hold on
% Rundkurs
h1 = plot(LinkeFahrspur_W(1,:),LinkeFahrspur_W(2,:),'k-');
h2 = plot(RechteFahrspur_W(1,:),RechteFahrspur_W(2,:),'k-');
h3 = plot(MittelLinie_W(1,:),MittelLinie_W(2,:),'k--');
axis equal
xlabel('x_W in m')
ylabel('y_W in m')
% Roboter Pose zeichnen
MeinRoboter.x = 2;
MeinRoboter.y = 0.2;
MeinRoboter.Kurs = 0.0;
hRoboter    = plot(MeinRoboter.x,MeinRoboter.y,'bo','MarkerSize',10); % Wahrer Wert des Roboters
hRoboterKurs = line([MeinRoboter.x, MeinRoboter.x+0.1*cosd(MeinRoboter.Kurs)],[MeinRoboter.y, MeinRoboter.y+0.1*sind(MeinRoboter.Kurs)],'Color','b'); % Roboter
%% Bluetooth Kommunikation herstellen
bInitBluetooth = false;
if ~exist('hTopCon') % Besteht die Verbindung bereits?
    versionInfo = ver('MATLAB'); % Detailed version info
    bluetoothSupported = (str2num(versionInfo.Version)>20.1); % ab R2020b
    if bluetoothSupported
        disp('Bluetooth Verbindung wird aufgebaut....')
        hTopCon = bluetooth("PS1031404", 1); % Channel 1 is typical
        bInitBluetooth = true;
        disp('BT Verbindung erfolgreich hergestellt.')
    else
        error(['Bluetooth wird von dieser MATLAB Version ',versionInfo.Release,' nicht unterstützt.'])
    end
end
%% Referenzpunkte vermessen oder laden
[AT BT] = leseReferenzpunkte(hTopCon); % T-KOS in m
disp('Messung gestartet...')
nIndex = 0;
nNoData = 0;
bMessung = true;
%% Zyklusschleife
t1 = 0; % Zeitmessung initialisieren
tic;
try
    i=0;
    while (bMessung == true)
        % Messung
        PT = empfangePrismaPosition(hTopCon);  % Messpunkt in Topcon-Koordinaten [xT;yT;zT]
        PW = KosTrafoTzuWelt(PT, AT, BT);      % Transformation in das Welt-KOS  [xW;yW;zW]
        % Messwertglättung AP 2.5 - Funktionsaufruf Kalman-Filter
        t2 = toc;
        dt = t2-t1; % Zeitmessung für KF
        i=i+1;
        z=PW(1:2); % 2D Position übergeben [xW;yW]
        xEst(:,i)=KalmanFilter(z,dt); % [x;y;vx;vy]
        % Kursschätzung AP 2.6
       
        %Kurs = Kursschaetzung(xEst(:,i));
   
      Kurs=atan2d(xEst(4,i),xEst(2,i));
      % Kurs = rad2deg(unwrap(deg2rad(Kurs)));
        % Daten sichern
        Pose(:,i) = [xEst(1,i);xEst(2,i);Kurs]; 
        Zeitstempel(i) = t2; % Zeitstempel in s
        Messung(:,i)  = PW; % Messung in Weltkoordinaten
        % Karte aktualisieren
        zeichenRoboter(hRoboter,hRoboterKurs,Pose,i);
        % dt
        t1 = t2;
        if mod(i,10)==0
            fprintf("%f: [%f ; %f]\n",Zeitstempel(i),xEst(1,i),xEst(2,i));
        end
    end
catch ME
    stDatum = datestr(now,'yyyymmdd_HHMMSS');
    stDateiname = sprintf('Messung_%s.mat', stDatum); % Beispiel: 'Messung_20251216_143205.mat'
    stDateiname = [stDatenOrdner,'\',stDateiname];    % Datenordner
    save(stDateiname, 'Zeitstempel','Messung','Pose','xEst'); % Datei mit Datum und Uhrzeit
    disp(['Messung gestoppt, speichere ',stDateiname]);
end
%% Zeichne Pose in Karte AP 2.7
function zeichenRoboter(hRoboter,hRoboterKurs,Pose,i)
% Aktualisiere die Roboterposition in der Grafik
fKursLinienLaenge = 0.2;
        set(hRoboter, 'XData', Pose(1,i), 'YData', Pose(2,i));
        set(hRoboterKurs, 'XData', [Pose(1,i), Pose(1,i) + fKursLinienLaenge *cosd(Pose(3,i))], ...
                          'YData', [Pose(2,i), Pose(2,i) + fKursLinienLaenge *sind(Pose(3,i))]);
        plot(Pose(1,:),Pose(2,:),'r.-')
        drawnow; % Aktualisiere die Grafik
end
</syntaxhighlight>
|-
|}


=Test und Dokumentation (Check)=
=Test und Dokumentation (Check)=

Version vom 11. Januar 2026, 16:30 Uhr

Abb. 1: Ergebnis der Spurerkennung des AlphaBots
Abb. 2: Ergebnisdarstellung der AlphaBot Fahrt
Autoren: Jan Steffens & Lukas Berkemeier
Dozent: Prof. Dr.-Ing. Schneider
Modul Mechatronik, Systementwicklung (Wahlpflichtprofil „Systems Design Engineering“), Sommersemester
Modulbezeichnung: MTR-B-2-6.11
Modulverantwortung: Ulrich Schneider
Lehrveranstaltung: Praktikum Systementwurf
Sprint 1: Autonome Fahrbahnvermessung
Zeit: Dienstag, 08:15 - 10:30 Uhr, Selbstlernzeit: TBD
Ort: Labor L3.3-E01-180 (Autonome Systeme)

Einleitung

Zu Sprint 2 wurde die Fahrbahn vollständig vermessen und als digitale Karte gespeichert (vgl. Abb. 1, 2). Die Position des Prismas kann während der Fahrt gemessen und in die Referenzkarte eingezeichnet werden. Aufgabe dieses Sprints einen Autonomen Mobilen Roboter (AMR) via Kamera und Spurerkennung in der rechten Fahrspur gereglt zu fahren, diese Fahrt zu vermessen und in die Karte zu übertragen.

Tabelle 1: Anforderung an die Spurverfolgung mit Kamera
Req. Beschreibung Priorität
1 Ein AMR muss autonom in der rechten Fahrspur fahren. 1
2 Als Referenzmessystem kommt die Topcon Robotic Total Station zum Einsatz. 1
3 Der AMR muss die Fahrbahndaten via Kamera (Pixy2.1) auswerten, um der Fahrspur zu folgen. 1
4 Die Referenzwerte müssen mit MATLAB® aufgezeichnet werden (x, y, Ψ). 1
5 Messfehler müssen geeignet gefiltert werden. 1
6 Die zweidimensionale digitalen Karte mit der Roboterpose während der Fahrt muss als MATLAB®-Datei (.mat) bereitgestellt werden. 1
7 Das Vorgehen muss am KANBAN-Board geplant und verfolgt werden. 1
8 Lösungsweg und Lösung muss in diesem Wiki-Artikel dokumentiert werden. 1
9 Als AMR muss ein AlphaBot eingesetzt werden. 1
10 Als Software für die Regelung muss MATLAB®/Simulink eingesetzt werden. 1
Tabelle 2: Arbeitspakete für Sprint 2
AP Beschreibung Req. Zuständigkeit
2.1 Spurerkennung mit der Pixy2.1 und aktualisierung der Prismahalterung 3, 9 Berkemeier
2.2 Berechnung der Ist-Ablage zur Solllinie 1 Berkemeier
2.3 Geregelte Fahrt in der rechten Fahrspur anhand der Ist-Ablage. 1 Berkemeier
2.4 Messung der Ist-Position mittels Topcon Robotic Total Station 2, 4 Steffens
2.5 Glättung der Messwerte mittels Kalman-Filter (x, y, vx, vy) 5 Steffens
2.6 Schätzung der Roboterpose Ψ 1 Steffens
2.7 Einzeichnen der Messwerte in die digitale Karte und Speicherung der Karte als Rundkurs.mat 6 Steffens
2.8 Überarbeitung/Verbesserung des Artikels Referenzmessung_mit_der_Topcon_Robotic_Total_Station 8 Berkemeier

Planung (Plan)

KANBAN Foto

Ziel-Zustand

Der AlphaBot soll autonom in der rechten Fahrbahn fahren, indem die Außenlinie durch die Linienerkennung der Pixy 2.1 erkannt und darauf geregelt wird. Parallel dazu soll die Position des AlphaBot mit der Topcon-Station gemessen, gefiltert, gespeichert und in den Rundkurs eingezeichnet werden.

Umsetzung (Do)

Abb. 3: Simulink Gesamtmodell

Test und Dokumentation (Check)

Die Ergebnisdokumentation zu den einzelnen Arbeitspaketen ist im Namen dieser, in Tabelle 2, verlinkt.
Einzeln angefertigten Modultests sind zusätzlich in Tabelle 3 verlinkt.

Modultests

Nutzen Sie die in Reliability Engineering gelehrten Methoden zum Modultest.

Tabelle 3: Übersicht der Modultests
# Modul Testverfahren Verantwortung Testbericht
1 starteAlphaBotMapping.m MATLAB®-Modultest Jan Steffens Testbericht
2 leseReferenzpunkte.m MATLAB®-Modultest Jan Steffens
3 KosTrafoTzuWelt.m MATLAB®-Modultest Jan Steffens Testbericht
4 empfangePrismaPosition.m MATLAB®-Modultest Jan Steffens Testbericht
5 KalmanFilter.m] MATLAB®-Modultest Jan Steffens Testbericht
6 SpurRegelungAlphaBot.slx → Subsystem Wertevergleich Simulink Test Lukas Berkemeier Testbericht
7 SpurRegelungAlphaBot.slx → Subsystem PID-Regler] Simulink Test Lukas Berkemeier

Späteste Abgabetermin: 06.02.2026

Systemtest gegen die Anforderungen

Tabelle 4: Systemtest gegen die Anforderungen
Req. Beschreibung Testergebnis Erfüllt
1 Ein AMR muss autonom in der rechten Fahrspur fahren. Abbildung 1
2 Als Referenzmessystem kommt die Topcon Robotic Total Station zum Einsatz. Einleitung
3 Der AMR muss die Fahrbahndaten via Kamera (Pixy2.1) auswerten, um der Fahrspur zu folgen. Umsetzung
4 Die Referenzwerte müssen mit MATLAB® aufgezeichnet werden (x, y, Ψ). Einleitung
5 Messfehler müssen geeignet gefiltert werden. Einleitung
6 Die zweidimensionale digitalen Karte mit der Roboterpose während der Fahrt muss als MATLAB®-Datei (.mat) bereitgestellt werden. Messung
7 Das Vorgehen muss am KANBAN-Board geplant und verfolgt werden. Planung (Plan)
8 Lösungsweg und Lösung muss in diesem Wiki-Artikel dokumentiert werden. Artikel
9 Als AMR muss ein AlphaBot eingesetzt werden.
10 Als Software für die Regelung muss MATLAB®/Simulink eingesetzt werden.

Fehlerbehebung (Act)

Zusammenfassung

Ausblick

  • Die Kugel des AlphaBot verklebt durch die Fahrbahn. Hier wäre eine Stützradlösung wünschenswert.
  • Die Kamera sollte möglichst stabil eingebaut werden, sodass sich die Richtung der Kamera und der Neigungswinkel nicht unbeabsichtigt verstellen lassen.

Anhang

Wichtige Links:


→ zurück zum Hauptartikel: SDE Praktikum Systementwurf SoSe2025
→ zurück zum Artikel: SDE-Team 2025/26