ROS2-Simulation und Vision
22 URDF-Modell
22 URDF-Modell (URDF Modeling)
22.1 URDF-Übersicht
URDF in ROS 2 ist ein Roboter-Modellbeschreibungsdokument, das in XML erstellt wurde, um Roboterglieder (link), Gelenke (joint), geometrische Formen, Massenträgheit, Koordinatensysteme sowie Informationen wie Kollisions- und Visualisierungsmodelle zu definieren. Es ist die Grundlage für Roboter-TF-Koordinaten in ROS 2, Gazebo/Ignition-Simulation, RViz-Visualisierung, Bewegungsplanung usw. Kurz gesagt, URDF ist die Standardmodelldatei, die ROS 2 verwendet, um „dem System zu zeigen, wie Roboter aussehen und wie die Komponenten verbunden sind".
22.1.1 Was ist URDF
URDF (Unified Robot Description Format) ist eine Roboterbeschreibungsdatei im XML-Format, die die Geometrie, Gelenke, Trägheit usw. von Robotern definiert.
Plain Text URDF-Dateistruktur:
robot.urdf
Wurzelelemente
link, Gliedderdefinition
Visual, Visualisierung
Collision, Kollision
Inertial, Trägheit
# Gelenkdefinition Übergeordnetes Glied Untergeordnetes Glied Transformation
22.2 Zusammensetzung von Robotern
Bei der Modellierung von Robotern müssen wir uns zunächst mit ihrer Gesamtzusammensetzung und den Schlüsselparametern vertraut machen. Im Allgemeinen bestehen Roboter hauptsächlich aus vier Komponenten: Hardwarestruktur, Antriebssystem, Sensorsystem und Steuerungssystem. Die auf dem Markt üblichen Robotertypen, ob mobile Roboter oder Roboterarme, können nach diesen vier Konstruktionsmodulen demontiert und analysiert werden, wodurch die Grundlage für die nachfolgende Modellierung geschaffen wird.

Die Hardwarestruktur ist ein solide sichtbares Gerät wie Chassis, Gehäuse, elektrischer Antrieb usw.;
Das Antriebssystem ist ein Gerät, das die Geräte zum normalen Gebrauch antreiben kann, wie z. B. ein elektrischer Antrieb, ein Energieverwaltungssystem usw.;
Sensorsysteme, einschließlich Encoder an Elektronik, integrierte IMUs, installierte Kameras, Radare usw., ermöglichen es Robotern, ihren eigenen Zustand und die externe Umgebung wahrzunehmen;
Das Steuerungssystem ist das Hauptträgermedium in unserem Entwicklungsprozess, typischerweise die Raspberry-Pi-, Computer- usw. Rechenplattformen und die Betriebssysteme und Anwendungen darin.

Der Prozess der Robotermodellierung ist auf ähnliche Weise der Prozess der Beschreibung jedes Teils des Roboters in der Sprache der Modellierung und der Kombination dieser Teile.

22.3 URDF-Syntax
22.3.1 Beschreibung des link
Die Tags werden verwendet, um das Aussehen und die physikalischen Eigenschaften eines Teils des Karkassens eines Roboters zu beschreiben, einschließlich Größe, Farbe, Form sowie physikalische Eigenschaften wie Masse, Trägheitsmatrix, Kollisionsparameter usw.
Zum Beispiel wird dieses Roboterarm-Glied wie folgt beschrieben:

Der name im link-Tag ist der Name des Glieds, und wir können ihn anpassen, damit er in Zukunft verwendet werden kann, wenn das link verbunden wird.
Der Abschnitt innerhalb des link beschreibt das Aussehen von Robotern, wie z. B.:
Dies ist die stl-Datei, die wie der echte Roboter aussieht.
Dies stellt die Abweichung der Koordinaten relativ zur ursprünglichen Position dar, mit einer horizontalen Verschiebung von x, y, z und Rotation roll, pitch, yaw, die alle 0 sind, wenn keine Abweichung erforderlich ist.


Der zweite Teil, der die Kollisionsparameter beschreibt, scheint dem ersten ähnlich zu sein, weist jedoch einen größeren Unterschied auf.

Der Schwerpunkt liegt zum Teil auf der Beschreibung des Aussehens von Robotern, also dem visuellen Effekt;

