コンテンツにスキップ

FX ROS システム統合の概要

概要

BATCAM FX は v1.0.3b 開発ファームウェアバージョンから ROS 2 ベースのデータ送信をサポートしており、この機能は正式リリースファームウェア v1.0.3 に含まれています。本ドキュメントを通じて、BATCAM FX がパブリッシュする ROS 2 トピック(ビームフォーミングマップ、オーディオ、映像、PRPD 分類結果)をホスト PC の ROS 2 ノードで購読し、ROS 2 アクションでビームフォーミング・オーバーレイ設定を制御できます。

ROS 2 データチャンネルは、既存のデータチャンネル(RTSP 映像、WebSocket/Protobuf)とは独立して動作します。既存のデータチャンネルについては BATCAM FX 概要 ドキュメントをご参照ください。

ROS 2 データチャンネルは既存のデータチャンネルとは独立して動作します。

BATCAM FX はデータ送信のために FX Stream Message タイプを使用します。カメラには ROS 2 Humble Hawksbill をベースにビルドされたバイナリがファームウェアに含まれており、メッセージフォーマットは次の公開リポジトリに詳細に定義されています。

これらのメッセージは ROS 2 インターフェースタイプとして定義されており、センサーで収集したデータをパブリッシュするために使用されます。

本ドキュメントで扱う内容は次のとおりです。

  • 扱う内容: 前提条件(ファームウェア・ROS 2 環境・ネットワーク)、クイックスタート(ビルド・購読確認)、トピック/メッセージ仕様、アクション仕様、トラブルシューティング

  • 扱わない内容: RTSP/WebSocket チャンネル連携(BATCAM FX 概要)、REST API の詳細(FX API プレイグラウンド)、ROS Domain ID 変更手順の詳細(ROS Domain ID 設定

前提条件

ファームウェアバージョン

ROS 2 関連機能はファームウェアバージョンに応じて段階的に追加されました。詳細な変更履歴は FX ファームウェアリリースノート をご参照ください。

機能初回サポートファームウェア備考
ROS 2 トピック送信 (beamforming / image / lpoint_audio / ws_audio / prpd)v1.0.3b(開発ファームウェア)正式リリース v1.0.3 に含まれる
設定アクション (setting_beamforming / setting_overlay)v1.0.3c正式リリース v1.0.3 に含まれる
ROS Domain ID の照会・設定 REST API (/ros/domain)v1.0.3cROS Domain ID 設定 参照

ご使用中のカメラのファームウェアバージョンは、REST API GET /setting/status(機器情報の照会)で確認できます。詳細な仕様は FX API プレイグラウンド をご参照ください。

ROS 2 環境

区分環境備考
カメラ(ファームウェア内蔵バイナリ)ROS 2 Humble Hawksbillファームウェアに含まれているため別途インストール不要
ホストメッセージパッケージ (fx-stream-msgs)ROS 2 Humble の使用が前提Python 3.10.16、ROS 2 Jazzy (Ubuntu 24.04) 環境でビルドした後、BATCAM FX とのデータ送受信テストにより検証済み

💡 参考: fx-stream-msgs は ROS 2 Humble での使用を前提に作成されており、ROS 2 Jazzy (Ubuntu 24.04) 環境でのビルドと BATCAM FX 間のデータ送受信テストを通じて検証されました。

ネットワーク

  • カメラの ROS 2 スタックは UDPv4 ベースの Fast DDS 設定を使用します(v1.0.3c リリースノート基準)。カメラとホスト PC が同一ネットワークで相互に通信可能である必要があります。

  • カメラとホストの ROS_DOMAIN_ID が一致していないとトピックは表示されません。v1.0.3b 開発ファームウェアからカメラのデフォルト ROS_DOMAIN_ID は 123 であり、ファームウェア 1.0.3c 以上では REST API(GETPATCH /ros/domain)で照会・変更できます。詳細は ROS Domain ID 設定 ドキュメントをご参照ください。

  • 全トピックを購読する場合、fx_stream_msgs トピックの合計基準で約 3.6 MB/s(image トピックを除く)の帯域幅が必要です。安定した受信のために有線接続を推奨します。

クイックスタート

1. カメラの hardware_id 確認

BATCAM FX のトピックとアクションの名前には、カメラのハードウェア ID が含まれます(例: /fx_{hardware_id}/beamforming)。ハードウェア ID は REST API GET /setting/status で確認できます。すべての REST エンドポイントは HTTP Basic 認証が必要です(FX API プレイグラウンド 参照)。

Terminal window
curl -u admin:{password} http://192.168.0.30/setting/status
# IP アドレスとパスワードはご使用の環境に合わせて変更

レスポンス例:

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

この例のカメラであれば、トピックの接頭辞は /fx_3287162925128 になります。以下の手順の例では、すべてこの値を使用します。

2. ホストの ROS_DOMAIN_ID 設定

ホストのシェルで、カメラと同じドメイン ID を設定します。カメラに設定された値は GET /ros/domain(ファームウェア 1.0.3c 以上)で確認でき、v1.0.3b 開発ファームウェアからデフォルト値は 123 です。

Terminal window
export ROS_DOMAIN_ID=123
# カメラに設定されている値と同じ値を指定

3. fx-stream-msgs のビルド

ホストで fx_stream_msgs メッセージタイプを使用するには、公開リポジトリを取得してワークスペースでビルドします。

Terminal window
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

新しいターミナルを開くたびに source ~/fx_ws/install/setup.bash を再度実行する必要があります。

4. トピック・アクションの確認

カメラの電源が入り、ネットワークに接続された状態でトピック一覧を確認します。

Terminal window
ros2 topic list

想定される出力:

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

アクション一覧も確認できます。

Terminal window
ros2 action list

想定される出力:

/fx_3287162925128/setting_beamforming
/fx_3287162925128/setting_overlay

5. データ受信の確認

PRPD トピックからメッセージを 1 件受信してみます。

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

想定される出力(値は測定状況によって異なります):

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
---

各配列は LPoint チャンネル CH0~CH2 に対応する部分放電タイプ別の logit score です。解釈方法は AI PRPD 分類器 ドキュメントをご参照ください。

6. 最小限の購読ノードの例 (Python)

次は、Beamforming トピックを購読して BF Map の最大値を出力する最小限のノードのファイル全体の例です。

fx_beamforming_listener.py

import rclpy
from rclpy.node import Node
from fx_stream_msgs.msg import Beamforming
HARDWARE_ID = '3287162925128' # GET /setting/status で確認した値に変更
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 は 40x30 の BF Map を 1x1200 に展開した配列であり、
# v1.0.2 ファームウェア以上ではスケール変換が不要な dB 値
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()

実行:

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

想定される出力(値は測定状況によって異なります):

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

トピックリファレンス

BATCAM FX は、カメラのハードウェア ID を基準に次のトピックを生成します。

トピックメッセージタイプ周期平均帯域幅メッセージあたりのサイズ
/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

LevelTrigger を除くすべてのメッセージは 25 Hz (25 fps) 間隔で周期的にパブリッシュされます。fx_stream_msgs トピックの平均帯域幅の合計は約 3.6 MB/s(image トピックを除く)です。

データ解釈時の注意事項

  • WsAudioLPointAudioBeamforming メッセージに含まれる gain 値は、カメラの自動増幅機能が有効な場合、最後に設定された値または -1 が返されます。

  • WsAudioLPointAudio の ws、lpoint0~2 の値は 8000 サンプル長の float 配列であり、IEEE 754 形式の Float Wave Format で構成されます。25 Hz 周期基準で毎秒 200,000 サンプルとなり、カメラのマイクサンプリングレート(200 kHz)に相当します。

  • v1.0.2 ファームウェアから Beamforming メッセージの bf の値は、スケール変換が不要な dB 値です。

WsAudio.msg

タイプ名前説明
float64gain受信時点のマイク増幅値。自動増幅 (autogain) が有効な場合は最後の設定値または -1
float32[]ws8000 サンプル長のオーディオ信号 (IEEE 754 Float Wave Format)

LPointAudio.msg

タイプ名前説明
float64gain受信時点のマイク増幅値。自動増幅 (autogain) が有効な場合は最後の設定値または -1
float32[]lpoint0Listening Point 0 の位置でビームフォーミングされたオーディオ信号、8000 サンプルの float 配列 (IEEE 754 Float Wave Format)
float32[]lpoint1Listening Point 1 の位置のオーディオ信号(形式は同じ)
float32[]lpoint2Listening Point 2 の位置のオーディオ信号(形式は同じ)

Listening Point の座標体系と設定上の制約については、Listening Point 座標 ドキュメントをご参照ください。

Beamforming.msg

タイプ名前説明
float64gain受信時点のマイク増幅値。自動増幅 (autogain) が有効な場合は最後の設定値または -1
float64[]bf40×30 の BF Map を 1×1200 に展開した配列。v1.0.2 ファームウェアからスケール変換が不要な dB 値(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

各フィールドは LPoint チャンネル CH0~CH2 に対応する長さ 3 の配列であり、値は部分放電タイプ別の正規化されていない logit score です。argmax・softmax を用いた解釈方法とサンプルコードは AI PRPD 分類器 ドキュメントをご参照ください。

タイプ名前説明
float32[3]noiseチャンネル別 Noise(非放電ノイズ)の logit score
float32[3]coronaチャンネル別 Corona 放電の logit score
float32[3]floatingチャンネル別 Floating 放電の logit score
float32[3]surfaceチャンネル別 Surface 放電の logit score

LevelTrigger.msg ( 未使用予定 )

メッセージタイプとして定義されていますが未使用予定であり、上記のトピック一覧には含まれません。

タイプ名前説明
float64decibelレベル値 (dB)

アクションリファレンス

BATCAM FX は、カメラのハードウェア ID を基準に次のアクションを生成します(ファームウェア v1.0.3c 以上)。

アクションアクションタイプ用途
/fx_{hardware_id}/setting_beamformingfx_stream_msgs/action/BeamformingSettingビームフォーミングパラメータの設定
/fx_{hardware_id}/setting_overlayfx_stream_msgs/action/OverlaySettingオーバーレイ画像生成パラメータおよびソースモードの設定

アクションを用いた設定の詳細な例は ROS アクションを用いた Beamforming・Overlay 設定(ベータ) ドキュメントをご参照ください。同じ設定は REST API でも可能です(FX API プレイグラウンド)。

BeamformingSetting.action

Goal、Result、Progress はいずれも BeamformingSetting メッセージタイプの setting フィールド 1 つで構成されます。

区分タイプ名前
GoalBeamformingSettingsetting
ResultBeamformingSettingsetting
ProgressBeamformingSettingsetting

BeamformingSetting.msg — 各フィールドの最小/最大/基準値は Beamforming パラメータ ドキュメントをご参照ください。

タイプ名前説明範囲(単位/ステップ)
boolautogainマイク自動増幅の使用可否。音の大きさに応じてカメラが自動的に Gain を決定True / False
float64gainマイク増幅値。autogain が False の場合のみ適用1 ~ 1000(1, 10, 100, 1000 のみ許容)
float64x_calカメラ映像とオーバーレイ画像の x 座標の誤差補正0 ~ 1(ステップ 0.01)
float64y_calカメラ映像とオーバーレイ画像の y 座標の誤差補正0 ~ 1(ステップ 0.01)
float64distance測定する騒音源までの距離。指定された距離でより精密なビームフォーミングを試行1 ~ 10(ステップ 1)
float64high_cut表示する最大周波数(ローパスフィルタ)。この値より上の音はフィルタリングされますlow_cut 超過 ~ 100,000 Hz(ステップ 100)
float64low_cut表示する最低周波数(ハイパスフィルタ)。この値より下の音はフィルタリングされます1,000 Hz ~ high_cut 未満(ステップ 100)
int32l_point_0Listening Point 0 のインデックス(40×30 グリッド)。3 つすべての指定が必要0 ~ 1199
int32l_point_1Listening Point 1 のインデックス0 ~ 1199
int32l_point_2Listening Point 2 のインデックス0 ~ 1199

Listening Point 間の最小距離制限など座標に関する制約は、Listening Point 座標 ドキュメントをご参照ください。REST API では同じ値が index_l フィールド(カンマ区切りの 3 つの値)として送信されます。

ターミナルの例:

Terminal window
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、Progress はいずれも OverlaySetting メッセージタイプの setting フィールド 1 つで構成されます。

区分タイプ名前
GoalOverlaySettingsetting
ResultOverlaySettingsetting
ProgressOverlaySettingsetting

OverlaySetting.msg — 各フィールドの最小/最大/基準値は Overlay パラメータ ドキュメントをご参照ください。

タイプ名前説明範囲(単位/ステップ)
boolenable_overlayオーバーレイ画像の出力可否。True の場合、RTSP および ROS に送信される画像にオーバーレイを表示True / False
boolenable_source_modeソース探知モード。オーバーレイがオンになっている場合のみ使用可能True / False
int32number_of_sources同時に追跡するソースの数(推奨は 3 個以下)1 ~ 5(ステップ 1)
int32average平均値を適用するビームフォーミングマップの数。ソース探知モードが有効な場合は適用されません0 ~ 10(ステップ 1)
float64thresholdソースと判断する最小強度値。ソース探知モードが有効な場合は適用されません0 ~ 120(ステップ 1)
float64rangeソースに対するオーバーレイ画像のサイズ。ソース探知モードが有効な場合は適用されません0 ~ 10(ステップ 0.1)

ターミナルの例:

Terminal window
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
}
}"

