Zum Inhalt springen

Übersicht zur FX ROS-Systemintegration

Überblick

BATCAM FX unterstützt ab der Entwicklungs-Firmware-Version v1.0.3b die Datenübertragung auf Basis von ROS 2; diese Funktion ist in der offiziellen Release-Firmware v1.0.3 enthalten. Mit diesem Dokument können Sie die von BATCAM FX publizierten ROS 2 Topics (Beamforming-Map, Audio, Video, PRPD-Klassifikationsergebnisse) in einem ROS 2 Node auf dem Host-PC abonnieren und die Beamforming- und Overlay-Einstellungen über ROS 2 Actions steuern.

Der ROS 2 Datenkanal arbeitet unabhängig von den bestehenden Datenkanälen (RTSP-Video, WebSocket/Protobuf). Zu den bestehenden Datenkanälen lesen Sie bitte das Dokument BATCAM FX Übersicht.

Der ROS 2 Datenkanal arbeitet unabhängig von den bestehenden Datenkanälen.

BATCAM FX verwendet für die Datenübertragung den Nachrichtentyp FX Stream Message. In der Firmware der Kamera ist eine auf Basis von ROS 2 Humble Hawksbill gebaute Binärdatei enthalten; das Nachrichtenformat ist im folgenden öffentlichen Repository ausführlich definiert.

Diese Nachrichten sind als ROS 2 Interface-Typen definiert und werden verwendet, um die von den Sensoren erfassten Daten zu publizieren.

Dieses Dokument behandelt die folgenden Inhalte.

  • Behandelt wird: Voraussetzungen (Firmware, ROS 2 Umgebung, Netzwerk), Schnellstart (Build, Abonnement prüfen), Topic-/Nachrichtenspezifikation, Action-Spezifikation, Troubleshooting

  • Nicht behandelt wird: Anbindung der RTSP-/WebSocket-Kanäle (BATCAM FX Übersicht), Details zur REST API (FX API-Playground), Details zum Ablauf der Änderung der ROS Domain ID (ROS Domain ID einstellen)

Voraussetzungen

Firmware-Version

Die ROS 2 bezogenen Funktionen wurden je nach Firmware-Version schrittweise hinzugefügt. Die ausführliche Änderungshistorie finden Sie in den FX Firmware-Release-Notes.

FunktionErstmals unterstützende FirmwareHinweis
ROS 2 Topic-Übertragung (beamforming / image / lpoint_audio / ws_audio / prpd)v1.0.3b (Entwicklungs-Firmware)In der offiziellen Release-Version v1.0.3 enthalten
Einstellungs-Actions (setting_beamforming / setting_overlay)v1.0.3cIn der offiziellen Release-Version v1.0.3 enthalten
REST API zum Abfragen und Einstellen der ROS Domain ID (/ros/domain)v1.0.3cSiehe ROS Domain ID einstellen

Die Firmware-Version der verwendeten Kamera können Sie über die REST API GET /setting/status (Abfrage der Geräteinformationen) ermitteln. Die ausführliche Spezifikation finden Sie im FX API-Playground.

ROS 2 Umgebung

KategorieUmgebungHinweis
Kamera (in der Firmware enthaltene Binärdatei)ROS 2 Humble HawksbillIn der Firmware enthalten, keine separate Installation erforderlich
Host-Nachrichtenpaket (fx-stream-msgs)Verwendung von ROS 2 Humble vorausgesetztNach dem Build in einer Umgebung mit Python 3.10.16 und ROS 2 Jazzy (Ubuntu 24.04) durch Tests zum Senden und Empfangen von Daten mit BATCAM FX verifiziert

💡 Hinweis: fx-stream-msgs wurde unter der Voraussetzung der Verwendung mit ROS 2 Humble erstellt und wurde durch den Build in einer Umgebung mit ROS 2 Jazzy (Ubuntu 24.04) sowie durch Tests zum Senden und Empfangen von Daten mit BATCAM FX verifiziert.

Netzwerk

  • Der ROS 2 Stack der Kamera verwendet eine Fast DDS Konfiguration auf Basis von UDPv4 (Stand: Release-Notes zu v1.0.3c). Kamera und Host-PC müssen im selben Netzwerk miteinander kommunizieren können.

  • Die Topics sind nur sichtbar, wenn die ROS_DOMAIN_ID von Kamera und Host übereinstimmt. Ab der Entwicklungs-Firmware v1.0.3b ist die Standard-ROS_DOMAIN_ID der Kamera 123; ab Firmware 1.0.3c lässt sie sich über die REST API (GET·PATCH /ros/domain) abfragen und ändern. Ausführliche Informationen finden Sie im Dokument ROS Domain ID einstellen.

  • Beim Abonnieren aller Topics wird, bezogen auf die Summe der fx_stream_msgs Topics, eine Bandbreite von etwa 3.6 MB/s (ohne das image Topic) benötigt. Für einen stabilen Empfang wird eine kabelgebundene Verbindung empfohlen.