Zum Teil beschreibt es den Zustand der Roboterbewegung, z. B. wie der Roboterkontakt mit der Außenwelt als Kollision zählt.

In diesem Robotermodell wird der blaue Teil beschrieben, und im Prozess der physikalischen Steuerung ist dieses komplexe Aussehen bei der Berechnung der Kollisionserkennung anspruchsvoller, und um die Berechnung zu vereinfachen, haben wir das für die Kollisionserkennung verwendete Modell auf die zylindrische Form der grünen Box vereinfacht, die die darin beschriebene Form ist. Dasselbe gilt für die Abweichung des Koordinatensystems, die die Abweichung des starren Schwerpunkts beschreiben kann.
Im Falle mobiler Roboter kann das link auch zur Beschreibung des Fahrzeugkörpers, der Räder usw. verwendet werden.
22.3.2 joint Gelenkbeschreibung
Erst wenn die Glieder im Robotermodell schließlich durch die Gelenke verbunden sind, können sie eine Relativbewegung erzeugen.
In URDF gibt es sechs Bewegungsmotortypen von Gelenken.
continuous, das eine Drehbewegung beschreibt, kann sich unbegrenzt um eine Achse drehen, wie z. B. ein Rad in einem Auto, das von diesem Typ ist.

Der Unterschied zwischen revolute, das ebenfalls ein Drehgelenk ist, und dem continuous-Typ besteht darin, dass es sich nicht unbegrenzt drehen kann, sondern Winkelbeschränkungen hat, wie z. B. zwei Glieder in einem Roboterarm, die zu diesem Bewegungstyp gehören.
prismatic, das ein Schiebegelenk ist, kann entlang einer bestimmten Achse geglättet werden und hat die Begrenzung seiner Position, wie es bei einer allgemeinen Linienkraft der Fall ist.

Fixed, festes Gelenk, ist das einzige Gelenk, das keine Bewegung zulässt, obwohl es immer noch häufiger verwendet wird, wie z. B. die Kamera, die an Robotern installiert ist und deren relative Position sich nicht ändert, und die zu diesem Zeitpunkt verwendete Verbindung ist Fixed.
Floating sind schwimmende Gelenke, und das sechste Planar sind ebene Gelenke, die in der Verwendung relativ wenige sind.
Im URDF-Modell verwendet jedes link eine Beschreibung des xml-Inhalts, wie z. B. den Namen des Gelenks, welche Art von Übung.
parent-Tag: beschreibt das übergeordnete Glied;
child-Tag: Beschreibung eines Subglieds, das sich relativ zum übergeordneten Glied bewegt;
origin: die Beziehung zwischen den beiden Koordinatensystemen, der rote Vektor im Bild, kann als verstanden werden, wie die beiden Koordinatensysteme zusammen installiert werden sollen;
axis bezeichnet den Einheitsvektor der Gelenkachse, wie z. B. z gleich 1, was bedeutet, dass die Drehbewegung in der richtigen Richtung um die z-Achse durchgeführt wird;
limit stellt einige der Bewegungseinschränkungen dar, wie z. B. minimale Position, maximale Position und maximale Geschwindigkeit.
22.4 Vollständiges Robotermodell
Schließlich vervollständigen alle link- und joint-Tags die Beschreibung und Kombination jedes Teils des Roboters, alle in einem robot-Tag, und bilden ein vollständiges Robotermodell.
Wenn Sie sich also ein bestimmtes URDF-Modell ansehen, schauen Sie sich die Details jedes Codestücks an, suchen Sie nach link und joint, sehen Sie, woraus der Roboter besteht, und Sie kennen das gesamte Bild und sehen sich die Details an.
22.5 Import des SO-ARM-Roboterarms


22.5.1 Repositorys klonen:

cd ~/workspaces/src
git clone https://github.com/brukg/SO-100-arm.git22.5.2 Kompilierungsprojekte
# Install dependencies
cd ..
rosdep install --from-paths src --ignore-src -r -y
# Build the package
colcon build --packages-select so_100_arm22.5.3 Roboterarm in Gazebo anzeigen
# Refresh environment variables
source install/setup.bash
ros2 launch so_100_arm rviz.launch.py22.6 Nächste Schritte
Gazebo-Simulation - Lernen der physikalischen Simulation
2.24 Kameravorschau - Lernen der Kamerakonfiguration
23 Gazebo-Simulation
23 Gazebo-Simulation
23.1 Gazebo-Übersicht

