Sensordynamik¶
Das Dynamik-Modul liefert Schätzungen des Sensorzustands, der die Pose (Position und Orientierung), Lineargeschwindigkeit, Linearbeschleunigung und Drehrate des Sensors umfasst. Mit diesem Modul lassen sich Datenströme für die verschiedenen Submodule starten, stoppen und verwalten:
- Visuelle Odometrie (
rc_stereovisodo
) - schätzt die Kamerabewegung auf Grundlage der Bewegung von charakteristischen Bildpunkten im linken Kamerabild.
- Visuelle Odometrie (
- Stereo-INS (
rc_stereo_ins
) - kombiniert die per visueller Odometrie ermittelten Werte mit den Daten der integrierten inertialen Messeinheit (IMU), um auf dieser Grundlage akkurate und hochfrequente Echtzeit-Zustandsschätzungen bereitzustellen.
- Stereo-INS (
- SLAM (optional) (
rc_slam
) - übernimmt die simultane Lokalisierung und Kartenerstellung (SLAM), um akkumulierte Posendaten zu korrigieren.
- SLAM (optional) (
Koordinatensysteme für die Zustandsschätzung¶
Das Weltkoordinatensystem für die Zustandsschätzung definiert sich wie folgt: Die Z-Achse des Koordinatensystems zeigt nach oben und ist am Gravitationsvektor ausgerichtet. Die X-Achse liegt orthogonal zur Z-Achse und zeigt in die Blickrichtung des rc_visard zum Zeitpunkt, zu dem die Zustandsschätzung beginnt. Der Ursprung des Weltkoordinatensystems befindet sich am Ursprung des IMU-Koordinatensystems des rc_visard in dem Augenblick, in dem die Zustandsschätzung aktiviert wird.
Wird die Zustandsschätzung aktiviert, wenn die Blickrichtung des rc_visard parallel zum Gravitationsvektor liegt (mit einem Toleranzbereich von 10 Grad), dann ist die Y-Achse des Weltkoordinatensystems entweder an der positiven oder negativen X-Achse des IMU-Koordinatensystems ausgerichtet. In diesem Fall ist die Anfangsausrichtung des Weltkoordinatensystems nicht mehr kontinuierlich. Es ist also besondere Vorsicht geboten, wenn die Zustandsschätzung mit dieser Orientierung beginnt.
Die Transformation zwischen dem IMU-Koordinatensystem und dem Kamera/Sensor-Koordinatensystem wird ebenfalls geschätzt und über die rc_dynamics-Schnittstelle im Echtzeit-Dynamik-Datenstrom bereitgestellt (siehe Schnittstellen).
Verfügbare Zustandsschätzungen¶
Der rc_visard bietet über die rc_dynamics-Schnittstelle sieben verschiedene Arten an Datenströmen mit zeitgestempelten Zustandsschätzungen an (siehe Die rc_dynamics-Schnittstelle):
Name | Frequenz | Quelle | Beschreibung |
---|---|---|---|
pose | 25 Hz | Best Effort | genaueste Schätzung der Pose des Kamerakoordinatensystems, aber leicht zeitverzögert |
pose_ins | 25 Hz | Stereo-INS | genaueste Schätzung der Pose des Kamerakoordinatensystems, aber leicht zeitverzögert |
pose_rt | 200 Hz | Best Effort | Pose des Kamerakoordinatensystems |
pose_rt_ins | 200 Hz | Stereo-INS | Pose des Kamerakoordinatensystems |
dynamics | 200 Hz | Best Effort | Pose, Geschwindigkeit und Beschleunigung im IMU-Koordinatensystem |
dynamics_ins | 200 Hz | Stereo-INS | Pose, Geschwindigkeit und Beschleunigung im IMU-Koordinatensystem |
imu | 200 Hz | Stereo-INS | IMU-Rohdaten |
Best Effort bedeutet hier für den Fall, dass ein SLAM-Modul verfügbar ist, dass der Datenstrom per Loop-Closure korrigierte Schätzungen umfasst, bzw. dass er dem vom Stereo-INS bereitgestellten Datenstrom entspricht, wenn SLAM nicht verfügbar ist.
Kameraposen-Datenströme (pose
und pose_ins
)¶
Die Kameraposen-Datenströme heißen pose
und pose_ins
und sie werden mit einer Frequenz von 25 Hz mit Zeitstempeln bereitgestellt, die den Bildzeitstempeln entsprechen. pose
bietet eine Best-Effort-Schätzung, für die rc_slam
und rc_stereo_ins
kombiniert werden, wenn eine Lizenz für das SLAM-Modul vorliegt. Liegt keine Lizenz vor, sind beide Datenströme gleichwertig. Die Posen werden in Weltkoordinaten angegeben und beziehen sich auf den Ursprung des Kamerakoordinatensystems (siehe Koordinatensysteme für die Zustandsschätzung). Die Datenströme umfassen genaueste Schätzungen, für die alle verfügbaren Daten des rc_visard berücksichtigt werden. Sie können für Modellierungsanwendungen eingesetzt werden, bei denen Kamerabilder, Tiefenbilder oder Punktwolken mit höchster Genauigkeit aneinander ausgerichtet werden müssen. Um die größtmögliche Genauigkeit sicherzustellen, verzögert sich die Ausgabe dieser Datenströme, bis die zugehörigen Messwerte aus der visuellen Odometrie verfügbar sind.
Echtzeit-Datenströme der Kamerapose (pose_rt
und pose_rt_ins
)¶
Die Echtzeit-Datenströme der Kamerapose heißen pose_rt
und pose_rt_ins
und sie werden mit der IMU-Frequenz von 200 Hz bereitgestellt. pose_rt
bietet eine Best-Effort-Schätzung, für die rc_slam
und rc_stereo_ins
kombiniert werden, wenn eine Lizenz für das SLAM-Modul vorliegt. Liegt keine Lizenz vor, sind beide Datenströme gleichwertig. Die Posen werden in Weltkoordinaten angegeben und beziehen sich auf den Ursprung des Koordinatensystems der rc_visard-Kamera (siehe Koordinatensysteme für die Zustandsschätzung). Die in diesen Datenströmen enthaltenen Werte entsprechen den Werten in den Echtzeit-Dynamik-Datenströmen, geben aber die Pose im Sensor/Kamera-Koordinatensystem statt im IMU-Koordinatensystem an.
Echtzeit-Dynamik-Datenströme (dynamics
und dynamics_ins
)¶
Die beiden Echtzeit-Dynamik-Datenströme heißen dynamics
und dynamics_ins
und sie werden mit der IMU-Frequenz von 200 Hz bereitgestellt. dynamics
bietet eine Best-Effort-Schätzung, für die rc_slam
und rc_stereo_ins
kombiniert werden, wenn eine Lizenz für das SLAM-Modul vorliegt. Liegt keine Lizenz vor, sind beide Datenströme gleichwertig. Die Schätzungen können für die Echtzeitregelung eines Roboters verwendet werden. Da die Werte in Echtzeit bereitgestellt werden und die Berechnung der visuellen Odometrie eine gewisse Bearbeitungszeit erfordert, ist die letzte Odometrieschätzung möglicherweise nicht enthalten. Daher sind diese Schätzungen im Allgemeinen etwas weniger genau als die nicht in Echtzeit bereitgestellten Kameraposen-Datenströme (siehe oben); dennoch sind es zu diesem Zeitpunkt die bestmöglichen Schätzungen. Die bereitgestellten Dynamik-Datenströme enthalten folgende Werte zum rc_visard:
- Translation \(\mathbf{p} = (x, y, z)^T\) in \(m\);
- Rotation \(\mathbf{q} = (q_x, q_y, q_z, q_w)^T\) als Einheitsquaternion;
- Lineargeschwindigkeit \(\mathbf{v} = (v_x, v_y, v_z)^T\) in \(\frac{m}{s}\);
- Winkelgeschwindigkeit \(\mathbf{\omega} = (\omega_x, \omega_y, \omega_z)^T\) in \(\frac{rad}{s}\);
- gravitationskompensierte Linearbeschleunigung \(\mathbf{a} = (a_x, a_y, a_z)^T\) in \(\frac{m}{s^2}\) und
- Transformation zwischen Kamera- und IMU-Koordinatensystem als Pose mit Frame-Namen und Parent-Frame-Namen.
Der Datenstrom enthält für jede Datenkomponente zusätzlich den Namen des Koordinatensystems, in dem die Werte angegeben sind. Translations-, Rotations- und Lineargeschwindigkeiten werden im Weltkoordinatensystem, Winkelgeschwindigkeiten und Winkelbeschleunigungen im IMU-Koordinatensystem angegeben (siehe Koordinatensysteme für die Zustandsschätzung). Alle Werte beziehen sich auf den Ursprung des IMU-Koordinatensystems. Dies bedeutet beispielsweise, dass die Lineargeschwindigkeit der Geschwindigkeit des IMU-Koordinatenursprungs im Weltkoordinatensystem entspricht.
Schließlich enthält der Datenstrom den Statusindikator possible_jump
, der auf TRUE gesetzt ist, wann immer das optional erhältliche SLAM-Modul (siehe SLAM (optional)) die Zustandsschätzung nach einem Schleifenschluss (Loop Closure) korrigiert. Die Zustandsschätzung kann in diesem Fall einen Sprung machen, was beachtet werden sollte, wenn die Werte in einem Regelkreis verwendet werden. Ist SLAM nicht aktiv, bleibt der Statusindikator possible_jump
auf FALSE und kann ignoriert werden.
IMU-Datenstrom (imu
)¶
Der IMU-Datenstrom heißt imu
und wird mit der IMU-Frequenz von 200 Hz bereitgestellt. Er umfasst die Beschleunigungen in X-, Y- und Z-Richtung sowie die Winkelgeschwindigkeiten um diese drei Achsen. Diese Werte sind kalibriert, aber nicht bias- und gravitationskompensiert, und werden im IMU-Koordinatensystem angegeben. Die Transformation zwischen dem IMU-Koordinatensystem und dem Sensorkoordinatensystem wird im Echtzeit-Dynamik-Datenstrom bereitgestellt.
Services¶
Das Sensordynamik-Modul bietet folgende Services, um die Zustandsschätzung zu starten, stoppen und neu zu starten. Es lässt sich über die Rubrik Dynamik auf der Registerkarte Überblick der Web GUI starten und stoppen.
start
startet das Modul.
Für diesen Service sind keine Argumente nötig.
Dieser Service liefert folgenden Rückgabewert:
{ "accepted": "bool", "enteredState": "uint8" }
stop
stoppt das Modul.
Für diesen Service sind keine Argumente nötig.
Dieser Service liefert folgenden Rückgabewert:
{ "accepted": "bool", "enteredState": "uint8" }
restart
startet das Modul neu.
Für diesen Service sind keine Argumente nötig.
Dieser Service liefert folgenden Rückgabewert:
{ "accepted": "bool", "enteredState": "uint8" }
getstate
ruft den aktuellen Zustand des Moduls ab.
Für diesen Service sind keine Argumente nötig.
Dieser Service liefert folgenden Rückgabewert:
{ "accepted": "bool", "enteredState": "uint8" }