Schnellstart

1. hardware_id der Kamera ermitteln

Die Topic- und Action-Namen von BATCAM FX enthalten die Hardware-ID der Kamera (z. B. /fx_{hardware_id}/beamforming). Die Hardware-ID können Sie über die REST API GET /setting/status ermitteln. Alle REST-Endpunkte erfordern eine HTTP-Basic-Authentifizierung (siehe FX API-Playground).

Terminal-Fenster
curl -u admin:{password} http://192.168.0.30/setting/status
# IP-Adresse und Passwort an Ihre Umgebung anpassen.

Beispielantwort:

{
"error": 0,
"result": {
"hardware_id": "3287162925128",
"sbrio_version": "1.0.14",
"firmware_version": "v0.0.1"
}
}

Bei der Kamera aus diesem Beispiel lautet das Topic-Präfix /fx_3287162925128. Alle Beispiele in den folgenden Schritten verwenden diesen Wert.

2. ROS_DOMAIN_ID des Hosts einstellen

Stellen Sie in der Shell des Hosts dieselbe Domain ID wie bei der Kamera ein. Den in der Kamera eingestellten Wert können Sie über GET /ros/domain (ab Firmware 1.0.3c) abfragen; ab der Entwicklungs-Firmware v1.0.3b lautet der Standardwert 123.

Terminal-Fenster
export ROS_DOMAIN_ID=123
# Denselben Wert wie in der Kamera einstellen.

3. fx-stream-msgs bauen

Um auf dem Host die Nachrichtentypen von fx_stream_msgs zu verwenden, laden Sie das öffentliche Repository herunter und bauen es in einem Workspace.

Terminal-Fenster
mkdir -p ~/fx_ws/src
cd ~/fx_ws/src
git clone https://gitlab.com/smins-oss/sound-camera/framework/protocol/fx-stream-msgs.git
cd ~/fx_ws
colcon build
source install/setup.bash

Bei jedem Öffnen eines neuen Terminals müssen Sie source ~/fx_ws/install/setup.bash erneut ausführen.

4. Topics und Actions prüfen

Prüfen Sie bei eingeschalteter und über das Netzwerk verbundener Kamera die Liste der Topics.

Terminal-Fenster
ros2 topic list

Erwartete Ausgabe:

/fx_3287162925128/beamforming
/fx_3287162925128/image
/fx_3287162925128/lpoint_audio
/fx_3287162925128/prpd
/fx_3287162925128/ws_audio
/parameter_events
/rosout

Auch die Liste der Actions können Sie prüfen.

Terminal-Fenster
ros2 action list

Erwartete Ausgabe:

/fx_3287162925128/setting_beamforming
/fx_3287162925128/setting_overlay

5. Datenempfang prüfen

Empfangen Sie testweise eine Nachricht vom PRPD Topic.

Terminal-Fenster
ros2 topic echo /fx_3287162925128/prpd --once

Erwartete Ausgabe (die Werte hängen von der Messsituation ab):

noise:
- -0.96
- 4.48
- -6.54
corona:
- 2.98
- 5.88
- -1.39
floating:
- -3.55
- -5.45
- 0.73
surface:
- 0.3
- -1.51
- 0.45
---

Jedes Array enthält die Logit Scores je Teilentladungstyp, die den LPoint-Kanälen CH0~CH2 entsprechen. Zur Interpretation lesen Sie bitte das Dokument AI PRPD-Klassifikator.

6. Beispiel für einen minimalen Subscriber-Node (Python)

Nachfolgend finden Sie das vollständige Dateibeispiel eines minimalen Nodes, der das Beamforming Topic abonniert und den Maximalwert der BF Map ausgibt.

fx_beamforming_listener.py

import rclpy
from rclpy.node import Node
from fx_stream_msgs.msg import Beamforming
HARDWARE_ID = '3287162925128' # Mit dem per GET /setting/status ermittelten Wert ersetzen
class FxBeamformingListener(Node):
def __init__(self):
super().__init__('fx_beamforming_listener')
self.subscription = self.create_subscription(
Beamforming,
f'/fx_{HARDWARE_ID}/beamforming',
self.listener_callback,
10)
def listener_callback(self, msg: Beamforming):
# bf ist die zu 1x1200 aufgefaltete 40x30 BF Map,
# ab Firmware v1.0.2 ein dB-Wert ohne Skalenumrechnung.
self.get_logger().info(
f'BF max: {max(msg.bf):.1f} dB (gain={msg.gain})')
def main():
rclpy.init()
node = FxBeamformingListener()
rclpy.spin(node)
if __name__ == '__main__':
main()

