ROS-Node Bridge zwischen RISE und Comp. Model
Vorbereitungen
- Docker Login, falls nicht von früher noch bekannt. Laden des aktuellen Docker Images:
docker pull hub.mas-ci.techfak.de/trr318-a05-hri:latest
- Git clonen:
git clone https://gitlab.ub.uni-bielefeld.de/mas/projects/ci-jenkins/documentation.git
- Anpassen der IP-Adresse im "start_docker.sh" Skript auf deine eigene IP vom Laptop Starten vom Docker:
./start_docker.sh
- Starten von: "roscore" und "scaffxrosgen"
- In Vdemo-Terminal, Beispiel zum Testen des Service Requests:
rosservice call /state_action_service "data: '{\"task_name\": \"task_1\", \"task_discourse\": \"w_1\"}'"
Aufgabe 1
- Implementiere ein kleines Pythonskript, welches in einem angegebenen Intervall (alle 30 Sekunden z.B.) einen Wert in den WorkingMemory von RISE schreibt.
- Hierfür ziehst du dir über einen ROS-Service von meinem Adaptive Scaffolding Model per Request ein Ergebnis. Das Model liefert dir einen json String zurück im Format:
- Request:
request = {"task_name": task, "task_discourse": discourse}
- Response Strategy:
strategy = json.loads(state_action_service(str(json.dumps(request))).data)["selected_action"]
- Request:
- Für den Request des Services benötigst du "task_name" und "task_discourse", das sind ebenfalls zwei WorkingMemory innerhalb von RISE, die du dir vorher holen musst.
- Schreibe strategy in den WorkingMemory von RISE unter dem Entry: "Current_Adaptive_Strategy"
- (Wenn alles Sonstige fertig ist) Erweitere das Skript dahingehend, dass es nicht in einem Intervall updated, sondern nur updated, wenn eine Topic namens "Update_Scaffolding_Strategy_by_Task_Context" getriggert wird.
Hilfe zum Model Service: https://gitlab.ub.uni-bielefeld.de/mas/projects/sfb-trr318/a05/adaptive-scaffolding-generation
Aufgabe 2
Strategy | Text |
---|---|
Affirmation | Zerstampfe die Tablette |
Negation+Affirmation | Zerteile die Tablette nicht, sondern zerstampfe sie |
Negation | Zerteile die Tablette nicht |
Affirmation & Hesitation | Hm.. zerstampfe die Tablette |
Negation+Affirmation & Hesitation | Hm.. zerteile die Tablette nicht, sondern zerstampfe sie |
Negation & Hesitation | Hm.. zerteile die Tablette nicht |
- Erstelle eine IR mit dem Namen "Explanation_Task_1_Tool_0"
- Die IR prüft, welcher Wert im WorkingMemory Entry: "Current_Adaptive_Strategy" steht:
- If WM Entry = "Affirmation", dann starte CRA "Explanation_Task_1_Tool_0_Affirmation"
- If WM Entry = "Negation+Affirmation", dann starte CRA "Explanation_Task_1_Tool_0_Negation+Affirmation"
- .. für alle Strategien aus Tabelle 1 ..
- Erstelle für jeden Task (5 Stück) für jedes mögliche Tool (0 oder 1) eine eigene IR, die gestartet werden kann (insgesamt also 10 IRs) und wiederhole den Aufbau vom Beispiel.
- Idee: Im RISE WM existieren "task_name" und "task_discourse". Nutze die beiden Entries um 1 IR zu designen statt 10.
Edited by Andre Groß