ROS2-simulatie en vision

22 URDF-model

22 URDF-model (URDF Modeling)

22.1 URDF-overzicht

URDF in ROS 2 is een robotmodelbeschrijvingsdocument dat met XML wordt voorbereid om robotschakels (link), gewrichten (joint), geometrische vormen, massatraagheid, coördinaten en informatie zoals botsings- en visualisatiemodellen te definiëren. Het is de basis voor robot-TF-coördinaten in ROS 2, Gazebo/Ignition-simulatie, RViz-visualisatie, bewegingsplanning, enz. Kortom, URDF is het standaard modelbestand dat ROS 2 gebruikt om "het systeem te laten zien hoe robots eruitzien, hoe de componenten verbinden".

22.1.1 Wat is een URDF

URDF (Unified Robot Description Format) is een robotbeschrijvingsbestand in XML-indeling dat de geometrie, gewrichten, traagheid, enz. van robots definieert.

Plain Text URDF-bestandsstructuur:

robot.urdf

Wortelelementen

link, schakeldefinitie

Visual, visualisatie

Collision, botsing

Inertial, traagheid

  • # gewrichtsdefinitie Bovenliggende schakel Onderliggende schakel

Transformatie

22.2 Samenstelling van robots

Bij het modelleren van robots moeten we eerst vertrouwd raken met hun algemene samenstelling en belangrijkste parameters. Over het algemeen bestaan robots voornamelijk uit vier componenten: hardwarestructuur, aandrijfsysteem, sensorsysteem en controlesysteem. De typen robots die op de markt gangbaar zijn, of het nu mobiele robots of robotarmen zijn, kunnen volgens deze vier samenstellende modules worden ontmanteld en geanalyseerd, waardoor de basis wordt gelegd voor latere modellering.

De hardwarestructuur is een stevig zichtbaar apparaat zoals een chassis, behuizing, elektrische pers, enz.;

Het aandrijfsysteem is een apparaat dat de apparatuur normaal kan aandrijven, zoals een elektrische aandrijving, een energiebeheersysteem, enz.;

Sensorsystemen, waaronder encoders op elektronica, ingebouwde IMU's, geïnstalleerde camera's, radars, enz., stellen robots in staat om hun eigen toestand en de externe omgeving waar te nemen;

Het controlesysteem is het belangrijkste voertuig in ons ontwikkelingsproces, meestal het Raspberry Pi-, computer-, enz. rekenplatform en de besturingssystemen en applicaties daarbinnen.

Het proces van robotmodellering is op vergelijkbare wijze het proces van het beschrijven van elk deel van de robot in termen van de modelleringstaal en het combineren ervan.

22.3 URDF-syntaxis

22.3.1 Beschrijving van de link

De labels worden gebruikt om het uiterlijk en de fysieke eigenschappen van een deel van het karkas van een robot te beschrijven, inclusief grootte, kleur, vorm, fysieke eigenschappen waaronder massa, traagheidsmatrix, botsingsparameters, enz.

Deze schakel van een mechanische arm wordt bijvoorbeeld als volgt beschreven:

De name in het link-label is de naam van de schakel, en we kunnen deze aanpassen om in de toekomst te gebruiken wanneer de link is verbonden.

Het gedeelte binnen de link beschrijft het uiterlijk van robots, zoals:

Dit is het stl-bestand, dat eruitziet als de echte robot.

Dit vertegenwoordigt de afwijking van de coördinaten ten opzichte van de beginpositie, met een horizontale verschuiving van x, y, z en roll, pitch, yaw rotatie, allemaal 0 als er geen afwijking nodig is.

Het tweede deel, dat de botsingsparameters beschrijft, lijkt hetzelfde als het vorige, met een groter verschil.

Een deel van de focus ligt op het beschrijven van hoe robots eruitzien, wat het visuele effect is;

Voor een deel beschrijft het de toestand van robotbeweging, zoals hoe het contact van de robot met de buitenwereld als botsing telt.

In dit robotmodel wordt het blauwe deel beschreven, en in het proces van fysieke controle is dit complexe uiterlijk veeleisender bij het berekenen van botsingsdetectie, en om de berekening te vereenvoudigen, hebben we het model dat wordt gebruikt voor botsingsdetectie vereenvoudigd tot de cilindrische vorm van de groene doos, wat de vorm is die erin wordt beschreven. Hetzelfde geldt voor de afwijking van het coördinatenstelsel, die de afwijking van het stijve hart kan beschrijven.

In het geval van mobiele robots kan de link ook worden gebruikt om de carrosserie, wielen, enz. te beschrijven.

