Zum Hauptinhalt springen

Streaming-Feedback-Nachrichten empfangen

Eine Streaming-Anwendung benötigt in der Regel den aktuellen Zustand und die Pose des Roboters, um zu entscheiden, welche Aktionen oder Bewegungen kommandiert werden sollen. Wir bieten verschiedene Feedback-Nachrichten an, die per UDP gesendet werden:

  • Streaming-Status
  • Kartesische Pose
  • Gelenkpositionen

Die folgenden Abschnitte beschreiben die Schritte, die erforderlich sind, um die gewünschten Feedback-Nachrichten auf dem Host-Gerät zu empfangen.

Streaming-Feedback konfigurieren

Um Art und Frequenz der zu sendenden Nachrichten festzulegen, stellen wir eine HTTP-API-Funktion bereit, die die gewünschten Einstellungen an den Controller weitergibt.

Details zum Payload finden Sie unter API — Streaming-Feedback-Eigenschaften setzen.

Der JSON-formatierte Payload muss an die folgende Adresse gesendet werden: http://{robot ip}/api/v3.0/set-streaming-feedback-properties, wobei robot ip vom Verbindungsmodus und der Konfiguration abhängt, die beim Verbinden des Streaming-PCs mit der Control Unit gewählt wurden.

Ein Beispiel mit dem RobFlow SDK finden Sie im Beispiel zum Feedback-Empfänger.

Python-Beispiel: Streaming-Feedback-Eigenschaften setzen

Der folgende Code zeigt den erforderlichen API-Aufruf, um die gewünschte Frequenz und den Endpunkt für Streaming-Feedback-Nachrichten festzulegen.

def set_streaming_feedback_properties(robot_IP: str, f_status: int, f_cartesian_pose: int, f_joint_pose: int, host_IP: str, host_port: int) -> bool:
"""
Enables the streaming mode on the robot found at the given IP and defines the settings as desired.
"""

# URL to the HTTP API
url = f'http://{robot_IP}/api/v3.0/set-streaming-feedback-properties'

# Fill the payload of the "start-streaming" message with the desired values
payload = {
"frequency_status": f_status,
"frequency_cartesian_pose": f_cartesian_pose,
"frequency_joint_pose": f_joint_pose,
"desired_remote_address": {
"address": host_IP
},
"desired_remote_port": host_port
}

headers = {
"Content-Type": "application/json",
"accept": "application/json"
}

SUCCESS_RESPONSE_CODE = 200
TIMEOUT = 10
try:
response = requests.put(url, headers=headers, json=payload, timeout=TIMEOUT)

if response.status_code == SUCCESS_RESPONSE_CODE:
return True
else:
print(f"Request failed with status code {response.status_code}: {response.text}")
except Exception as e:
print("An error occurred:", str(e))

return False
tipp

Für alle API-Nachrichten können Sie auch die interaktive Dokumentation in RobFlow aufrufen: Öffnen Sie RobFlow, klicken Sie oben rechts auf das Menü und wählen "API Documentation".

Ob die Feedback-Eigenschaften erfolgreich gesetzt wurden, können Sie über die Controller-Logs unter http://{robot ip}/logs/ prüfen.

Streaming-Feedback empfangen

Sobald die Streaming-Feedback-Eigenschaften gesetzt sind, werden die konfigurierten Nachrichten an den angegebenen Endpunkt gesendet.

Informationen zum Nachrichtenformat finden Sie in der Dokumentation der Feedback-Nachrichten.

Das Streaming-SDK enthält in streaming_feedback_messages.py eine Hilfsfunktion, um Streaming-Nachrichten im richtigen Format zu dekodieren.

Es gibt außerdem einen Beispiel-Empfänger, der diese und weitere vorhandene Werkzeuge nutzt und als Referenz für eigene Implementierungen dienen kann.

Fehlersuche

Dieser Abschnitt listet bereits aufgetretene Probleme und mögliche Lösungen auf.

Es werden keine Streaming-Nachrichten empfangen

  • Prüfen Sie in den RobControl-Logs (http://{robot ip}/logs/, beachten Sie den abschließenden /), ob die Feedback-Eigenschaften gesetzt wurden. Dort sollte eine Meldung mit den gewünschten Feedback-Frequenzen sowie dem Endpunkt stehen.
  • Stellen Sie sicher, dass Ihre Firewall die Netzwerkkommunikation über die benötigten Ports zulässt.