Cover
Mulai sekarang gratis 2c_DT 2 - 2D_3D geometrie URDF.pdf
Summary
# 2D en 3D geometrie en transformaties
Dit onderwerp behandelt de fundamentele concepten van 2D en 3D geometrie, waaronder punten, lijnen en vlakken, en verkent verschillende transformaties zoals rotatie, translatie en scaling, met behulp van methoden zoals rotatiematrices, Euler-hoeken en quaternions [2](#page=2).
### 1.1 Fundamentele geometrische concepten
#### 1.1.1 Punten
Punten in 2D en 3D worden beschouwd als kolomvectoren. Een 3D-punt kan worden weergegeven als [3](#page=3):
$$
V = \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix}
$$
Deze punten zijn de basisbouwstenen voor lijnen, vlakken en vormen [3](#page=3).
#### 1.1.2 Lijn (Line)
Een lijn in 2D of 3D is gedefinieerd door twee punten, $p_1$ en $p_2$, of als een vector $v = p_2 - p_1$. De richtingsvector geeft de oriëntatie van de lijn aan [4](#page=4).
#### 1.1.3 Vlak (Plane)
Een vlak is een plat, tweedimensionaal oppervlak in de driedimensionale ruimte [5](#page=5).
### 1.2 Transformaties
Transformaties zijn functies die punten of vectoren afbeelden op andere punten of vectoren [6](#page=6).
#### 1.2.1 Transformatie van geometrische objecten
* **Lijnen:** Kunnen worden getransformeerd door hun eindpunten te transformeren [6](#page=6).
* **Vlakken (beschreven door 3 punten):** Kunnen worden getransformeerd door de drie punten te transformeren [6](#page=6).
* **Vlakken (beschreven door een punt en normaal):** Het punt wordt getransformeerd zoals gebruikelijk, maar de normaalvector vereist speciale behandeling [6](#page=6).
#### 1.2.2 Lineaire transformaties in 2D
Lineaire transformaties behouden de oorspronkelijke data; de uitkomst is gelijk aan de input in termen van dimensionaliteit. Een eenheidsmatrix wordt gebruikt voor transformatiematrices [7](#page=7).
##### 1.2.2.1 Scaling
Scaling is een transformatie die de grootte van een object verandert [8](#page=8).
##### 1.2.2.2 Shearing
Shearing (afschuiving) is een transformatie die een object vervormt door het in één richting te "duwen". De off-diagonale elementen van de transformatiematrix regelen de mate van afschuiving [9](#page=9).
#### 1.2.3 Transformaties in 2D en 3D
Transformaties kunnen een combinatie zijn van een rotatiegedeelte, vaak gerepresenteerd door een rotatiematrix, en een translatiegedeelte [11](#page=11) [13](#page=13).
##### 1.2.3.1 Translatie
Translatie verplaatst een object zonder de oriëntatie of grootte te veranderen [12](#page=12).
##### 1.2.3.2 Rotatie
Rotatie verandert de oriëntatie van een object rond een bepaald punt of as [13](#page=13).
##### 1.2.3.3 Combinatie van transformaties
Een transformatie kan ook een combinatie zijn van translatie en rotatie [14](#page=14).
#### 1.2.4 3D Affiene Transformatie
Een 3D affiene transformatie wordt gedefinieerd als:
$$
x' = a_{xx} x + a_{xy} y + a_{xz} z + b_x \\
y' = a_{yx} x + a_{yy} y + a_{yz} z + b_y \\
z' = a_{zx} x + a_{zy} y + a_{zz} z + b_z
$$
De vierde rij voor een affiene transformatie is altijd $[0 \ 0 \ 0 \ 1]$ [15](#page=15).
Eigenschappen van affiene transformaties zijn onder andere:
* Ze omvatten vertalen, schalen, afschuiven en rotatie (of combinaties daarvan) [15](#page=15).
* Lijnen en vlakken blijven behouden [15](#page=15).
* Parallelisme van lijnen en vlakken blijft behouden, maar hoeken en lengtes niet [15](#page=15).
#### 1.2.5 Rotatiematrices in 3D
Rotatiematrices worden gebruikt om rotaties rond de assen te beschrijven. Er zijn specifieke matrices voor rotatie rond de z-as, x-as en y-as. Rotaties rond alle assen gecombineerd kunnen ook worden weergegeven met een gecombineerde rotatiematrix [16](#page=16) [17](#page=17).
> **Tip:** Het is essentieel om de formules voor rotatiematrices rond elke as te memoriseren, aangezien deze vaak voorkomen in examens.
> **Tip:** Begrijp de eigenschappen van affiene transformaties goed; dit helpt bij het analyseren van de effecten van verschillende transformaties op geometrische objecten.
#### 1.2.6 Methoden voor rotatie en oriëntatie
Naast rotatiematrices worden ook de volgende methoden gebruikt voor rotatie en het beschrijven van oriëntaties:
* As-hoek representatie (Axis-Angle) [2](#page=2).
* Quaternions [2](#page=2).
* Euler-hoeken [2](#page=2).
---
# Euler-hoeken en Quaternions als representaties
Dit deel behandelt de representatie van rotaties in 3D, waarbij de beperkingen van Euler-hoeken en de voordelen van quaternions worden besproken [19](#page=19).
### 2.1 Euler-hoeken
Euler-hoeken bieden een intuïtieve, menselijk verstaanbare manier om rotaties in 3D te beschrijven. Ze worden vaak geassocieerd met een reeks van drie rotaties om de assen van een coördinatensysteem, typisch in de volgorde roll, pitch en yaw [19](#page=19) [20](#page=20).
#### 2.1.1 De componenten van Euler-hoeken
* **Roll:** De rotatie rond de X-as [20](#page=20).
* **Pitch:** De rotatie rond de Y-as [20](#page=20).
* **Yaw:** De rotatie rond de Z-as [20](#page=20).
De kleuren die aan deze rotaties worden toegekend, zijn vaak gestandaardiseerd [20](#page=20).
#### 2.1.2 Problemen met Euler-hoeken
Het belangrijkste nadeel van Euler-hoeken is het fenomeen **gimbal lock**. Gimbal lock treedt op wanneer twee rotatieassen samenvallen, bijvoorbeeld wanneer de pitch 90 graden bedraagt. In zo'n situatie verliest het systeem een graad van vrijheid; de yaw- en roll-rotaties worden equivalent, waardoor onafhankelijke rotatie niet meer mogelijk is. Dit is een gevolg van de topologische beperkingen inherente aan Euler-hoeken [21](#page=21) [22](#page=22).
Daarnaast is de volgorde waarin de rotaties worden toegepast cruciaal en zal een andere volgorde leiden tot een ander eindresultaat [21](#page=21).
> **Tip:** Hoewel intuïtief, is het belangrijk om de potentiële problemen van gimbal lock te kennen bij het implementeren van rotaties met Euler-hoeken.
### 2.2 Quaternions als oplossing
Quaternions bieden een elegante oplossing voor het probleem van gimbal lock dat optreedt bij Euler-hoeken [23](#page=23).
#### 2.2.1 Representatie van een rotatie
Een quaternion stelt een rotatie voor door middel van vier waarden [23](#page=23):
* Een 3D vector bestaande uit de componenten $x, y, z$ [23](#page=23).
* Een scalaire component $w$ [23](#page=23).
Een quaternion wordt formeel vaak geschreven als $q = w + xi + yj + zk$, waarbij $i, j, k$ de imaginaire eenheden zijn die voldoen aan de regels van Hamilton [niet expliciet genoemd in de document content, maar standaard kennis.
#### 2.2.2 Voordelen van Quaternions
Quaternions bieden diverse voordelen ten opzichte van andere rotatierepresentaties, zoals rotatiematrices en Euler-hoeken [23](#page=23):
* **Compactheid:** Ze vereisen slechts 4 waarden voor de representatie van een rotatie, vergeleken met de 9 waarden van een 3x3 rotatiematrix [23](#page=23).
* **Efficiënte compositie:** Het samenstellen van meerdere rotaties (het opeenvolgen van rotaties) is zeer eenvoudig door middel van quaternionvermenigvuldiging ($q_{nieuw} = q_2 \times q_1$). Dit is computationeel efficiënt [23](#page=23).
* **Vermijding van gimbal lock:** Quaternions zijn niet onderhevig aan gimbal lock, wat ze een robuustere keuze maakt voor complexe rotatietaken [23](#page=23).
#### 2.2.3 Nadelen van Quaternions
Het belangrijkste nadeel van quaternions is dat ze minder intuïtief zijn voor menselijke visualisatie in vergelijking met Euler-hoeken [23](#page=23).
#### 2.2.4 Toepassingen en Omrekening
Quaternions worden onder andere toegepast in robotica-frameworks zoals ROS. De omrekening van Euler-hoeken naar quaternions en vice versa is wiskundig goed gedefinieerd. Er bestaan ook bibliotheken in programmeertalen zoals Python die deze conversies faciliteren [24](#page=24).
> **Tip:** Hoewel minder intuïtief, is het beheersen van quaternions essentieel voor het werken met moderne 3D-systemen vanwege hun efficiëntie en robuustheid, met name in de context van robotica en computer graphics.
---
# Robot frames en transformatiebeheer met tf2 en URDF
Dit onderwerp behandelt het beheer van coördinatensystemen in robots met behulp van de ROS tf2-bibliotheek en de beschrijving van robotstructuren met URDF.
## 3 Robot frames en transformatiebeheer met tf2 en URDF
Het beheer van coördinatensystemen (frames) en hun relatieve transformaties is cruciaal in robotica. De tf2-bibliotheek in ROS is de standaard voor het bijhouden van deze frame-relaties door de tijd heen. Het Unified Robot Description Format (URDF) wordt gebruikt om de fysieke structuur van een robot, inclusief zijn onderdelen en verbindingen, te beschrijven [25](#page=25) [26](#page=26) [32](#page=32).
### 3.1 tf2: het transformatiebeheer in ROS
#### 3.1.1 Wat is tf2?
TF2 is de tweede generatie van de transformatiebibliotheek in ROS. Het stelt gebruikers in staat om meerdere coördinatenframes die in de loop van de tijd veranderen, bij te houden en te beheren. TF2 onderhoudt de relaties tussen deze coördinatenframes in een boomstructuur die tijdelijk is gebufferd. Dit maakt het mogelijk om punten, vectoren en andere data te transformeren tussen elk gewenst paar coördinatenframes op elk gewenst tijdstip [26](#page=26).
#### 3.1.2 Waarom tf2 gebruiken?
Een robotsysteem kent doorgaans vele 3D-coördinatenframes die dynamisch zijn, zoals een wereldframe, een basisframe van de robot, een grijperframe, of een hoofdframe. TF2 automatiseert het bijhouden van deze frames door de tijd heen, waardoor complexe vragen beantwoord kunnen worden, zoals [27](#page=27):
* Waar was het hoofdframe ten opzichte van het wereldframe 5 seconden geleden [27](#page=27)?
* Wat is de houding van een object in de grijper ten opzichte van de robotbasis [27](#page=27)?
* Wat is de huidige pose van het basisframe in het kaartframe [27](#page=27)?
Een belangrijk voordeel van tf2 is de mogelijkheid om te opereren in gedistribueerde systemen. Alle informatie over de coördinatenframes is dan toegankelijk voor alle ROS-componenten, ongeacht op welke computer ze draaien. Dit kan gebeuren via een centrale server die alle transformatie-informatie opslaat, of door elk onderdeel van het gedistribueerde systeem zijn eigen transformatie-informatie database te laten beheren [27](#page=27).
#### 3.1.3 Standaard referentie frames in ROS (REP 105)
ROS definieert een reeks standaard referentie frames conform REP 105 om consistentie te waarborgen. Enkele van de belangrijkste zijn [28](#page=28):
##### 3.1.3.1 `base_link` frame
Het `base_link` frame is stevig bevestigd aan de mobiele basis van de robot. De specifieke locatie van dit frame aan de basis kan variëren; voor elk hardwareplatform wordt meestal een voor de hand liggend referentiepunt gekozen [29](#page=29).
##### 3.1.3.2 `odom` frame
Het `odom` (odometrie) frame is een wereldwijd vastgelegd frame. De pose van een mobiel platform in dit frame kan in de loop van de tijd afdrijven, zonder specifieke grenzen. Deze drift maakt het `odom` frame ongeschikt voor langetermijnreferentie. Echter, de pose van de robot in het `odom` frame is gegarandeerd continu, wat betekent dat de beweging ervan soepel evolueert zonder discrete sprongen [30](#page=30).
Meestal wordt het `odom` frame berekend op basis van een odometriebron, zoals wielodometrie, visuele odometrie of een traagheidsmeeteenheid. Het frame is nuttig als een nauwkeurige lokale referentie op korte termijn [30](#page=30).
##### 3.1.3.3 `map` frame
Het `map` frame is een vast frame voor de wereld, met de Z-as naar boven gericht. De pose van een mobiel platform ten opzichte van het `map` frame mag in de loop van de tijd niet significant afwijken. Dit frame is niet continu, wat betekent dat de pose van een mobiel platform hierin op elk moment met discrete sprongen kan veranderen [31](#page=31).
Typisch wordt de pose van de robot in het `map` frame continu berekend door een lokalisatiecomponent, gebaseerd op sensorwaarnemingen (zoals lidar of camera's). Dit elimineert drift, maar veroorzaakt discrete sprongen wanneer nieuwe sensorinformatie binnenkomt [31](#page=31).
### 3.2 Unified Robot Description Format (URDF)
#### 3.2.1 Wat is URDF?
Unified Robot Description Format (URDF) is een XML-gebaseerde taal die gebruikt wordt om robots te beschrijven. Het is wijdverbreid in gebruik binnen ROS. URDF definieert de volgende componenten van een robot [32](#page=32):
* **Links**: Deze vertegenwoordigen fysieke onderdelen of rigide lichamen van de robot en corresponderen met frames in het tf2-systeem [32](#page=32).
* **Joints**: Deze specificeren de verbindingen tussen links en de bewegingsvrijheid die deze verbindingen toestaan, corresponderend met transformaties [32](#page=32).
* **Visuals**: Beschrijven hoe de robot eruitziet voor visualisatiedoeleinden [32](#page=32).
* **Collisions**: Definiëren de botsingsmodellen van de robotonderdelen [32](#page=32).
#### 3.2.2 Waarom URDF gebruiken?
Het gebruik van URDF biedt een gestandaardiseerde manier om robots te beschrijven. Dit bevordert compatibiliteit met diverse ROS-tools zoals Rviz (visualisatie), Gazebo (simulatie) en MoveIt (bewegingsplanning). URDF is essentieel voor simulatie, visualisatie en het berekenen van robotkinematica [33](#page=33).
#### 3.2.3 Structuur van een URDF
Een URDF-bestand begint met een root-element, typisch ``. Binnen dit root-element worden de onderdelen gedefinieerd [34](#page=34):
* **Link**: Beschrijft een fysiek onderdeel en bevat informatie over inertie, visuals en botsingsmodellen [34](#page=34).
* **Joint**: Koppelt twee links aan elkaar en definieert de bewegingsvrijheid tussen deze links [34](#page=34).
Optioneel kunnen ook sensoren, materialen en plugins binnen een URDF-bestand worden gespecificeerd [34](#page=34).
#### 3.2.4 URDF en tf
Er is een directe relatie tussen de URDF-beschrijving van een robot en het tf-systeem van ROS. Elke `link` gedefinieerd in de URDF wordt in ROS automatisch vertaald naar een tf-frame, bijvoorbeeld `base_link`, `arm_link`, of `camera_link`. TF zorgt ervoor dat ROS de volgende informatie heeft [36](#page=36):
* Waar elk onderdeel zich in de ruimte bevindt [36](#page=36).
* Hoe de coördinatenstelsels zich ten opzichte van elkaar bewegen [36](#page=36).
Het opstellen van URDF-bestanden kan worden gedaan met behulp van editors zoals VS Code, en de visualisatie kan worden ondersteund door tools zoals `urdf_visualizer` [35](#page=35).
#### 3.2.5 Robot state publisher en joint states
De `robot_state_publisher` is een ROS-node die de URDF-informatie gebruikt om de huidige pose van de robot te publiceren. Deze pose wordt continu bijgewerkt op basis van de gemelde `joint states`. De `joint states` representeren de huidige hoeken of posities van alle gewrichten in de robot. Samen zorgen deze componenten ervoor dat de transformaties tussen de verschillende frames van de robot (gedefinieerd in URDF) up-to-date blijven en beschikbaar zijn via tf2 [38](#page=38) [39](#page=39).
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| 2D / 3D Geometrie | De studie van geometrische objecten in twee of drie dimensies, inclusief punten, lijnen, vlakken en vormen, en hun eigenschappen. |
| Punt (Point) | Een fundamenteel geometrisch object dat een locatie in de ruimte definieert, vaak gerepresenteerd als een vector met coördinaten ($x, y$ of $x, y, z$). |
| Lijn (Line) | Een recht geometrisch object dat wordt gedefinieerd door twee punten of door een startpunt en een richtingsvector, en dat zich oneindig in beide richtingen uitstrekt. |
| Vlak (Plane) | Een plat, tweedimensionaal oppervlak dat zich oneindig uitstrekt, vaak gedefinieerd door drie punten of door een punt en een normaalvector. |
| Transformatie (Transformation) | Een wiskundige functie die een punt, vector of object omzet in een ander punt, vector of object. Dit kan rotatie, translatie, scaling of shear omvatten. |
| Rotatiematrix (Rotation Matrix) | Een vierkante matrix ($3 \times 3$ voor 3D) die wordt gebruikt om rotaties van vectoren of coördinatenstelsels in de ruimte te beschrijven. |
| Assenhoek (Axis Angle) | Een methode om een rotatie te definiëren door een rotatie-as (een vector) en een rotatiehoek rond die as. |
| Quaternion | Een wiskundig object dat een rotatie in 3D-ruimte vertegenwoordigt met behulp van vier getallen ($w, x, y, z$). Het wordt vaak gebruikt als alternatief voor rotatiematrices en Euler-hoeken, vooral om gimbal lock te voorkomen. |
| Euler-hoeken (Euler Angles) | Een reeks van drie rotaties rond de hoofdassen van een coördinatensysteem (bijvoorbeeld roll, pitch, yaw) om de oriëntatie van een object te specificeren. |
| Coördinatensysteem (Coordinate System) | Een systeem dat wordt gebruikt om punten in de ruimte te lokaliseren met behulp van getallen (coördinaten), zoals het Cartesische systeem. |
| Lineaire Transformatie (Linear Transformation) | Een transformatie die lineaire eigenschappen behoudt, zoals het behouden van de oorsprong en het transformeren van lijnen naar lijnen. |
| Translatie (Translation) | Een transformatie die een object verschuift zonder de oriëntatie of grootte te veranderen, vaak gerepresenteerd door een translatievector. |
| Scaling | Een transformatie die de grootte van een object verandert langs de assen van een coördinatensysteem. |
| Shearing (Afschuiving) | Een transformatie die een object vervormt door parallelle lijnen te verschuiven, waardoor een scheef of afgeschoven effect ontstaat. |
| Affiene Transformatie (Affine Transformation) | Een transformatie die lineaire transformaties combineert met translatie. Eigenschappen zoals parallellisme blijven behouden, maar hoeken en lengtes kunnen veranderen. |
| Gimbal Lock | Een fenomeen dat optreedt bij het gebruik van Euler-hoeken, waarbij de vrijheidsgraden van rotatie beperkt worden wanneer twee rotatieassen samenvallen. |
| ROS (Robot Operating System) | Een flexibel framework voor het schrijven van robotsoftware. Het biedt tools en bibliotheken voor het beheren van hardware-abstractie, apparaatdrivers, simulatie en berichtuitwisseling tussen processen. |
| tf2 | Een transformatiebibliotheek binnen ROS die het bijhouden van coördinatenframes in de tijd mogelijk maakt en transformaties tussen deze frames ondersteunt. |
| Coördinatenframe (Coordinate Frame) | Een referentiekader gedefinieerd door een oorsprong en een set assen, gebruikt om de positie en oriëntatie van objecten te beschrijven. |
| base_link | Een standaard ROS-coördinatenframe dat stevig is bevestigd aan de mobiele basis van een robot. |
| odom | Een ROS-coördinatenframe dat een globaal vastgelegd frame vertegenwoordigt. De pose van een mobiel platform hierin kan afdrijven, maar evolueert continu. |
| map | Een vast ROS-coördinatenframe voor de wereld, waarbij de Z-as naar boven gericht is. De pose van een mobiel platform hierin mag niet significant afwijken en kan discrete sprongen maken. |
| URDF (Unified Robot Description Format) | Een XML-gebaseerde taal die wordt gebruikt om robots te beschrijven, inclusief hun links (onderdelen), joints (verbindingen) en visuele/botsingsmodellen. |
| Link (in URDF) | Een fysiek onderdeel of rigide lichaam van een robot, dat wordt beschreven in een URDF-bestand en overeenkomt met een coördinatenframe in ROS (tf-frame). |
| Joint (in URDF) | Een verbinding tussen twee links in een robot, die de bewegingsvrijheid definieert en wordt gebruikt om transformaties tussen frames te creëren. |
| Robot_state_publisher | Een ROS-node die URDF-informatie gebruikt om de huidige pose van alle links en joints van een robot te publiceren. |
| Joint states | De huidige posities en oriëntaties van de joints van een robot, die vaak worden gebruikt om de staat van de robot te bepalen. |