22.3.2 joint gewrichtsbeschrijving

Pas wanneer de schakels in het robotmodel uiteindelijk via de gewrichten zijn verbonden, kunnen ze relatieve beweging genereren.

Er zijn zes motortypen gewrichten in URDF.

Continuous, dat draaibeweging beschrijft, kan onbeperkt rond een as draaien, zoals een wiel in een auto, dat van dit type is.

Het verschil tussen revolute, dat ook een draaigewricht is, en het continuous-type is dat het niet onbeperkt kan draaien, maar eerder hoekbeperkingen heeft, zoals twee schakels in een mechanische arm, die tot dit type beweging behoren.

Prismatic, dat een schuifgewricht is, kan langs een bepaalde as worden gladgestreken en heeft de limiet van zijn locatie, zoals het geval is bij een algemene lijnvermogen.

Fixed, vast gewricht, is het enige gewricht dat geen beweging toestaat, hoewel het nog vaker wordt gebruikt, zoals de camera, die op robots is geïnstalleerd en waarvan de relatieve positie niet verandert, en de op dit moment gebruikte verbinding is Fixed.

Floating zijn drijvende gewrichten, en het zesde Planar zijn vlakke gewrichten, die relatief weinig in gebruik zijn.

In het URDF-model gebruikt elke link een beschrijving van de xml-inhoud, zoals de naam van het gewricht, welk type oefening.

parent-label: beschrijft de bovenliggende schakel;

child-label: beschrijving van een subschakel, die beweegt ten opzichte van de bovenliggende schakel;

origin: de relatie tussen de twee co-coördinaten, de rode vector op de afbeelding, kan worden begrepen als hoe de twee coördinaten samen moeten worden geïnstalleerd;

axis betekent de eenheidsvector van de gewrichtsas, zoals z gelijk aan 1, wat betekent dat de draaibeweging in de juiste richting rond de z-as wordt uitgevoerd;

limit vertegenwoordigt enkele van de beperkingen van de beweging, zoals minimumlocatie, maximumlocatie en maximumsnelheid.

22.4 Compleet robotmodel

Uiteindelijk vervolledigen alle link- en joint-labels de beschrijving en combinatie van elk deel van de robot, allemaal in een robot-label, en vormen ze een compleet robotmodel.

Dus wanneer u naar een bepaald URDF-model kijkt, kijkt u naar de details van elk codestuk, en zoekt u naar de link en het joint, en kijkt u waaruit de robot is gemaakt, en u kent het hele plaatje, en u kijkt naar de details.

22.5 Import van de SO-ARM mechanische arm

22.5.1 Repositories klonen:

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

22.5.2 Compilatieprojecten

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 Mechanische arm bekijken in Gazebo

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

22.6 Volgende stappen

Gazebo-simulatie - Fysieke simulatie leren

2.24 Camera-preview - Cameraconfiguratie leren

23 Gazebo-simulatie

23 Gazebo-simulatie

23.1 Gazebo-overzicht

Gazebo is een veelgebruikt robotsimulatieplatform waar virtuele omgevingen kunnen worden gebouwd om robotbeweging, sensorgegevens en fysieke interacties in de echte wereld te simuleren (bijv. zwaartekracht, botsing, wrijving, enz.). Het ondersteunt het importeren van robotmodellen (URDF/SDF) en kan een verscheidenheid aan sensoren simuleren, zoals camera's, laserradars en IMU, en wordt daarom vaak gebruikt bij de ontwikkeling, debugging en het testen van robotalgoritmen, vooral in de ROS/ROS2-ecologie. Via Gazebo kunnen ontwikkelaars functies zoals controle, navigatie en SLAM snel valideren zonder afhankelijk te zijn van echte hardware, wat de ontwikkelingskosten en risico's aanzienlijk vermindert.

23.1.1 Wat is Gazebo?

Plain Text Gazebo-simulatiestructuur:

Gazebo Server

Physics-engine (ODE/Bullet) (OGRE) plugin

ROS 2-interface

cmd_vel odom scan

23.2 Installatiehandelingen

Installeer gazebo via apt-commando

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

Start gazebo met het volgende commando

bash
# ros2 launch ros_gz_sim gz_sim.launch.py

Het model is als volgt:

23.3 Volgende stappen

1.24 Camera-preview - Cameraconfiguratie leren

2.25 Cameracalibratie - Cameracalibratie leren

24 Camera-preview

24 Camera-preview

24.1 Functioneel pakket compileren

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

24.2 Camera starten

Start de camera.

bash
ros2 run camera camera_usb

Knooppunten en topics bekijken

