SDE Systementwurf SoSe2025: Testbericht berechneEntfernungPunktGerade.m: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 71: Zeile 71:
= Programmierung =
= Programmierung =
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung&thinsp;</strong>
| <strong><code>berechneEntfernungPunktGerade.m</code>&thinsp;</strong>
|-
|-
| '''Musterlösung:''' für den Batterie-Tester <br>
| '''Musterlösung:''' für den Batterie-Tester <br>
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">function [G1, G2, dMin]= berechneEntfernungPunktGerade(PW,aSollLinie_W)
const unsigned int AUFLOESUNG_u16 = 1023; //2^10-1
const float ARDUINO_SPANNUNG_f32  = 5.0;


void setup() {
for i= 1:length(aSollLinie_W)
  Serial.begin(BAUD_RATE);
    if i<length(aSollLinie_W)
}
        G1 = aSollLinie_W(:,i);
        G2 = aSollLinie_W(:,i+1);
    else
        G1 = aSollLinie_W(:,end);
        G2 = aSollLinie_W(:,1);
    end


void loop() {
    A(:,i)=[G1;0];
   unsigned int Digitalwert_u16 = analogRead(A0); // Quantisierung der Apannung am Analogen Eingang A0
    B(:,i)=[G2;0];
  Serial.print(ARDUINO_SPANNUNG_f32 * AUFLOESUNG_u16/Digitalwert_u16); // Umrechnung Digitalwert in V
    d(i) = berechneEntfernungPunktStrecke(A(:,i), B(:,i), PW);
  Serial.println("V");
end
[m index] = min(abs(d)); % geringste Abstand finden
 
%% Rückgabewerte
dMin = d(index);  % in m
G1  = A(:,index); % in m
G2   = B(:,index); % in m
end
 
 
%% -------------------------------------------------------------
function d = berechneEntfernungPunktStrecke(A, B, P)
% -------------------------------------------------------------
% Konvertiere die Input Punkte in Vektoren
AP = P - A;
AB = B - A;
 
% Berechne die Projektion von AP auf AB (Projektionsfaktor)
projFaktor = dot(AP, AB) / norm(AB)^2;
 
% Prüfe, ob die Projektion innerhalb des Streckenabschnitts liegt
if projFaktor < 0
    % Punkt P ist näher an A
    d = norm(AP);
elseif projFaktor > 1
    % Punkt P ist näher an B
    BP = P - B;
    d = norm(BP);
else
    % Der projizierte Punkt liegt auf der Strecke AB
    % Berechne die Projektion von AP auf AB
    projAB_AP = projFaktor * AB;
   
    % Berechne den Vektor, der senkrecht von P auf AB zeigt
    perpendicular = AP - projAB_AP;
   
    % Berechne den Abstand als die Länge dieses Vektors
    d = norm(perpendicular);
end
 
q = A;    % Ortsvektor zum Punkt auf der Geraden
u = B-A;  % Richtungsvektor
 
% Vorzeichen: in Fahrtrichtung rechts der Sollinie ist positiv
v = cross((P-q),u);
if v(3)<0
    d = -d; % links negativ
end
 
end
</syntaxhighlight>
</syntaxhighlight>
|-
|-

Version vom 22. Oktober 2025, 15:15 Uhr

Abb. 1: Berechnung des Abstandes Punkt zu Strecke
Modul: code>berechneEntfernungPunktGerade.m
Revision: 10780
Autor: Prof. Dr.-Ing. Schneider
Datum: 25.09.2025
System: MATLAB®-Funktion
SVN-URL: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Daten/Rundkurs_L33_E01_210/berechneEntfernungPunktGerade.m

Einleitung

Ziel des Projektes ist eine geregelte Fahrt eines AlphaBot entlang einer definierten Fahrspur (s. SDE_Systementwicklung_WS25/26:_Geregelte_autonome_Fahrt). Die Sollspur liegt als digitale Karte vor und die Istposition wird mit der Robotic Total Station gemessen.

Das zu testende Modul berechneEntfernungPunktGerade.m berechnet die Entfernung des eingehenden Punktes zur Fahrspur.

Tabelle 1: Funktionsübersicht/Zugehörigkeit
# Datei Beschreibung
1 berechneEntfernungPunktGerade.m zu testendes Modul
2 testBerechneRegelabweichungSpur.m Testfunktion für einen Punkt PW mit Darstellung (vgl. Abb. 1)
3 testBerechneRegelabweichungSpurfcn.m Testfunktion für die gesamte Fahrspur mit Ergebnisdarstellung (vgl. Abb. 2, 3)
4 RechteFahrspur_W.mat Eingangsdatum für die rechte Fahrspur
5 LinkeFahrspur_W.mat Eingangsdatum für die linke Fahrspur
5 [hhttps://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Daten/Rundkurs_L33_E01_210/MittelLinie_W.mat MittelLinie_W.mat] Eingangsdatum für die Mittellinie

Funktionaler Systementwurf

Tabelle 1: Funktionale Anforderungen an berechneEntfernungPunktGerade.m
Req. Beschreibung Priorität
1 Die Funktion muss die mathematisch kürzeste Strecke dMin des Punktes PW zur gegebenen Sollinie in m berechnen und als Rückgabe liefern. 1
2 Alle Koordinaten müssen im Welt-Koordinatensystem (Karten-KOS) behandelt werden. 1
3 Die nächstgelegenen Punkte G1 und G2 der Solllinie sollen zusätzlich als kartesische Koordinaten (x, y, z) zurückgegeben werden. 2
4 Fahrtrichtung ist GUZ. Punkte links der Sollinie ist der Wert dMin negativ und rechts positiv. 2

Technische Systementwurf

Abb. 2: PAP zur Bestimmung des min. Abstandes

Der technische Systementwurf wird in Abb. 2 als PAP dargestellt.

Komponentenspezifikation

Die BEntfernung des Punktes P von der Strecke A zu B wird mittels Vektorrechnung ermittelt.

  1. Berechnung der Ortsvektore: AP=PA, AB=BA
  2. Berechne die Projektion von P auf AB (Projektionsfaktor a): a=APAB|AB|2
  3. Prüfe, ob die Projektion innerhalb des Streckenabschnitts liegt: 0<a<1
  4. Berechne die Projektion P' von P auf AB: P=aAB
  5. Berechne den Vektor, der senkrecht von P auf AB zeigt: n=APP
  6. Berechne den Abstand als die Länge dieses Vektors: d=|n|
  7. Vorzeichen gemäß Req. 4 anpassen.

Programmierung

Modultest

Da es sich bei dieser Entwicklung um die einer einzelnen Komponente handelt, schließt der Modultest mit dem Testbericht die Entwicklung ab (vgl. Tabelle 2).

Abb. 2: Ergebnis von Testfall 1
Abb. 3: Ergebnis von Testfall 2
ID Testfallbeschreibung Eingänge PW, Referenz Erwartetes Ergebnis Testergebnis Testperson Datum
Tabelle 2: Testbericht für den Modultest von berechneEntfernungPunktGerade.m
1 Punkte links der Sollinie sind negativ. [1.83;0.61;0], LinkeFahrspur_W.mat -0.2 m (vgl. Abb. 2) OK Prof. Schneider 19.06.2026
2 Punkte rechts der Sollinie sind positiv. [1.83;0.2;0], RechteFahrspur_W.mat 0.21 m (vgl. Abb. 3) OK Prof. Schneider 19.06.2026

→ zurück zum Hauptartikel: SDE Praktikum Systementwurf SoSe2025