Gazebo ist eine häufig verwendete Robotersimulationsplattform, auf der virtuelle Umgebungen aufgebaut werden können, um Roboterbewegungen, Sensordaten und physikalische Interaktionen in der realen Welt zu simulieren (z. B. Schwerkraft, Kollision, Reibung usw.). Es unterstützt den Import von Robotermodellen (URDF/SDF) und kann eine Vielzahl von Sensoren simulieren, wie z. B. Kameras, Laser-Radare und IMU, und wird daher häufig in der Entwicklung, beim Debugging und Testen von Roboteralgorithmen eingesetzt, insbesondere in der ROS/ROS2-Ökologie. Mit Gazebo können Entwickler Funktionen wie Steuerung, Navigation und SLAM schnell validieren, ohne sich auf reale Hardware verlassen zu müssen, was Entwicklungskosten und -risiken erheblich senkt.
23.1.1 Was ist Gazebo?
Plain Text Gazebo-Simulationsstruktur:
Gazebo Server
Physik-Engine (ODE/Bullet) (OGRE) plugin
ROS 2-Schnittstelle
cmd_vel odom scan

23.2 Installationsoperationen
Installieren Sie gazebo per apt-Befehl
sudo apt install ros-${ROS_DISTRO}-ros-gzStarten Sie gazebo mit dem folgenden Befehl
# ros2 launch ros_gz_sim gz_sim.launch.pyDas Modell ist wie folgt:
23.3 Nächste Schritte
1.24 Kameravorschau - Lernen der Kamerakonfiguration
2.25 Kamerakalibrierung - Lernen der Kamerakalibrierung
24 Kameravorschau
24 Kameravorschau
24.1 Kompilieren des Funktionspakets
cd /opt/seeed/development_guide/12_llm_offline/seeed_ws
colcon build
source install/setup.bash24.2 Kamera starten
Starten Sie die Kamera.
ros2 run camera camera_usbKnoten und Topics anzeigen
24.3 Bildvorschau
Sehen Sie das Bild der Kamera mit rqt: rqt → Plugins → Visualization → Image View
rqt24.4 Schlüsselcodes
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2
class CameraNode(Node):
def __init__(self):
super().__init__('camera_usb')
self.publisher = self.create_publisher(Image, 'image_raw', 10)
self.bridge = CvBridge()
self.cap = cv2.VideoCapture(0)
if not self.cap.isOpened():
self.get_logger().error('Unable to open camera')
return
self.timer = self.create_timer(0.05, self.timer_callback)
def timer_callback(self):
ret, frame = self.cap.read()
if ret:
image_msg = self.bridge.cv2_to_imgmsg(frame, encoding="bgr8")
self.publisher.publish(image_msg)
else:
self.get_logger().warn('Failed to capture image')
def main(args=None):
rclpy.init(args=args)
node = CameraNode()
rclpy.spin(node)
node.cap.release()
rclpy.shutdown()
if __name__ == '__main__':
main()24.5 Nächste Schritte
1.25 Kamerakalibrierung - Lernen der Kamerakalibrierung
- 26 AR-Vision - Lernen der AR-Vision
25 Kamerakalibrierung
Kamerakalibrierung
25.1 Zusammenfassung der Kamerakalibrierung
25.1.1 Was ist Kamerakalibrierung