トラブルシューティング (Troubleshooting)

  • トピックが一覧に表示されない場合:

    • ホストの ROS_DOMAIN_ID がカメラの設定と一致しているか確認します。v1.0.3b 開発ファームウェアからカメラのデフォルト値は 123 であり、現在の値は GET /ros/domain(ファームウェア 1.0.3c 以上)で確認できます。(ROS Domain ID 設定

    • カメラとホストが同一ネットワークで通信可能か確認します。カメラの ROS 2 スタックは UDPv4 ベースの Fast DDS 設定を使用します。

    • ファームウェアが ROS 2 送信をサポートするバージョンかどうかを GET /setting/status で確認します(トピック送信は v1.0.3b 開発ファームウェアから、正式リリース v1.0.3 に含まれます)。

  • fx_stream_msgs メッセージタイプが見つからないというエラーが発生する場合:

    • fx-stream-msgs パッケージをビルドし、現在のターミナルで source ~/fx_ws/install/setup.bash を実行したか確認します。

    • ros2 interface show fx_stream_msgs/msg/Beamforming コマンドでタイプが認識されるか確認できます。

    • fx-stream-msgs は ROS 2 Humble の使用を前提としており、ROS 2 Jazzy (Ubuntu 24.04) 環境でのビルド・送受信テストにより検証されています。

  • gain 値が -1 として受信される場合:

    • カメラの自動増幅 (autogain) 機能が有効な場合の正常な動作です。固定の gain 値を使用するには、autogain を False に設定してから gain を指定してください(Beamforming パラメータ)。
  • 受信が遅延したり途切れたりする場合:

    • 全トピックを購読する場合、fx_stream_msgs トピックの合計基準で約 3.6 MB/s(image トピックを除く)の帯域幅が必要です。有線接続を使用し、必要なトピックのみを購読することを推奨します。
  • ROS Domain ID の変更直後にカメラの接続が切れる場合:

    • PATCH /ros/domain の設定が反映される間、カメラとの接続が一時的に切断されます。反映後に再度接続してください。

関連ドキュメント