Ausführung:

Terminal-Fenster
source ~/fx_ws/install/setup.bash
python3 fx_beamforming_listener.py

Erwartete Ausgabe (die Werte hängen von der Messsituation ab):

[INFO] [fx_beamforming_listener]: BF max: 45.2 dB (gain=100.0)
[INFO] [fx_beamforming_listener]: BF max: 45.4 dB (gain=100.0)

Topic-Referenz

BATCAM FX erzeugt auf Basis der Hardware-ID der Kamera die folgenden Topics.

TopicNachrichtentypZyklusDurchschnittliche BandbreiteGröße pro Nachricht
/fx_{hardware_id}/beamformingfx_stream_msgs/msg/Beamforming25 Hz~250 KB/s9.84 KB
/fx_{hardware_id}/imagesensor_msgs/msg/CompressedImage25 Hz (25 fps)
/fx_{hardware_id}/lpoint_audiofx_stream_msgs/msg/LPointAudio25 Hz~2.5 MB/s0.10 MB
/fx_{hardware_id}/ws_audiofx_stream_msgs/msg/WsAudio25 Hz~850 KB/s32.02 KB
/fx_{hardware_id}/prpdfx_stream_msgs/msg/Prpd25 Hz~220 B/s52 B

Mit Ausnahme von LevelTrigger werden alle Nachrichten periodisch im Abstand von 25 Hz (25 fps) publiziert. Die Summe der durchschnittlichen Bandbreite der fx_stream_msgs Topics beträgt etwa 3.6 MB/s (ohne das image Topic).

Hinweise zur Dateninterpretation

  • Beim gain-Wert in den Nachrichten WsAudio, LPointAudio und Beamforming wird, wenn die automatische Verstärkungsfunktion der Kamera aktiviert ist, der zuletzt eingestellte Wert oder -1 zurückgegeben.

  • Die Werte ws und lpoint0~2 von WsAudio und LPointAudio sind float-Arrays mit einer Länge von 8000 Samples und liegen im Float Wave Format nach IEEE 754 vor. Bezogen auf den Zyklus von 25 Hz sind das 200,000 Samples pro Sekunde, was der Mikrofon-Abtastrate der Kamera (200 kHz) entspricht.

  • Ab Firmware v1.0.2 ist bei der Nachricht Beamforming der Wert von bf ein dB-Wert, der keine Skalenumrechnung erfordert.

WsAudio.msg

TypNameBeschreibung
float64gainMikrofon-Verstärkungswert zum Zeitpunkt des Empfangs. Bei aktivierter automatischer Verstärkung (autogain) der zuletzt eingestellte Wert oder -1
float32[]wsAudiosignal mit einer Länge von 8000 Samples (IEEE 754 Float Wave Format)

LPointAudio.msg

TypNameBeschreibung
float64gainMikrofon-Verstärkungswert zum Zeitpunkt des Empfangs. Bei aktivierter automatischer Verstärkung (autogain) der zuletzt eingestellte Wert oder -1
float32[]lpoint0An der Position Listening Point 0 beamgeformtes Audiosignal, float-Array mit 8000 Samples (IEEE 754 Float Wave Format)
float32[]lpoint1Audiosignal an der Position Listening Point 1 (gleiches Format)
float32[]lpoint2Audiosignal an der Position Listening Point 2 (gleiches Format)

Das Koordinatensystem der Listening Points und die Einschränkungen bei der Einstellung sind im Dokument Listening-Point-Koordinaten beschrieben.

Beamforming.msg

TypNameBeschreibung
float64gainMikrofon-Verstärkungswert zum Zeitpunkt des Empfangs. Bei aktivierter automatischer Verstärkung (autogain) der zuletzt eingestellte Wert oder -1
float64[]bfArray, in dem die 40×30 BF Map zu 1×1200 aufgefaltet ist. Ab Firmware v1.0.2 ein dB-Wert, der keine Skalenumrechnung erfordert (siehe Aufbau und Koordinatensystem der BF Map)
float64[]level
int32[]param1
int32[]param2
int32[]theta
int32[]pos_x
int32[]pos_y
int32[]v_pos_x
int32[]v_pos_y

