BATCAM FX Übersicht
BATCAM FX Entwicklungsübersicht
1. Einführung
BATCAM FX ist eine Echtzeit-Akustikkamera von SM Instruments. Sie liefert ein optisches Bild mit einer Auflösung von 1600×1200 zusammen mit einer 40×30-Beamforming-Map (BF-Map), sodass sich die Position der Schallentstehung über dem Bild visualisieren lässt.
Dieses Dokument ist der Ausgangspunkt für die Entwicklung einer BATCAM FX-Anbindung. Es stellt die vom Gerät bereitgestellten Schnittstellen im Überblick vor und erläutert den Datenfluss sowie das Verbindungsverfahren der typischsten Integrationsaufgabe, der Overlay-Bildkomposition. Detailthemen wie Parametersteuerung, ROS 2-Integration und Firmware-Update sind mit dem jeweiligen ausführlichen Dokument verlinkt. Den Gesamtaufbau des Developer Centers sowie die Dokumente zu den anderen Produkten (BATCAM FX2, FX Viewer) finden Sie unter Erste Schritte im Developer Center.
2. Die bereitgestellten Schnittstellen im Überblick
| Schnittstelle | Verwendungszweck | Zugehöriges Dokument |
|---|---|---|
| RTSP | Empfang des originalen Videostreams der Kamera. Ab Firmware 1.0.3 kann das Gerät auch ein von ihm selbst zusammengesetztes Overlay-Bild über RTSP bereitstellen. | Overlay-Parameter |
| WebSocket + Protobuf | Echtzeit-Streaming von Beamforming (BF Map), Audio und den Ergebnissen der KI-Teilentladungsklassifikation (PRPD) | Dieses Dokument, Python-Protobuf-Beispiel |
| REST API | Kontoverwaltung, Geräteeinstellungen (Netzwerk, Firmware, Neustart, Geräteinformationen), Ereignis-Trigger, Beamforming- und Overlay-Parameter, ROS Domain ID | BATCAM FX API-Playground |
| ROS 2 | Datenempfang und Konfiguration über Topics/Actions (unterstützt ab der Entwicklungs-Firmware v1.0.3b) | ROS Integration |
| Firmware-Update | Firmware-Installation über die Webseite oder die Shell (SSH) | Web-Update, Shell-Update |
Die vollständige Endpunkt-Spezifikation der REST API finden Sie im API-Playground, wo Sie die Aufrufe auch direkt im Browser ausführen können. Das Format der über WebSocket übertragenen Nachrichten entnehmen Sie dem fx-stream-protocol-Schema sowie dem Dokument Python-Protobuf-Beispiel.
3. Datenfluss der Overlay-Bildkomposition
Die Daten von BATCAM FX werden als originale Videodaten der Kamera über RTSP und als mit dem Protobuf-Protokoll kodierte Daten über WebSocket gesendet. Wenn Sie das überlagerte Bild selbst erzeugen möchten, setzen Sie das Bild in der folgenden Reihenfolge zusammen.

-
Empfangen Sie über RTSP (
rtsp://{device_ip}/raw) das Originalbild. -
Empfangen Sie über WebSocket die im Protobuf-Format kodierte Beamforming-Nachricht und dekodieren Sie diese in ein Array aus insgesamt 1200 Float-Werten (Float Array). Dieses Array entsteht, indem die BF Map der Struktur
40x30zu einer Struktur1x1200ausgerollt wird, und wird mit einer Periode von 25Hz übertragen. -
Interpolieren Sie das Float Array, um das zu überlagernde Bild zu erzeugen. Die 40×30 BF Map wird passend auf das optische Bild mit 1600×1200 abgebildet.
-
Durch die Kombination des RTSP-Videostreams mit den empfangenen Schallquellendaten können Sie in Echtzeit ein Beamforming-Overlay-Bild erzeugen.
💡 Hinweis: Ab Firmware 1.0.3 unterstützt BATCAM FX die Bereitstellung eines RTSP-Streams, in dem das Overlay-Bild bereits geräteseitig zusammengesetzt ist; damit ist auch eine Konfiguration ohne eigene Komposition möglich. Zur Einstellung lesen Sie bitte das Dokument Overlay-Parameter, zum Koordinatensystem der BF Map und zur Festlegung des Listening Point das Dokument Listening-Point-Koordinaten.
4. Verbindungsinformationen und Authentifizierung
{device_ip} in der folgenden Tabelle steht für die IP-Adresse des Geräts. Die IP-Einstellung können Sie über die REST API (/setting/ip) abfragen und ändern; die Firmware-Version des Geräts können Sie über die API zur Abfrage der Geräteinformationen (/setting/status) prüfen. Die ausführliche Spezifikation finden Sie im API-Playground.
| Element | Wert | Hinweise |
|---|---|---|
| RTSP-Videostream | rtsp://{device_ip}/raw | Benutzerauthentifizierung erforderlich |
| WebSocket-Streaming | ws://{device_ip}/ws | Angabe des SubProtocol zwingend erforderlich |
| WebSocket SubProtocol | Subscribe | Je nach Beispiel wird auch die Kleinschreibung subscribe verwendet |
| REST API | http://{device_ip} | Das Gerät stellt die API direkt bereit |
| Firmware-Update-Seite | http://{device_ip}/firmware | siehe Web-Update |
| Firmware-Update-Log | ws://{device_ip}/firmware/ws | Empfang des Logs zum Update-Fortschritt |
| Authentifizierungsverfahren | HTTP Basic | gemeinsam für REST, RTSP und WebSocket |
In BATCAM FX sind standardmäßig die beiden Konten admin und user voreingerichtet. Das Anlegen eines Kontos erfolgt über den Endpunkt /auth/create, die Abfrage der gesamten Kontenliste über /auth/all und die Abfrage, Entfernung sowie das Zurücksetzen des Passworts einzelner Konten über /auth/account.
⚠️ Achtung: Ändern Sie das werkseitige Standardpasswort unbedingt, bevor Sie das Gerät verwenden.
Aufbau des Authorization-Headers — Wenn die von Ihnen verwendete WebSocket-Bibliothek Authentifizierung unterstützt, geben Sie Username und Password an; unterstützt sie dies nicht, fügen Sie im Header der WebSocket-Verbindungsanfrage den Schlüssel Authorization hinzu und nehmen darin die mit base64 kodierte Zeichenkette {username}:{password} auf.
Authorization: Basic base64({username}:{password})
# Beispiel: bei username=admin, password=passwordAuthorization: Basic YWRtaW46cGFzc3dvcmQ=Abonnement (Subscribe) starten — Nach dem Aufbau der WebSocket-Verbindung werden nicht sofort Nachrichten empfangen; Sie müssen mit dem Subscribe-Objekt aus dem vorab generierten Protobuf-Code das Abonnement für den gewünschten Datenstrom an die Kamera senden. Die Subscribe-IDs der einzelnen Streams lauten wie folgt.
| Subscribe ID | Nachricht | Inhalt | Sendefrequenz |
|---|---|---|---|
| 0 | Beamforming | 40×30 BF Map (1×1200 Float-Array) | 25 Hz |
| 1 | WsAudio | Float-Audio mit 8000 Samples (200 kHz × 40 ms) | 25 Hz |
| 2 | LPointAudio | Dreikanalige Beamforming-Audiodaten des Listening Point | 25 Hz |
| 3 | Prpd | Ergebnisse der KI-Teilentladungsklassifikation (ab Firmware v1.0.3c, siehe AI PRPD-Klassifikation) | 4 Hz |
5. Beispielcode und Protobuf-Schema
Ein Beispiel für den Datenaustausch mittels Protobuf und WebSocket ist auf unserem GitHub (C#-Beispiel) veröffentlicht. Dieses Beispiel umfasst den gesamten oben beschriebenen Overlay-Kompositionsprozess und enthält außerdem ein GUI-Beispiel.
Das folgende Python-Beispiel zeigt den Ablauf vom Aufbau der WebSocket-Verbindung über das Senden des Abonnements bis zum Dekodieren der ersten Nachricht.
import asyncioimport base64import websocketsimport fx_protocol_pb2 as pb # vorab generierte Datei aus fx-stream-protocol
async def stream(ip: str, user: str, password: str): cred = base64.b64encode(f"{user}:{password}".encode()).decode() headers = { "Authorization": f"Basic {cred}", "Sec-WebSocket-Protocol": "subscribe", } uri = f"ws://{ip}/ws"
async with websockets.connect(uri, additional_headers=headers, subprotocols=["subscribe"]) as ws: # Abonnement für Beamforming (ID 0) starten sub = pb.Subscribe() sub.id = 0 sub.type = pb.Subscribe.SUBSCRIBE await ws.send(sub.SerializeToString())
async for raw in ws: event = pb.Event() event.ParseFromString(raw) if event.WhichOneof("data") == "beamforming": bf = event.beamforming print(f"bf count={len(bf.bf)} gain={bf.gain}") # bf count=1200
asyncio.run(stream("192.168.0.30", "admin", "password"))Die Einrichtung der Umgebung, die Erzeugung der Python-Bindings und ausführliche Beispiele je Nachrichtentyp werden im Dokument Python-Protobuf-Beispiel Schritt für Schritt erläutert.
Das zum Kodieren/Dekodieren von Protobuf erforderliche Schema und die vorab generierten Dateien finden Sie in unserem OSS GitLab (fx-stream-protocol). Dieses Dokument bezieht sich auf die vorab generierten Dateien des Tags v0.0.2; andere Versionen entnehmen Sie der Tag-Liste des Repositorys.
6. Häufige Probleme (Troubleshooting)
| Symptom | Ursache | Lösung |
|---|---|---|
| Die WebSocket-Verbindung kommt nicht zustande | SubProtocol nicht angegeben | Geben Sie beim Verbindungsaufbau das WebSocket-SubProtocol unbedingt als Subscribe an (Option subprotocols der Bibliothek). |
| Die Verbindung besteht, es werden aber keine Nachrichten empfangen | Abonnement-Nachricht (Subscribe) nicht gesendet | Senden Sie unmittelbar nach dem Verbindungsaufbau das Subscribe-Objekt (id, type), um das Abonnement zu starten. (C#-Referenzlink) |
| Die Verbindung wird mit einem Authentifizierungsfehler (401) abgelehnt | Fehlende Authentifizierungsdaten oder falsche Kontodaten | Übergeben Sie Username/Password an die Authentifizierungsfunktion der Bibliothek (C#-Referenzlink) oder bauen Sie den Authorization-Header im oben gezeigten Format selbst auf. Prüfen Sie, ob Konto und Passwort korrekt sind. |
7. Nächste Schritte
-
BATCAM FX API-Playground — Vollständige Spezifikation der REST API einsehen und Aufrufe direkt ausführen
-
Beamforming-Parameter — Frequenzfilter, Verstärkung, LPoint-Einstellungen
-
Overlay-Parameter — Einstellung der geräteseitigen Overlay-Komposition (ab Firmware 1.0.3)
-
Listening-Point-Koordinaten — Koordinatensystem der BF Map und Festlegung des LPoint
-
ROS Integration — ROS 2-Topics/Actions und Nachrichtenspezifikation
-
ROS Domain ID — Einstellung der ROS_DOMAIN_ID
-
AI PRPD-Klassifikation — Empfang der Ergebnisse der KI-basierten Teilentladungsklassifikation
-
Web-Software-Update · Shell-Software-Update — Verfahren zur Firmware-Installation
-
Firmware-Release-Notes — Änderungen je Version
-
Entwicklungsressourcen — Sammlung von Beispiel-Repositorys und Schemata