Skip to content
Snippets Groups Projects
Commit eefae1c6 authored by Muhamed (aider)'s avatar Muhamed (aider)
Browse files

feat: Implement REST API for rover to receive commands from mission control

parent 83ca85a3
No related branches found
No related tags found
No related merge requests found
api.py 0 → 100644
from flask import Flask, request, jsonify
from rover import Rover
from plateau import Plateau
app = Flask(__name__)
# Initialisierung des Rovers und des Plateaus
plateau = Plateau(10, 10) # Standardgröße, kann angepasst werden
rover = Rover()
rover.set_plateau_size(plateau.size_x, plateau.size_y)
@app.route('/drive', methods=['POST'])
def drive_rover():
"""
Endpunkt zum Steuern des Rovers.
Erwartet ein JSON mit dem Schlüssel "Input", der die Befehlssequenz enthält.
Gibt die erfolgreich ausgeführten Befehle zurück.
"""
data = request.get_json()
if not data or 'Input' not in data:
return jsonify({'error': 'Ungültige Anfrage. "Input" fehlt.'}), 400
commands = data['Input']
result = rover.drive(commands)
return jsonify({'executed_commands': result})
if __name__ == '__main__':
app.run(debug=True)
......@@ -28,7 +28,7 @@ class MissionControl:
def send_commands(self, cmd: str) -> str:
"""
Sendet einen Befehl an den Rover.
Sendet einen Befehl an den Rover über die REST-API.
Args:
cmd: Der zu sendende Befehl
......@@ -36,15 +36,27 @@ class MissionControl:
Returns:
Die erfolgreich ausgeführten Befehle
"""
# Synchronisiere die Hindernisse zwischen Mars und Rover
# Der Rover sollte die Hindernisse nicht direkt kennen
# Stattdessen sollte er selbst stoppen, wenn ein Hindernis vorliegt
# Da wir aber keine direkte Verbindung zwischen Rover und Mars haben,
# müssen wir die Hindernisse hier synchronisieren
if hasattr(self.mars, 'plateau') and hasattr(self.mars.plateau, 'obstacles'):
self.rover.obstacles = self.mars.plateau.obstacles
import requests
import json
return self.rover.drive(cmd)
try:
# Synchronisiere die Hindernisse zwischen Mars und Rover
if hasattr(self.mars, 'plateau') and hasattr(self.mars.plateau, 'obstacles'):
self.rover.obstacles = self.mars.plateau.obstacles
# Sende Befehl über REST-API
response = requests.post('http://localhost:5000/drive',
json={'Input': cmd},
headers={'Content-Type': 'application/json'})
if response.status_code == 200:
result = response.json()
return result['executed_commands']
else:
return f"Fehler: {response.status_code}, {response.text}"
except Exception as e:
# Fallback: Direkter Aufruf, wenn API nicht erreichbar
return self.rover.drive(cmd)
def observe_plateau(self) -> list:
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment