Compare commits
No commits in common. "37459bc12dcec9a6a8b1655cb01f66272df514ad" and "99008ee9fd97adb192ff1b04688236e108db19f8" have entirely different histories.
37459bc12d
...
99008ee9fd
@ -121,43 +121,43 @@ TextFolding={"checksum":"cf8b2614fde9a70da69bd9296f0dc1ae50c584e2","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:main.tex]
|
||||
CursorColumn=89
|
||||
CursorLine=117
|
||||
CursorColumn=0
|
||||
CursorLine=245
|
||||
Dynamic Word Wrap=false
|
||||
JumpList=
|
||||
TextFolding={"checksum":"5c50dc53ef39690810318af01f4ba4d3cb14fab0","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:tex/1_Einleitung.tex]
|
||||
CursorColumn=28
|
||||
CursorLine=41
|
||||
CursorColumn=114
|
||||
CursorLine=46
|
||||
Dynamic Word Wrap=false
|
||||
JumpList=
|
||||
TextFolding={"checksum":"72da509f7bb04dfaf40002d46af28410e2acb580","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:tex/2_Konzept.tex]
|
||||
CursorColumn=0
|
||||
CursorLine=36
|
||||
CursorColumn=73
|
||||
CursorLine=8
|
||||
Dynamic Word Wrap=false
|
||||
JumpList=
|
||||
TextFolding={"checksum":"21b8ecf4269d0711922f5a58a25d2691a2aebc7f","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:tex/3_Auswahl.tex]
|
||||
CursorColumn=0
|
||||
CursorLine=147
|
||||
CursorColumn=49
|
||||
CursorLine=422
|
||||
Dynamic Word Wrap=false
|
||||
JumpList=
|
||||
TextFolding={"checksum":"ee9b56159ddf3293cde4120dfc5d90bbd2f0759a","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:tex/4_Umsetzung.tex]
|
||||
CursorColumn=15
|
||||
CursorLine=520
|
||||
CursorColumn=0
|
||||
CursorLine=43
|
||||
Dynamic Word Wrap=false
|
||||
JumpList=
|
||||
TextFolding={"checksum":"3e818d80aa0680fb9664cb90786bb0abf72bfd24","ranges":[]}
|
||||
TextFolding={"checksum":"4295e3061710c9927f85d166e7535280f0a82f8e","ranges":[]}
|
||||
ViMarks=
|
||||
|
||||
[view-settings,view=0,item:tex/Einleitung.tex]
|
||||
|
||||
@ -48,7 +48,7 @@ Hierbei ist zu beachten, dass der SSH-Server im Container auf Port 2222 antworte
|
||||
|
||||
Nach der Verbindung wird automatisch die ROS2-Umgebung eingerichtet.
|
||||
Diese kann ohne weitere Befehle nach Verbindungsaufbau genutzt werden.
|
||||
Um die erstellten Pakete zu kompilieren, wurde das Skript \code{build.sh} im \code{workspace}-Verzeichnis erstellt.
|
||||
Um die erstellten Pakete zu kompillieren, wurde das Skript \code{build.sh} im \code{workspace}-Verzeichnis erstellt.
|
||||
|
||||
\begin{minted}[breaklines,frame=single]{bash}
|
||||
#!/bin/bash
|
||||
@ -71,7 +71,7 @@ Dadurch befindet sich der Fehlers immer im letzten Paket der Ausgabe, da alle an
|
||||
|
||||
\section{Entwicklungsumgebung}
|
||||
|
||||
Ein Texteditor ist für das Schreiben von ROS-Packages ausreichend und bietet bei der Arbeit mit Containern sogar einen großen Vorteil.
|
||||
Ein einfacher Texteditor ist für das Schreiben von ROS-Packages ausreichend und bietet bei der Arbeit mit Containern sogar einen großen Vorteil.
|
||||
Das Editieren von Dateien ist mit einem Texteditor auch von außerhalb des Containers möglich.
|
||||
Jedoch besitzt ein Texteditor nur wenige Funktionen einer vollständigen Entwicklungsumgebung, die den Prozess der Softwareentwicklung beschleunigen.
|
||||
Um diese Funktionen bieten zu können, analysieren Entwicklungsumgebungen den geschriebenen Code.
|
||||
@ -534,12 +534,10 @@ Der ActorServer ist die Brücke zwischen ROS und dem ActorPlugin.
|
||||
Er ist als das Programm \code{ros_actor_action_server} im gleichnamigen Paket enthalten.
|
||||
Dieser weitere Dienst bindet das ActorPlugin an ROS an.
|
||||
|
||||
Nach dem Start des ActorServers werden zwei ROS-ActionServer gestartet.
|
||||
Diese können jeweils zum Abspielen von Animationen oder zum Starten von Bewegungen des simulierten Menschen genutzt werden.
|
||||
Wenn ein Client eine dieser Aktionen startet, überträgt er die Zieldaten an den entsprechenden ActionServer.
|
||||
Beide ActionServer prüfen bei dem Empfang eines neuen Ziels als erstes, ob bereits eine andere Aktion ausgeführt wird.
|
||||
Wird bereits eine andere Aktion ausgeführt, kommt es zur Ablehnung der aktuellen Anfrage.
|
||||
Im anderen Fall wird die Anfrage akzeptiert und in das MessageQueue-Format übersetzt und an das ActorPlugin gesandt.
|
||||
Dafür werden zwei ROS-ActionServer gestartet, die jeweils Bewegungen oder Animationen des simulierten Menschen auslösen können.
|
||||
Beide ActionServer prüfen bei dem Empfang eines neuen Ziels zuerst, ob bereits eine andere Aktion ausgeführt wird.
|
||||
Wird bereits eine andere Aktion ausgeführt, kommt es zur Ablehnung weiterer Anfragen.
|
||||
Im anderen Fall wird die Aufgabe akzeptiert und in das MessageQueue-Format übersetzt und an das ActorPlugin gesandt.
|
||||
|
||||
Um das Starten mehrerer gleichzeitiger Aktionen zu unterbinden, muss der Empfang einer neuen Anfrage bestätigt werden, bevor weitere Befehle über den ROS-ActionServer entgegen genommen werden können.
|
||||
Hierzu wird ein Mutex verwendet, der die Auswertung neuer Nachrichten verhindert, so lange der aktuelle Befehl noch nicht durch das Plugin bestätigt wurde.
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
@startuml
|
||||
start
|
||||
|
||||
:Initialisiere MessageQueue;
|
||||
if (Graphviz installed?) then (yes)
|
||||
:process all\ndiagrams;
|
||||
else (no)
|
||||
:process only
|
||||
__sequence__ and __activity__ diagrams;
|
||||
endif
|
||||
|
||||
stop
|
||||
@enduml
|
||||
@ -1,39 +1,32 @@
|
||||
@startuml animation_states
|
||||
hide empty description
|
||||
skinparam Shadowing true
|
||||
|
||||
[*] --> Standing
|
||||
|
||||
state Standing{
|
||||
[*] --> [*]
|
||||
[*] --> standing_extend_arm
|
||||
standing_extend_arm --> standing_retract_arm
|
||||
standing_retract_arm --> [*]
|
||||
[*] --> StandingIdle
|
||||
StandingIdle --> [*]
|
||||
StandingIdle --> ExtendArm
|
||||
ExtendArm --> RetractArm
|
||||
RetractArm --> StandingIdle
|
||||
|
||||
[*] --> standing_walk
|
||||
standing_walk --> [*]
|
||||
StandingIdle --> Walk
|
||||
Walk --> StandingIdle
|
||||
}
|
||||
Standing -> Standing
|
||||
|
||||
state Low{
|
||||
[*] --> [*]
|
||||
[*] --> low_inspect
|
||||
low_inspect --> low_put_back
|
||||
low_inspect --> low_grab
|
||||
low_put_back --> [*]
|
||||
low_grab --> [*]
|
||||
[*] --> LowIdle
|
||||
LowIdle --> [*]
|
||||
LowIdle --> InspectLow
|
||||
InspectLow --> PutBackLow
|
||||
InspectLow --> GrabLow
|
||||
PutBackLow --> LowIdle
|
||||
GrabLow --> LowIdle
|
||||
}
|
||||
|
||||
Low -> Low
|
||||
|
||||
'Spacer :D
|
||||
state a #transparent;line:transparent;text:transparent
|
||||
Low -up[hidden]-> a
|
||||
|
||||
Standing -up-> standing_to_low
|
||||
standing_to_low -down-> Low
|
||||
Low -up-> low_to_standing
|
||||
low_to_standing -down-> Standing
|
||||
|
||||
Standing -> ToLow
|
||||
ToLow -> Low
|
||||
Low --> ToStanding
|
||||
ToStanding --> Standing
|
||||
|
||||
@enduml
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
BIN
uml/plugin_connectivity.png
Normal file
BIN
uml/plugin_connectivity.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@ -8,34 +8,38 @@ skinparam ArrowColor #404040
|
||||
participant "ROS ActionClient" as client
|
||||
participant ActorServer as server
|
||||
participant ActorPlugin as plugin
|
||||
|
||||
note left of client: Protocol:
|
||||
/note left of server: ros_action
|
||||
/note left of plugin: MessageQueue
|
||||
|
||||
|
||||
==Goal==
|
||||
activate server
|
||||
activate plugin
|
||||
|
||||
==Goal==
|
||||
|
||||
[-> client: neuer ActionClient
|
||||
[-> client: create ActionClient
|
||||
activate client
|
||||
|
||||
client -> server: Goal-Anfrage
|
||||
server -->> client: Antwort auf Anfrage
|
||||
client -> server: goal request
|
||||
server -->> client: goal response
|
||||
|
||||
alt Anfrage akzeptiert?
|
||||
server ->> plugin: neuen Status und Ziel setzen
|
||||
plugin -->> server: Zustandswechsel bei\nnächstem Simulationsschritt
|
||||
alt goal accepted
|
||||
server ->> plugin: set state and target
|
||||
plugin -->> server: state change
|
||||
== Feedback==
|
||||
group opt par [Abbruch der Aktion]
|
||||
client->server: Cancel-Anfrage
|
||||
server->plugin: Status auf Idle setzen
|
||||
plugin -->> server: Zustandswechsel auf Idle
|
||||
server-->>client: positive Abbruchantwort
|
||||
group opt par [abort of current action]
|
||||
client->server: abort request
|
||||
server->plugin: set state to Idle
|
||||
server-->>client: abort response
|
||||
end
|
||||
loop Bis Aktion vollständig ausgeführt oder abgebrochen ist
|
||||
plugin -->> server: Feedback
|
||||
server -->> client: Feedback
|
||||
loop until action is completed or aborted
|
||||
plugin -->> server: feedback
|
||||
server -->> client: feedback callback
|
||||
end
|
||||
==Result==
|
||||
plugin -->> server: Zustandswechsel auf Idle
|
||||
server -->> client: Result-Antwort
|
||||
plugin -->> server: state change
|
||||
server -->> client: result callback
|
||||
end
|
||||
destroy client
|
||||
@enduml
|
||||
@ -1,25 +0,0 @@
|
||||
@startmindmap
|
||||
|
||||
|
||||
skinparam Linetype ortho
|
||||
skinparam defaultTextAlignment center
|
||||
top to bottom direction
|
||||
|
||||
* Sequence
|
||||
** WeightedRandom\nWichtung 1:1:1
|
||||
*** Laufe zu 1. Regal
|
||||
*** Laufe zu 2. Regal
|
||||
*** Laufe zu 3. Regal
|
||||
|
||||
** WeightedRandom\nWichtung 1:1
|
||||
*** Sequence
|
||||
**** Animation\nstanding_extend_arm
|
||||
**** Animation\nstanding_retract_arm
|
||||
|
||||
*** Sequence
|
||||
**** Animation\nstanding_to_low
|
||||
**** Animation\nlow_inspect
|
||||
**** Animation\nlow_put_back
|
||||
**** Animation\nlow_to_standing
|
||||
|
||||
@endmindmap
|
||||
Loading…
x
Reference in New Issue
Block a user