Prpd.msg

Jedes Feld ist ein Array der Länge 3, das den LPoint-Kanälen CH0~CH2 entspricht; die Werte sind nicht normalisierte Logit Scores je Teilentladungstyp. Die Interpretation mithilfe von argmax und softmax sowie Beispielcode finden Sie im Dokument AI PRPD-Klassifikator.

TypNameBeschreibung
float32[3]noiseLogit Score für Noise (Geräusch ohne Entladung) je Kanal
float32[3]coronaLogit Score der Corona-Entladung je Kanal
float32[3]floatingLogit Score der Floating-Entladung je Kanal
float32[3]surfaceLogit Score der Surface-Entladung je Kanal

LevelTrigger.msg ( künftig nicht verwendet )

Der Nachrichtentyp ist zwar definiert, wird künftig jedoch nicht verwendet und ist in der obigen Topic-Liste nicht enthalten.

TypNameBeschreibung
float64decibelPegelwert (dB)

Action-Referenz

BATCAM FX erzeugt auf Basis der Hardware-ID der Kamera die folgenden Actions (ab Firmware v1.0.3c).

ActionAction-TypVerwendungszweck
/fx_{hardware_id}/setting_beamformingfx_stream_msgs/action/BeamformingSettingEinstellung der Beamforming-Parameter
/fx_{hardware_id}/setting_overlayfx_stream_msgs/action/OverlaySettingEinstellung der Parameter zur Erzeugung des Overlay-Bildes und des Source-Modus

Ausführliche Beispiele für die Einstellung über Actions finden Sie im Dokument Beamforming- und Overlay-Einstellung über ROS-Actions (Beta). Dieselben Einstellungen sind auch über die REST API möglich (FX API-Playground).

BeamformingSetting.action

Goal, Result und Progress bestehen jeweils aus einem einzigen Feld des Nachrichtentyps BeamformingSetting, nämlich setting.

AbschnittTypName
GoalBeamformingSettingsetting
ResultBeamformingSettingsetting
ProgressBeamformingSettingsetting

BeamformingSetting.msg — Die Minimal-, Maximal- und Referenzwerte der einzelnen Felder finden Sie im Dokument Beamforming-Parameter.

TypNameBeschreibungBereich (Einheit/Schritt)
boolautogainOb die automatische Mikrofonverstärkung verwendet wird. Die Kamera bestimmt den Gain je nach Lautstärke automatischTrue / False
float64gainMikrofon-Verstärkungswert. Wird nur angewendet, wenn autogain False ist1 ~ 1000 (nur 1, 10, 100, 1000 zulässig)
float64x_calKorrektur der Abweichung der x-Koordinate zwischen Kamerabild und Overlay-Bild0 ~ 1 (Schritt 0.01)
float64y_calKorrektur der Abweichung der y-Koordinate zwischen Kamerabild und Overlay-Bild0 ~ 1 (Schritt 0.01)
float64distanceEntfernung zur zu messenden Geräuschquelle. Mit der angegebenen Entfernung wird ein präziseres Beamforming versucht1 ~ 10 (Schritt 1)
float64high_cutHöchste anzuzeigende Frequenz (Tiefpassfilter). Töne oberhalb dieses Wertes werden herausgefiltertüber low_cut ~ 100,000 Hz (Schritt 100)
float64low_cutNiedrigste anzuzeigende Frequenz (Hochpassfilter). Töne unterhalb dieses Wertes werden herausgefiltert1,000 Hz ~ unter high_cut (Schritt 100)
int32l_point_0Index von Listening Point 0 (40×30 Raster). Alle drei müssen angegeben werden0 ~ 1199
int32l_point_1Index von Listening Point 10 ~ 1199
int32l_point_2Index von Listening Point 20 ~ 1199

Koordinatenbezogene Einschränkungen wie der Mindestabstand zwischen den Listening Points sind im Dokument Listening-Point-Koordinaten beschrieben. In der REST API werden dieselben Werte über das Feld index_l (drei durch Komma getrennte Werte) übertragen.

Terminal-Beispiel:

Terminal-Fenster
ros2 action send_goal /fx_3287162925128/setting_beamforming fx_stream_msgs/action/BeamformingSetting \
"{
setting: {
autogain: false,
gain: 1,
x_cal: 0.0,
y_cal: 0.0,
distance: 5.0,
high_cut: 60000.0,
low_cut: 25000.0,
l_point_0: 580,
l_point_1: 20,
l_point_2: 290
}
}"

OverlaySetting.action