Die Kamerakalibrierung ist der Prozess der Bestimmung der Kameraparameter intern (Brennweite, Hauptpunkt, Aberrationsfaktor) und extern (Position, Lage).
Kameras sind Geräte, die Linsenabbildung verwenden, und aufgrund der physikalischen Eigenschaften von Linsen werden geometrische Aberrationen eingeführt. Die Kalibrierung dient dazu, diese Anomalien durch mathematische Modelle zu beschreiben und zu kompensieren.
Plain Text Details zu Kameraparametern:
Intrinsics - Kamera-eigene optische Eigenschaften:
- Brennweite
- Linsenbrennweite in Pixeleinheiten, bestimmt die Größe des Sichtfelds
- Hauptpunkt
- Schnittpunkt der Achse mit der Bildebene, normalerweise nahe der Bildmitte Distortion coefficients (Verzerrungskoeffizienten)
- Radiale Verzerrung (k1, k2, k3) - tonnen-/kissenförmige Verzerrung (p1, p2)
Extrinsics - Kameraposition in den Weltkoordinaten: Rotation Matrix (Rotationsmatrix)
- Beschreibung der Rotation der Kamerakoordinaten relativ zu den Weltkoordinaten
- Translationsvektor (translation vector: 3x1)
- Beschreibung der Verschiebung der Kamerakoordinaten vom Ursprungspunkt zu den Weltkoordinaten
Innere Kameraparameter (Camera Matrix): [fx 0 cx] K = [0 fy cy] (3x3 matrix) [0 0 1]
25.1.2 Warum kalibrieren
| Zweck | Anmerkungen | Genauigkeitsanforderungen |
|---|---|---|
| Visuelle Reichweite | Pixelabstand in tatsächlichen Abstand umrechnen | Hohe Genauigkeit |
| 3D-Rekonstruktion | Genaue 3D-Information wiederhergestellt, Structure from Motion | Hohe Genauigkeit |
| Kamera-Zusammenarbeit | Multi-Kamera-Bildfusion, Panoramakamera | Mittlere bis hohe Genauigkeit |
| Roboternavigation | Genaue Umgebungswahrnehmung, visuelle Odometrie. | Hohe Genauigkeit |
| Objekterkennung | Korrigieren Sie den Rand des Objekts und erhöhen Sie die Erkennungsgenauigkeit | Mittlere Genauigkeit |
| AR/VR | Virtuelle Inhalte richten sich präzise an der realen Welt aus. | Hohe Genauigkeit |
25.1.3 Kameraverzerrungstyp
Plain Text Verzerrungstypen:
- Radiale Verzerrung (Radial Distortion)
Tonnenverzerrung (Barrel Distortion)
Kissenverzerrung (Pincushion Distortion)
- Tangentiale Verzerrung (Tangential Distortion) Bildebene ist nicht vollständig parallel zur Linsenebene
25.1.4 Kalibrierungsgrundlagen
Die Kamerakalibrierung basiert auf einem Lochkamera-Modell, das die Kameraparameter durch die bekannte Beziehung zwischen den Weltkoordinaten (einem Winkel auf der Kalibrierplatte) und den Bildkoordinaten (erkannten Pixelpositionen) löst.
Plain Text Kalibrierungsprozess:
Weltkoordinaten (3D) → extrinsisch → Kamerakoordinaten (3D) → intrinsisch → Projektion 2D [X,Y,Z,1] [x,y,z] K [u,v,1]
Reprojektionsfehler: Qualitätsindikator der Kalibrierung, Berechnung der Fehlerlücken an Reprojektionspunkten Je kleiner der Wert, desto besser die Kalibrierung.
25.2 Installation von Kalibrierungswerkzeugen
Kamerapaket installieren
sudo apt install ros-humble-camera-calibration25.3 Schachbrettmuster herunterladen
Schachbrettmuster von der folgenden Adresse herunterladen
Schachbrettmuster und drucken Sie es aus.
25.4 Kamerakalibrierung ausführen

# For 8x6 checkerboard with 25mm squares
ros2 run camera_calibration cameracalibrator --size 8x6 --square 0.025 \
--ros-args --remap image:=/camera/color/image_raw --remap camera:=/camera/colorHinweis: --size 8x6 bezieht sich auf die Anzahl der inneren Winkel (8x6 = 48 Winkel, entsprechend 9x7 Gittern) --square 0.025 bedeutet quadratische Größe in Millimetern (25 mm) Mobile Kamera erfasst Bilder aus verschiedenen Winkeln
Sammelt Bilder aus verschiedenen Winkeln, berechnet automatisch die Kameraparameter und behält die Markierungsdaten in den Tooltips bei.
25.5 Nächste Schritte
Nach Abschluss der Kamerakalibrierungsstudie:
- 26 AR-Vision - Lernen der AR-Vision und ARUco-Marker