24.3 Beeld vooraf bekijken

Bekijk het beeld van de camera met rqt: rqt → Plugins → Visualization → Image View

bash
rqt

24.4 Belangrijkste codes

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 Volgende stappen

1.25 Cameracalibratie - Cameracalibratie leren

  1. 26 AR-vision - AR-vision leren

25 Cameracalibratie

Cameracalibratie

25.1 Samenvatting van cameracalibratie

25.1.1 Wat is cameracalibratie

Cameracalibratie is het proces van het bepalen van de interne (brandpuntsafstand, hoofdpunt, aberratiefactor) en externe (positie, houding) kernen van de camera.

Camera's zijn apparaten die lensbeeldvorming gebruiken, en geometrische aberraties worden geïntroduceerd vanwege de fysieke eigenschappen van lenzen. De calibratie is om deze afwijkingen te beschrijven en te compenseren door middel van wiskundige modellen.

Plain Text Cameraparameter details:

Intrinsics - Optische eigenschappen die inherent zijn aan camera's:

  • brandpuntsafstand
  • lens brandpuntsafstand in pixeleenheden, bepaalt de grootte van het gezichtsveld
  • hoofdpunt
  • snijpunt van de as met het beeldvlak, meestal nabij het beeldcentrum Distortion coefficients (vervormingscoëfficiënten)
  • Radiale vervorming (k1, k2, k3) - vat-/kussenvervorming (p1, p2)

Extrinsics - Camerapositie in de wereldcoördinaten: Rotation Matrix (rotatiematrix)

  • Beschrijving van de rotatie van de cameracoördinaten ten opzichte van de coördinaten van de wereld
  • Translatievector (translation vector: 3x1)
  • Beschrijving van de verschuiving van de cameracoördinaten van het oorspronkelijke punt naar de wereldcoördinaten

Camera-binnenkernen (Camera Matrix): [fx 0 cx] K = [0 fy cy] (3x3 matrix) [0 0 1]

25.1.2 Waarom calibreren

DoelAnnotatiesPrecisie-eisen
Visueel bereikPixelafstand omzetten in werkelijke afstandHoge precisie
3D-reconstructieNauwkeurige 3D-informatie hersteld, Structure from MotionHoge precisie
Camera-instortingMulti-cam-beeldfusie, panoramische cameraMiddelhoge precisie
RobotnavigatorNauwkeurige omgevingsperceptie, visuele kilometerstand.Hoge precisie
ObjectdetectieCorrigeer de rand van het object en verhoog de detectienauwkeurigheidMiddelmatige precisie
AR/VRVirtuele inhoud lijnt zich nauwkeurig uit met de echte wereld.Hoge precisie

25.1.3 Type cameravervorming

Plain Text Vervormingstypen:

  1. Radiale verstrooiing (Radial Distortion)

Vatvervorming (Barrel Distortion)

Kussenvervorming (Pincushion Distortion)

  1. Tangentiële vervormingen (Tangential Distortion) Het beeldvlak is niet volledig parallel aan het lensvlak resulterend

25.1.4 Calibratierationale

Cameracalibratie is gebaseerd op een pinhole-cameramodel, dat de cameraparameters oplost door de bekende relatie tussen de coördinaten van de wereld (een hoek op de calibratieplaat) en de coördinaten van het beeld (gedetecteerde pixelposities).

Plain Text Calibratieproces:

wereldcoördinaten (3D) → extrinsiek → cameracoördinaten (3D) → intrinsiek → projectie 2D [X,Y,Z,1] [x,y,z] K [u,v,1]

Reprojectiefout: Calibratie van kwaliteitsindicatoren, berekening van foutverschillen bij herprojectiepunten Hoe lager de waarde, hoe beter de calibratie.

25.2 Installatie van calibratie-instrumenten

Camerapakket installeren

bash
sudo apt install ros-humble-camera-calibration

25.3 Schaakbordraster downloaden

Download schaakbordraster van het volgende adres

Schaakbordraster en print het uit.

25.4 Cameramarkering uitvoeren

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

Opmerking: --size 8x6 verwijst naar het aantal binnenhoeken (8x6 = 48 hoeken, overeenkomend met 9x7 rasters) --square 0.025 betekent vierkante grootte in millimeters (25 mm) Mobiele camera legt beelden vanuit verschillende hoeken vast

Verzamelt beelden vanuit verschillende hoeken, berekent automatisch de cameraparameters en behoudt de markeergegevens in tooltips.

25.5 Volgende stappen

Na voltooiing van de cameracalibratiestudie:

  1. 26 AR-vision - AR-vision en ARUco-markers leren