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:

cd ~/workspaces/src
git clone https://github.com/brukg/SO-100-arm.git22.5.2 Compilatieprojecten
# Install dependencies
cd ..
rosdep install --from-paths src --ignore-src -r -y
# Build the package
colcon build --packages-select so_100_arm22.5.3 Mechanische arm bekijken in Gazebo
# Refresh environment variables
source install/setup.bash
ros2 launch so_100_arm rviz.launch.py22.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
sudo apt install ros-${ROS_DISTRO}-ros-gzStart gazebo met het volgende commando
# ros2 launch ros_gz_sim gz_sim.launch.pyHet 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
cd /opt/seeed/development_guide/12_llm_offline/seeed_ws
colcon build
source install/setup.bash24.2 Camera starten
Start de camera.
ros2 run camera camera_usbKnooppunten en topics bekijken
24.3 Beeld vooraf bekijken
Bekijk het beeld van de camera met rqt: rqt → Plugins → Visualization → Image View
rqt24.4 Belangrijkste codes
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
- 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
| Doel | Annotaties | Precisie-eisen |
|---|---|---|
| Visueel bereik | Pixelafstand omzetten in werkelijke afstand | Hoge precisie |
| 3D-reconstructie | Nauwkeurige 3D-informatie hersteld, Structure from Motion | Hoge precisie |
| Camera-instorting | Multi-cam-beeldfusie, panoramische camera | Middelhoge precisie |
| Robotnavigator | Nauwkeurige omgevingsperceptie, visuele kilometerstand. | Hoge precisie |
| Objectdetectie | Corrigeer de rand van het object en verhoog de detectienauwkeurigheid | Middelmatige precisie |
| AR/VR | Virtuele inhoud lijnt zich nauwkeurig uit met de echte wereld. | Hoge precisie |
25.1.3 Type cameravervorming
Plain Text Vervormingstypen:
- Radiale verstrooiing (Radial Distortion)
Vatvervorming (Barrel Distortion)
Kussenvervorming (Pincushion Distortion)
- 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
sudo apt install ros-humble-camera-calibration25.3 Schaakbordraster downloaden
Download schaakbordraster van het volgende adres
Schaakbordraster en print het uit.
25.4 Cameramarkering uitvoeren

# 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/colorOpmerking: --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:
- 26 AR-vision - AR-vision en ARUco-markers leren