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:

bash
cd ~/workspaces/src
git clone https://github.com/brukg/SO-100-arm.git

22.5.2 Kompilierungsprojekte

bash
# Install dependencies
cd ..
rosdep install --from-paths src --ignore-src -r -y
# Build the package
colcon build --packages-select so_100_arm

22.5.3 Roboterarm in Gazebo anzeigen

bash
# Refresh environment variables
source install/setup.bash
ros2 launch so_100_arm rviz.launch.py

22.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

bash
sudo apt install ros-${ROS_DISTRO}-ros-gz

Starten Sie gazebo mit dem folgenden Befehl

bash
# ros2 launch ros_gz_sim gz_sim.launch.py

Das 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

bash
cd /opt/seeed/development_guide/12_llm_offline/seeed_ws
colcon build
source install/setup.bash

24.2 Kamera starten

Starten Sie die Kamera.

bash
ros2 run camera camera_usb

Knoten und Topics anzeigen

24.3 Bildvorschau

Sehen Sie das Bild der Kamera mit rqt: rqt → Plugins → Visualization → Image View

bash
rqt

24.4 Schlüsselcodes

bash
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

  1. 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

ZweckAnmerkungenGenauigkeitsanforderungen
Visuelle ReichweitePixelabstand in tatsächlichen Abstand umrechnenHohe Genauigkeit
3D-RekonstruktionGenaue 3D-Information wiederhergestellt, Structure from MotionHohe Genauigkeit
Kamera-ZusammenarbeitMulti-Kamera-Bildfusion, PanoramakameraMittlere bis hohe Genauigkeit
RoboternavigationGenaue Umgebungswahrnehmung, visuelle Odometrie.Hohe Genauigkeit
ObjekterkennungKorrigieren Sie den Rand des Objekts und erhöhen Sie die ErkennungsgenauigkeitMittlere Genauigkeit
AR/VRVirtuelle Inhalte richten sich präzise an der realen Welt aus.Hohe Genauigkeit

25.1.3 Kameraverzerrungstyp

Plain Text Verzerrungstypen:

  1. Radiale Verzerrung (Radial Distortion)

Tonnenverzerrung (Barrel Distortion)

Kissenverzerrung (Pincushion Distortion)

  1. 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

bash
sudo apt install ros-humble-camera-calibration

25.3 Schachbrettmuster herunterladen

Schachbrettmuster von der folgenden Adresse herunterladen

Schachbrettmuster und drucken Sie es aus.

25.4 Kamerakalibrierung ausführen

bash
# 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/color

Hinweis: --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:

  1. 26 AR-Vision - Lernen der AR-Vision und ARUco-Marker