Skip to content

Commit 5ac964a

Browse files
committed
Restructure course
1 parent acaeb6f commit 5ac964a

File tree

185 files changed

+33790
-13057
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

185 files changed

+33790
-13057
lines changed

00_Einfuehrung.md

Lines changed: 0 additions & 626 deletions
This file was deleted.

00_Einfuehrung/00_Einfuehrung.md

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
<!--
2+
3+
author: Sebastian Zug & Georg Jäger
4+
5+
version: 0.1.3
6+
language: de
7+
narrator: Deutsch Female
8+
9+
import: https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_SoftwareprojektRobotik/main/config.md
10+
11+
-->
12+
13+
[![LiaScript](https://raw.githubusercontent.com/LiaScript/LiaScript/master/badges/course.svg)](https://liascript.github.io/course/?https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_SoftwareprojektRobotik/master/00_Einfuehrung.md#1)
14+
15+
# Einführung
16+
17+
| Parameter | Kursinformationen |
18+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
19+
| **Veranstaltung:** | @config.lecture |
20+
| **Semester** | @config.semester |
21+
| **Hochschule:** | `Technische Universität Freiberg` |
22+
| **Inhalte:** | `Abgrenzung und einordnung` |
23+
| **Link auf GitHub:** | [https://github.com/TUBAF-IfI-LiaScript/VL_SoftwareprojektRobotik/blob/master/00_Einfuehrung.md](https://github.com/TUBAF-IfI-LiaScript/VL_SoftwareprojektRobotik/blob/master/00_Einfuehrung.md) |
24+
| **Autoren** | @author |
25+
26+
![](https://media.giphy.com/media/1flAwtHCYosL6LWnHr/giphy-downsized.gif)
27+
28+
--------------------------------------------------------------------------------
29+
30+
## Ausgangspunkt
31+
32+
33+
{{0-1}}
34+
******************************************
35+
36+
**Wie weit waren wir noch gekommen ... ein Rückblick auf die Veranstaltung Softwareentwicklung?**
37+
38+
Ausgehend von der Einführung in C# haben wir uns mit:
39+
40+
+ den Grundlagen der Objektorientierten Programmierung
41+
+ der Modellierung von konkreten Anwendungen
42+
+ der Koordination des Entwicklungsprozesses - Testen von Software, Versionsmanagement
43+
+ einer Einführung in die nebenläufige Programmierung
44+
45+
beschäftigt.
46+
47+
******************************************
48+
49+
{{1-2}}
50+
******************************************
51+
52+
**Warum sollten wir uns nun mit einer weiteren Programmiersprache beschäftigen? Welche Möglichkeiten eröffnen sich draus?**
53+
54+
| Merkmal | **C#** | **C++** | **Python** |
55+
|-----------------------------|---------------------------------------------|--------------------------------------------|-----------------------------------------------|
56+
| **Typisierung** | Statisch typisiert | Statisch typisiert | Dynamisch typisiert |
57+
| **Syntax** | Einfacher als C++, strenger als Python | Komplex und streng | Sehr einfach und lesbar |
58+
| **Kompilierung** | Kompiliert in Intermediate Language (IL), läuft auf der .NET-Plattform | Direkt in Maschinencode (plattformabhängig)| Interpretiert, keine Kompilierung notwendig |
59+
| **Leistung** | Hoch, aber etwas langsamer als C++ | Sehr hoch, direkte Hardwarezugriffe | Langsamer als C++ und C#, aber gut für Prototyping |
60+
| **Speicherverwaltung** | Automatisch (Garbage Collection) | Manuell (mit `new` und `delete`) | Automatisch (Garbage Collection) |
61+
| **Plattform** | Primär für Windows, .NET Core erlaubt Cross-Platform | Plattformabhängig, muss neu kompiliert werden | Plattformunabhängig (Python-Interpreter erforderlich) |
62+
| **Anwendungsbereiche** | Desktop-, Web- und Unternehmensanwendungen | Systemprogrammierung, Spiele, Echtzeitanwendungen | Webentwicklung, Datenanalyse, KI, Skripting |
63+
| **Leistungsoptimierung** | Möglich, aber eingeschränkter als C++ | Hohe Optimierung durch direkten Speicherzugriff | Eingeschränkte Leistung, eher für hohe Entwicklungsproduktivität geeignet |
64+
| **Bibliotheken** | Umfassende .NET-Bibliotheken | Große Auswahl, besonders für Systeme nahe an der Hardware | Sehr umfangreich, insbesondere für Datenanalyse, KI, Webentwicklung |
65+
| **Speicherzugriff** | Abstrakt, wenig direkte Speicherverwaltung | Direkter Speicherzugriff (Zeiger, Referenzen) | Keine direkte Speicherverwaltung |
66+
| **Lernkurve** | Moderat | Steil, vor allem wegen Speicherverwaltung | Einfach, oft als Einstiegssprache verwendet |
67+
| **Parallelität/Multithreading**| Unterstützt durch das .NET Framework | Komplexere Implementierung, aber möglich | Unterstützt, jedoch durch den GIL (Global Interpreter Lock) eingeschränkt |
68+
| **Garbage Collection** | Ja | Nein | Ja |
69+
| **OOP-Unterstützung** | Vollständig objektorientiert | Unterstützt OOP, aber auch prozedural | Vollständig objektorientiert, aber flexibel |
70+
| **Echtzeitanwendungen** | Weniger geeignet | Sehr gut geeignet | Selten verwendet |
71+
72+
******************************************
73+
74+
{{2-3}}
75+
******************************************
76+
77+
**Worin unterscheidet sich diese Projektarbeit von unserem Softwareentwicklungsprojekt**
78+
79+
+ Teamgröße und Koordinationsaufwand (!)
80+
+ Laufzeit des Projektes
81+
+ Komplexität der Aufgaben
82+
+ ...
83+
84+
******************************************
85+
86+
## Einordnung und Abgrenzung
87+
88+
> A robot is a machine—especially one programmable by a computer—capable of carrying out a complex series of actions automatically. (Definition of `robot`. Oxford English Dictionary)
89+
90+
![Mecanical Man](https://upload.wikimedia.org/wikipedia/commons/3/3c/L%27uomo_meccanico_1.png "Screenshot aus dem Film [Mechanical Man](https://en.wikipedia.org/wiki/The_Mechanical_Man) von 1921")
91+
92+
### Unterscheidung
93+
94+
**Welche Robotersysteme kommen in Ihren Unternehmen vor?**
95+
96+
<!-- data-type="none" -->
97+
| **Kriterium** | **Optionen** |
98+
| ---------------------------- | ------------------------------------------------------------- |
99+
| **Art der Steuerung** | <span style="color:blue">autonom</span>, teleoperiert, hybrid |
100+
| **Bewegungsfähigkeit** | stationär, <span style="color:blue">mobil</span> |
101+
| **Anwendungsbereich** | Industrie, Verkehr, Medizin ... |
102+
| **Erscheinung** | Humanoid, Nicht-humanoid |
103+
| **Energieversorgung** | Autark, Batterien, Kabelgebunden |
104+
| **Interaktionsfähigkeit** | Kooperativ, Isoliert |
105+
| **Komplexität der Umgebung** | Niedrig, Hoch |
106+
| **Sensorik und Wahrnehmung** | Einfach, <span style="color:red">Komplex</span> |
107+
| **Größe** | Mikroroboter, Makroroboter |
108+
| ... | ... |
109+
110+
111+
### Bedeutung
112+
113+
??[IFrame](https://books.google.com/ngrams/graph?content=Autonomous+Vehicle%2CAutonomous+Robot&year_start=1900&year_end=2022&corpus=en&smoothing=3 "Ngram Analyse der Begriffe Autonomous Vehicle und Autonomous Robot")
114+
115+
??[IFrame](https://books.google.com/ngrams/graph?content=artificial+intelligence%2Crobot%2CMachine+Learning%2C+deep+learning&year_start=1900&year_end=2022&corpus=en&smoothing=3 "Ngram Analyse der Begriffe Artificial Intelligence, Robot, Machine Learning und Deep Learning")
116+
117+
## Herausforderungen bei der Umsetzung
118+
119+
Welche technologischen Herausforderungen gilt es bei der Umsetzung von mobilen Robotersystemen zu meistern?
120+
121+
+ **Technologische Herausforderungen**
122+
123+
- Robuste, hinreichend präzise Positionierung
124+
- Umgebungskartierung (SLAM)
125+
- Hindernisidentifikation und - umgehung
126+
- Echtzeit-Umsetzung von Teilverhalten
127+
- Energieeffizienz
128+
- veränderliche Kommunikationsbedingungen
129+
- ...
130+
131+
+ **Wirtschaftliche Herausforderungen**
132+
133+
- Wirtschaftlichkeit
134+
- Marktreife
135+
- ...
136+
137+
+ **Soziale und rechtliche Herausforderungen**
138+
139+
- Sicherheitsanforderungen
140+
- Regulatorische Rahmenbedingungen
141+
- Ethik und Datenschutz
142+
- Arbeitsplatzverdrängung
143+
- ...
144+
145+
> Welche dieser Probleme sehen Sie als relevant bei den zwei Szenarien Lieferroboter und Aquatischer Roboter?
146+
147+
![Husky](images/Roboter_Engstelle2.png "Autonomer Roboter des Ready for Robots Projektes")
148+
![Husky](images/Schwimmroboter.png "TUBAF Schwimmroboter mit Windmessungsaufsatz")
149+
150+
## Ebenen eines Robotersystems / Teilkomponenten
151+
152+
{{0-1}}
153+
*************************************************
154+
155+
```ascii
156+
Statusmeldungen
157+
Nutzereingaben ^
158+
| |
159+
Befehle v |
160+
+-----------------------+
161+
| Handlungsplanung | "$Strategie $"
162+
+-----------------------+
163+
| ^ | | | Folge von Aktionen
164+
v | v v v
165+
+-----------------------+
166+
| Ausführung | "$Taktik$ "
167+
+-----------------------+
168+
^ | | | Geplante Trajektorie,
169+
Status | v v v Verhalten
170+
+-----------------------+
171+
| Reaktive Überwachung | "$Ausführung$ "
172+
+-----------------------+
173+
Sensordaten- ^ ^ ^ | | | Steuerbefehle an den
174+
erfassung | | | v v v Aktuator
175+
+----------+ +----------+
176+
| Sensoren | | Aktoren |
177+
+----------+ +----------+
178+
^ |
179+
| v
180+
.-----------------------.
181+
| Umgebung |
182+
.-----------------------. .
183+
```
184+
185+
![RoboterSystem](images/RoboterNuernberg.jpg "Roboter des RoboCupTeams aus Nürnberg - TDP des Teams AutonOhm, 2019")
186+
187+
*************************************************
188+
189+
{{1-2}}
190+
*************************************************
191+
192+
```ascii
193+
Statusmeldungen
194+
Nutzereingaben ^
195+
| | Kommunikation, Nutzerschnittstellen
196+
Befehle v |
197+
+-----------------------+
198+
| Handlungsplanung | "$Strategie $" Verhaltensmodell
199+
+-----------------------+
200+
| ^ | | | Folge von Aktionen
201+
v | v v v
202+
+-----------------------+
203+
| Ausführung | "$Taktik$ " Weltmodell, Handungsmuster Kontexterkennung
204+
+-----------------------+
205+
^ | | | Geplante Trajektorie,
206+
Status | v v v Verhalten
207+
+-----------------------+
208+
| Reaktive Überwachung | "$Ausführung$ " Regelung, Energiemanagement
209+
+-----------------------+ Notaus-Erkennung
210+
Sensordaten- ^ ^ ^ | | | Steuerbefehle an den
211+
erfassung | | | v v v Aktuator
212+
+----------+ +----------+
213+
| Sensoren | | Aktoren | Hardwaretreiber
214+
+----------+ +----------+
215+
| |
216+
v v
217+
.-----------------------.
218+
| Umgebung |
219+
.-----------------------. .
220+
```
221+
222+
![RoboterSystem](images/RoboterNuernberg.jpg "Roboter des RoboCupTeams aus Nürnberg - TDP des Teams AutonOhm, 2019")
223+
224+
> Wer soll das denn alles implementieren?
225+
226+
*************************************************
227+
228+
229+
{{2-3}}
230+
********************************************************************************
231+
232+
![RoboterSystem](images/willow_p1_02s.640w.jpg)<!-- width="80%" -->
233+
Comic auf der Webseite der Firma Willow Garage, das die individuellen Frameworks
234+
für die Robotikentwicklung adressiert. [^2]
235+
236+
[^2]: Willow Garage, http://www.willowgarage.com/blog/2010/04/27/reinventing-wheel, 2010
237+
238+
********************************************************************************

00_Einfuehrung/code/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
build/*
2+
install/*
3+
log/*

examples/07_ROS_Pakete/src/my_py_subscriber/my_py_subscriber/__init__.py renamed to 00_Einfuehrung/code/src/face_detector/.gitignore

File renamed without changes.

examples/07_ROS_Pakete/src/my_py_subscriber/resource/my_py_subscriber renamed to 00_Einfuehrung/code/src/face_detector/face_detector/__init__.py

File renamed without changes.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# Dieser Code stammt von ""
2+
# ROS2 Learning Series - Blog 7 - Advanced Programming - Part 2
3+
# https://community.element14.com/technologies/robotics/b/blog/posts/ros2_2d00_learning_2d00_series_2d00_blog7
4+
5+
import rclpy
6+
from rclpy.node import Node
7+
from sensor_msgs.msg import Image
8+
from cv_bridge import CvBridge
9+
import cv2
10+
import os
11+
12+
class FaceDetectorPub(Node):
13+
"""
14+
Create a FaceDetectorPub class, which is a subclass of the Node class.
15+
"""
16+
def __init__(self):
17+
"""
18+
Class constructor to set up the node.
19+
"""
20+
# Initiate the Node class's constructor and give it a name.
21+
super().__init__('face_detector_pub')
22+
23+
# Create the publisher. This publisher will publish an Image
24+
# to the video_frame_data topic. The queue size is 10 messages.
25+
self.publisher_ = self.create_publisher(Image, 'video_frame_data', 10)
26+
27+
# We will publish a message every 0.1 seconds.
28+
timer_period = 0.1 # seconds
29+
30+
# Create the timer.
31+
self.timer = self.create_timer(timer_period, self.timer_callback)
32+
33+
# Create a VideoCapture object.
34+
# The argument '0' gets the default webcam.
35+
self.cap = cv2.VideoCapture(0)
36+
37+
# Used to convert between ROS and OpenCV images.
38+
self.br = CvBridge()
39+
40+
# Load the haar cascade classifier.
41+
self.haar_path = '/home/sebastian/Desktop/Vorlesungen/Nordakademie/VL_Robotik/00_Intro/code/src/face_detector/resource/haarcascade_frontalface_default.xml'
42+
self.face_cascade = cv2.CascadeClassifier(self.haar_path)
43+
44+
def timer_callback(self):
45+
"""
46+
Callback function.
47+
This function gets called every 0.1 seconds.
48+
"""
49+
# Capture frame-by-frame.
50+
# This method returns True/False as well
51+
# as the video frame.
52+
ret, frame = self.cap.read()
53+
54+
# Convert to gray scale image.
55+
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
56+
57+
## Detect faces & returns positions of faces as Rect(x,y,w,h).
58+
face_rects = self.face_cascade.detectMultiScale(frame_gray, 1.3, 5)
59+
60+
# Draw rectangles representing the detected faces.
61+
for (x, y, w, h) in face_rects:
62+
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
63+
64+
if ret == True:
65+
# Publish the image.
66+
# The 'cv2_to_imgmsg' method converts an OpenCV
67+
# image to a ROS 2 image message.
68+
self.publisher_.publish(self.br.cv2_to_imgmsg(frame, encoding='rgb8'))
69+
70+
def release_camera(self):
71+
"""
72+
Release the camera when done.
73+
"""
74+
self.cap.release()
75+
76+
def main(args=None):
77+
"""
78+
Main function to initialize the node and start the face detector publisher.
79+
"""
80+
# Initialize the rclpy library.
81+
rclpy.init(args=args)
82+
83+
# Create the node.
84+
face_detector_publisher_node = FaceDetectorPub()
85+
86+
# Spin the node so the callback function is called.
87+
try:
88+
rclpy.spin(face_detector_publisher_node)
89+
finally:
90+
# Release the camera.
91+
face_detector_publisher_node.release_camera()
92+
93+
# Destroy the node explicitly.
94+
face_detector_publisher_node.destroy_node()
95+
96+
# Shutdown the ROS client library for Python.
97+
rclpy.shutdown()
98+
99+
if __name__ == '__main__':
100+
main()

0 commit comments

Comments
 (0)