Goal, Result und Progress bestehen jeweils aus einem einzigen Feld des Nachrichtentyps OverlaySetting, nämlich setting.

AbschnittTypName
GoalOverlaySettingsetting
ResultOverlaySettingsetting
ProgressOverlaySettingsetting

OverlaySetting.msg — Die Minimal-, Maximal- und Referenzwerte der einzelnen Felder finden Sie im Dokument Overlay-Parameter.

TypNameBeschreibungBereich (Einheit/Schritt)
boolenable_overlayOb das Overlay-Bild ausgegeben wird. Bei True wird das Overlay in den über RTSP und ROS übertragenen Bildern angezeigtTrue / False
boolenable_source_modeModus zur Quellenerkennung. Nur nutzbar, wenn das Overlay eingeschaltet istTrue / False
int32number_of_sourcesAnzahl der gleichzeitig zu verfolgenden Quellen (empfohlen: höchstens 3)1 ~ 5 (Schritt 1)
int32averageAnzahl der Beamforming-Maps, über die gemittelt wird. Wird bei aktivem Modus zur Quellenerkennung nicht angewendet0 ~ 10 (Schritt 1)
float64thresholdMindestintensitätswert, ab dem etwas als Quelle gewertet wird. Wird bei aktivem Modus zur Quellenerkennung nicht angewendet0 ~ 120 (Schritt 1)
float64rangeGröße des Overlay-Bildes für eine Quelle. Wird bei aktivem Modus zur Quellenerkennung nicht angewendet0 ~ 10 (Schritt 0.1)

Terminal-Beispiel:

Terminal-Fenster
ros2 action send_goal /fx_3287162925128/setting_overlay fx_stream_msgs/action/OverlaySetting \
"{
setting: {
enable_overlay: true,
enable_source_mode: true,
number_of_sources: 3,
range: 5.0,
threshold: 15.0,
average: 1
}
}"

Fehlerbehebung (Troubleshooting)

  • Wenn die Topics nicht in der Liste erscheinen:

    • Prüfen Sie, ob die ROS_DOMAIN_ID des Hosts mit der Einstellung der Kamera übereinstimmt. Ab der Entwicklungs-Firmware v1.0.3b ist der Standardwert der Kamera 123; den aktuellen Wert können Sie über GET /ros/domain (ab Firmware 1.0.3c) abfragen. (ROS Domain ID einstellen)

    • Prüfen Sie, ob Kamera und Host im selben Netzwerk kommunizieren können. Der ROS 2 Stack der Kamera verwendet eine Fast DDS Konfiguration auf Basis von UDPv4.

    • Prüfen Sie über GET /setting/status, ob die Firmware eine Version ist, die die ROS 2 Übertragung unterstützt (Topic-Übertragung ab der Entwicklungs-Firmware v1.0.3b, enthalten in der offiziellen Release-Version v1.0.3).

  • Wenn die Fehlermeldung erscheint, dass der Nachrichtentyp fx_stream_msgs nicht gefunden werden kann:

    • Prüfen Sie, ob Sie das Paket fx-stream-msgs gebaut und im aktuellen Terminal source ~/fx_ws/install/setup.bash ausgeführt haben.

    • Mit dem Befehl ros2 interface show fx_stream_msgs/msg/Beamforming können Sie prüfen, ob der Typ erkannt wird.

    • fx-stream-msgs setzt die Verwendung von ROS 2 Humble voraus und wurde durch Build- sowie Sende- und Empfangstests in einer Umgebung mit ROS 2 Jazzy (Ubuntu 24.04) verifiziert.

  • Wenn der gain-Wert als -1 empfangen wird:

    • Das ist das normale Verhalten, wenn die automatische Verstärkung (autogain) der Kamera aktiviert ist. Wenn Sie einen festen gain-Wert verwenden möchten, setzen Sie autogain auf False und geben Sie anschließend den gain an (Beamforming-Parameter).
  • Wenn der Empfang verzögert wird oder abbricht:

    • Beim Abonnieren aller Topics wird, bezogen auf die Summe der fx_stream_msgs Topics, eine Bandbreite von etwa 3.6 MB/s (ohne das image Topic) benötigt. Es wird empfohlen, eine kabelgebundene Verbindung zu verwenden und nur die benötigten Topics zu abonnieren.
  • Wenn die Verbindung zur Kamera unmittelbar nach der Änderung der ROS Domain ID abbricht:

    • Während die Einstellung über PATCH /ros/domain übernommen wird, wird die Verbindung zur Kamera kurzzeitig unterbrochen. Stellen Sie die Verbindung nach der Übernahme erneut her.

Zugehörige Dokumente