Phase 1 abgeschlossen: Positionen werden erkannt.
Positionen aus den Merkern heraus erkennbar. Viele Bilder gleichzeitig verarbeitbar.
This commit is contained in:
348
documentation/Phase1_Phase2.tex
Normal file
348
documentation/Phase1_Phase2.tex
Normal file
@@ -0,0 +1,348 @@
|
||||
\documentclass[a4paper,11pt]{article}
|
||||
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{geometry}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{listings}
|
||||
\usepackage{xcolor}
|
||||
|
||||
|
||||
\title{Phase 2 --- Kinematic-Constrained Multi-Camera Solver}
|
||||
\author{}
|
||||
\date{}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\section{Ziel}
|
||||
|
||||
Nach Phase 1 existiert:
|
||||
|
||||
\begin{itemize}
|
||||
\item ein gemeinsames Weltkoordinatensystem
|
||||
\item Kameraposen aller Kameras
|
||||
\item bekannte absolute Markerpositionen
|
||||
\item fusionierte Beobachtungen mehrerer Kameras
|
||||
\end{itemize}
|
||||
|
||||
Phase 2 erweitert das System um:
|
||||
|
||||
\begin{itemize}
|
||||
\item Rigid-Body Constraints
|
||||
\item mechanische Zusammenhänge
|
||||
\item Gelenke
|
||||
\item relative Marker-Geometrien (\texttt{relPos})
|
||||
\item Stabilisierung bei wenigen sichtbaren Markern
|
||||
\end{itemize}
|
||||
|
||||
\section{Ausgangslage}
|
||||
|
||||
Aktuell wird jeder Marker unabhängig behandelt.
|
||||
|
||||
Das ist suboptimal, weil:
|
||||
|
||||
\begin{itemize}
|
||||
\item viele Marker nur kurz sichtbar sind
|
||||
\item oft nur 1--2 Marker eines Bauteils sichtbar sind
|
||||
\item solvePnP bei wenigen Markern instabil wird
|
||||
\item Markerrauschen direkt in die Weltkoordinaten eingeht
|
||||
\end{itemize}
|
||||
|
||||
Mechanisch sind die Marker jedoch nicht unabhängig.
|
||||
|
||||
Mehrere Marker gehören jeweils zu:
|
||||
|
||||
\begin{itemize}
|
||||
\item Arm1
|
||||
\item Arm2
|
||||
\item Joint1
|
||||
\item Base
|
||||
\item Finger1
|
||||
\item Finger2
|
||||
\end{itemize}
|
||||
|
||||
und bilden jeweils starre Körper (Rigid Bodies).
|
||||
|
||||
\section{Grundidee}
|
||||
|
||||
Statt einzelne Marker zu lösen:
|
||||
|
||||
\begin{verbatim}
|
||||
Marker -> Welt
|
||||
\end{verbatim}
|
||||
|
||||
wird gelöst:
|
||||
|
||||
\begin{verbatim}
|
||||
RigidBody -> Welt
|
||||
\end{verbatim}
|
||||
|
||||
und daraus:
|
||||
|
||||
\begin{verbatim}
|
||||
Marker = RigidBody * relTransform
|
||||
\end{verbatim}
|
||||
|
||||
\section{Vorteil}
|
||||
|
||||
Schon ein einzelner sichtbarer Marker kann:
|
||||
|
||||
\begin{itemize}
|
||||
\item einen ganzen Körper stabilisieren
|
||||
\item andere unsichtbare Marker indirekt bestimmen
|
||||
\end{itemize}
|
||||
|
||||
Beispiel:
|
||||
|
||||
Wenn Marker 198 sichtbar ist
|
||||
und Marker 229 relativ dazu bekannt ist,
|
||||
dann kann Marker 229 geschätzt werden,
|
||||
auch wenn er aktuell unsichtbar ist.
|
||||
|
||||
\section{Erwartete Verbesserungen}
|
||||
|
||||
\subsection{Stabilität}
|
||||
|
||||
Deutlich stabilere Pose-Schätzung bei:
|
||||
|
||||
\begin{itemize}
|
||||
\item Motion Blur
|
||||
\item wenigen sichtbaren Markern
|
||||
\item schlechten Blickwinkeln
|
||||
\item Teilverdeckungen
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Konsistenz}
|
||||
|
||||
Marker eines Bauteils bleiben:
|
||||
|
||||
\begin{itemize}
|
||||
\item geometrisch korrekt
|
||||
\item starr
|
||||
\item ohne unrealistische Verzerrungen
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Multi-Camera-Verkettung}
|
||||
|
||||
Kameras können indirekt gekoppelt werden.
|
||||
|
||||
Beispiel:
|
||||
|
||||
Cam1 sieht:
|
||||
\begin{itemize}
|
||||
\item Marker 1,2,3
|
||||
\end{itemize}
|
||||
|
||||
Cam2 sieht:
|
||||
\begin{itemize}
|
||||
\item Marker 3,198
|
||||
\end{itemize}
|
||||
|
||||
Cam3 sieht:
|
||||
\begin{itemize}
|
||||
\item Marker 198,229
|
||||
\end{itemize}
|
||||
|
||||
Dadurch wird:
|
||||
\begin{itemize}
|
||||
\item Arm1 relativ zur Welt bestimmbar
|
||||
\item obwohl keine einzelne Kamera alles sieht
|
||||
\end{itemize}
|
||||
|
||||
\section{Benötigte Daten}
|
||||
|
||||
\subsection{Bereits vorhanden}
|
||||
|
||||
\subsubsection{Absolute Marker}
|
||||
|
||||
\begin{verbatim}
|
||||
"position":[x,y,z]
|
||||
\end{verbatim}
|
||||
|
||||
für Board-Marker.
|
||||
|
||||
\subsubsection{Relative Markerpositionen}
|
||||
|
||||
\begin{verbatim}
|
||||
"relPos":[x,y,z]
|
||||
\end{verbatim}
|
||||
|
||||
für Marker auf einem Rigid Body.
|
||||
|
||||
\subsubsection{Body-Zuordnung}
|
||||
|
||||
\begin{verbatim}
|
||||
"on":"Arm1"
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Gelenke}
|
||||
|
||||
\begin{verbatim}
|
||||
"type":"revolute"
|
||||
"axis":[1,0,0]
|
||||
\end{verbatim}
|
||||
|
||||
\section{Noch fehlende Daten}
|
||||
|
||||
\subsection{Marker-Orientierung relativ zum Body}
|
||||
|
||||
Aktuell existiert nur:
|
||||
|
||||
\begin{verbatim}
|
||||
"relPos"
|
||||
\end{verbatim}
|
||||
|
||||
Empfohlen wird zusätzlich:
|
||||
|
||||
\begin{verbatim}
|
||||
"relRot":[rx,ry,rz]
|
||||
\end{verbatim}
|
||||
|
||||
oder alternativ:
|
||||
|
||||
\begin{verbatim}
|
||||
"normal":[x,y,z]
|
||||
"up":[x,y,z]
|
||||
\end{verbatim}
|
||||
|
||||
Denn Marker besitzen nicht nur Position,
|
||||
sondern auch Orientierung.
|
||||
|
||||
Das verbessert spätere Pose-Fits deutlich.
|
||||
|
||||
\section{Geplante Solver-Strategie}
|
||||
|
||||
\subsection{Phase 2A --- Rigid Body Fit}
|
||||
|
||||
Zunächst:
|
||||
|
||||
\begin{itemize}
|
||||
\item pro Element einen starren Körper fitten
|
||||
\item noch keine Gelenkoptimierung
|
||||
\end{itemize}
|
||||
|
||||
Beispiel:
|
||||
|
||||
\begin{verbatim}
|
||||
T_world_arm1
|
||||
\end{verbatim}
|
||||
|
||||
wird geschätzt.
|
||||
|
||||
Alle Marker von Arm1 folgen daraus automatisch.
|
||||
|
||||
\subsection{Phase 2B --- Joint Constraints}
|
||||
|
||||
Danach:
|
||||
|
||||
\begin{itemize}
|
||||
\item Gelenkachsen erzwingen
|
||||
\item Rotationen einschränken
|
||||
\item mechanische Grenzen verwenden
|
||||
\end{itemize}
|
||||
|
||||
Beispiel:
|
||||
|
||||
\begin{verbatim}
|
||||
Arm2 darf sich nur um Y drehen
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Phase 2C --- Global Optimization}
|
||||
|
||||
Später optional:
|
||||
|
||||
\begin{itemize}
|
||||
\item vollständiges Bundle Adjustment
|
||||
\item gleichzeitige Optimierung aller:
|
||||
\begin{itemize}
|
||||
\item Kameras
|
||||
\item Marker
|
||||
\item Bodies
|
||||
\item Gelenkwinkel
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\section{Wichtige Architekturentscheidung}
|
||||
|
||||
NICHT:
|
||||
|
||||
\begin{verbatim}
|
||||
Marker einzeln lösen
|
||||
\end{verbatim}
|
||||
|
||||
SONDERN:
|
||||
|
||||
\begin{verbatim}
|
||||
Bodies + Constraints lösen
|
||||
\end{verbatim}
|
||||
|
||||
Marker werden damit Beobachtungen,
|
||||
nicht mehr primäre Zustände.
|
||||
|
||||
\section{Geplante Datenstruktur}
|
||||
|
||||
\subsection{Weltpose eines Körpers}
|
||||
|
||||
\begin{verbatim}
|
||||
{
|
||||
"body":"Arm1",
|
||||
"worldPose":{
|
||||
"position":[x,y,z],
|
||||
"rotationMatrix":[...]
|
||||
}
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Relative Markerdefinition}
|
||||
|
||||
\begin{verbatim}
|
||||
{
|
||||
"id":198,
|
||||
"on":"Arm1",
|
||||
"relPos":[x,y,z],
|
||||
"relRot":[rx,ry,rz]
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
\section{Phase 1 Reminder}
|
||||
|
||||
Phase 1 bleibt weiterhin wichtig:
|
||||
|
||||
\begin{itemize}
|
||||
\item alle Kameras finden
|
||||
\item alle Detection-Dateien laden
|
||||
\item gemeinsame Marker fusionieren
|
||||
\item Weltkoordinaten berechnen
|
||||
\item Qualitätsmetriken speichern
|
||||
\item auch schlechte / unvollständige Beobachtungen abspeichern
|
||||
\end{itemize}
|
||||
|
||||
Die Ergebnisse von Phase 1 dienen als Eingang für Phase 2.
|
||||
|
||||
\section{Zielbild}
|
||||
|
||||
Langfristig entsteht:
|
||||
|
||||
\begin{itemize}
|
||||
\item ein globales Robotermodell
|
||||
\item mit mehreren Kameras
|
||||
\item mehreren Rigid Bodies
|
||||
\item Gelenken
|
||||
\item Unsicherheiten
|
||||
\item Qualitätsmetriken
|
||||
\item temporaler Stabilisierung
|
||||
\end{itemize}
|
||||
|
||||
basierend auf:
|
||||
|
||||
\begin{itemize}
|
||||
\item ArUco-Beobachtungen
|
||||
\item Mechanik
|
||||
\item Kinematik
|
||||
\item Multi-View-Geometrie
|
||||
\end{itemize}
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user