FX ROS 固件 BF/Overlay 参数设置(测试版)
⚠️ 测试版: 本文档介绍的是测试版功能,其接口和内容可能会随固件更新而变更。各版本的变更内容请参阅固件发布说明。
概述
BATCAM FX 可通过 ROS 2 的 Action 接口更改波束成形(Beamforming)和叠加(Overlay)设置。本文档介绍这两个设置 Action 的名称与字段,以及在终端(CLI)和 Python 代码中的调用方法。
各 Action 所处理的值与 REST API(/beamforming/setting、/beamforming/overlay)使用相同的取值体系。REST API 规格可在 API Playground (FX) 中确认。
消息类型的定义及格式请参阅 ROS Integration 文档或 SMI OSS - fx-stream-msgs 代码仓库。
前提条件
-
固件版本:本文档中的设置 Action(setting action)自 FX 固件 v1.0.3c(2025.05.27)起开始支持。基于 ROS 2 的数据发送本身自 v1.0.3b 开发固件起开始支持。详细内容请参阅固件发布说明。
-
ROS 2 环境:BATCAM FX 的 ROS 2 功能基于 ROS 2 Humble Hawksbill。
fx-stream-msgs包以在 ROS 2 Humble 中使用为前提,并已在 Python 3.10.16、ROS 2 Jazzy (Ubuntu 24.04) 环境中完成构建与验证。 -
fx_stream_msgs包:Action 类型定义由 fx-stream-msgs 代码仓库提供。必须在执行命令的环境的工作空间中构建并 source 该包,才能使用下述示例中的类型。 -
网络及 ROS_DOMAIN_ID:必须处于与相机相同的网络中,并使用与相机相同的
ROS_DOMAIN_ID。相机的 Domain ID 设置方法请参阅 ROS Domain ID 文档。
Action 名称与 hardware_id
BATCAM FX 会以相机的硬件 ID 为基准,创建以下两个设置 Action。
| Action 名称 | Action 类型 | 设置对象 |
|---|---|---|
/fx_{hardware_id}/setting_beamforming | fx_stream_msgs/action/BeamformingSetting | 波束成形参数 |
/fx_{hardware_id}/setting_overlay | fx_stream_msgs/action/OverlaySetting | 叠加参数 |
在与相机相同的 ROS 2 网络中执行 ros2 action list,即可从 Action 名称中确认 {hardware_id}。
ros2 action list
# 输出示例/fx_276730383020104/setting_beamforming/fx_276730383020104/setting_overlay本文档的示例以 hardware_id 为 276730383020104 的相机为基准编写。
各 Action 的 Goal 由 setting 一个字段构成,其中包含全部设置值并进行发送。Goal 中未指定的字段将以类型默认值(0、False)发送,因此建议填写所有字段后再发送。Result 中会以与 Goal 相同的 setting 结构返回已应用的设置值;Action 规格中还定义了相同结构的 Progress(反馈)项。
Beamforming 设置
/fx_{hardware_id}/setting_beamforming
设置波束成形参数的值。使用与 REST API 的 GET/PATCH /beamforming/setting 端点相同的取值体系,仅 Listening Point 的表示方式不同。在 REST 中通过 index_l 一个字段发送以逗号分隔的 3 个值,而在 ROS 中则分为 l_point_0 ~ l_point_2 三个字段。
字段摘要
| 字段 | 类型 | 单位 | 范围 | 步长 / 允许值 | 说明 |
|---|---|---|---|---|---|
autogain | bool | - | False / True | Boolean | 是否使用麦克风自动增益。为 True 期间不会使用 gain 值。 |
gain | float64 | - | 1 ~ 1000 | 仅可使用允许值 1、10、100、1000 | 麦克风增益值。如需更改,必须先将 autogain 设置为 False。 |
x_cal | float64 | - | 0 ~ 1 | 步长 0.01 | 相机图像与叠加图像的 x 坐标误差校正。 |
y_cal | float64 | - | 0 ~ 1 | 步长 0.01 | 相机图像与叠加图像的 y 坐标误差校正。 |
distance | float64 | - | 1 ~ 10 | 步长 1 | 到待测噪声源的距离。 |
high_cut | float64 | Hz | 大于 low_cut ~ 100,000 | 步长 100 | 要显示的最高频率。作为低通滤波器,高于该值的声音将被滤除。 |
low_cut | float64 | Hz | 1,000 ~ 小于 high_cut | 步长 100 | 要显示的最低频率。作为高通滤波器,低于该值的声音将被滤除。 |
l_point_0 ~ l_point_2 | int32 | - | 0 ~ 1199 | 步长 1 | Listening Point 索引。必须全部指定 3 个。坐标体系请参阅 Listening Point 坐标 文档。 |
各参数的详细说明及最小值/最大值/基准值请参阅 Beamforming Parameters 文档。
终端示例
ros2 action send_goal /fx_276730383020104/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}}"成功时将按如下流程输出,并以 SUCCEEDED 状态结束。
Waiting for an action server to become available...Sending goal:...Goal accepted with ID: ...Result:setting: ...Goal finished with status: SUCCEEDEDResult 的 setting 中会以与 Goal 相同的结构返回已应用到相机的设置值。
应用确认
-
可通过 REST API 的
GET /beamforming/setting查询当前保存的波束成形设置值。规格请参阅 API Playground (FX)。 -
在 ROS 中订阅
/fx_{hardware_id}/beamforming话题后,可从实时波束成形数据中确认gain值等。启用自动增益时,所发布的gain值将返回最后设置的值或-1。
Overlay 设置
/fx_{hardware_id}/setting_overlay
设置 Full View 模式的叠加图像生成参数以及声源探测模式。叠加功能自 BATCAM FX 固件 1.0.3 版本以上开始支持,并使用与 REST API 的 GET/PATCH /beamforming/overlay 端点相同的字段构成。
字段摘要
| 字段 | 类型 | 单位 | 范围 | 步长 / 允许值 | 说明 |
|---|---|---|---|---|---|
enable_overlay | bool | - | False / True | Boolean | 是否输出叠加图像。设置为 True 时,通过 RTSP 及 ROS 传输的图像上会显示叠加。 |
enable_source_mode | bool | - | False / True | Boolean | 是否使用声源探测模式。需在叠加处于开启状态时才会运行,并根据 number_of_sources 的值启用单声源或多声源模式。 |
number_of_sources | int32 | - | 1 ~ 5 | 步长 1 | 同时追踪的声源数量。最多可指定 5 个,但建议不超过 3 个。 |
average | int32 | - | 0 ~ 10 | 步长 1 | 用于取平均值的波束成形图数量。值越高结果越平滑。启用声源探测模式时不生效。 |
threshold | float64 | - | 0 ~ 120 | 步长 1 | 判定为声源的最小强度值。值越高则仅显示强度更大的声源。启用声源探测模式时不生效。 |
range | float64 | - | 0 ~ 10 | 步长 0.1 | 针对声源的叠加图像大小。值越高叠加越大。启用声源探测模式时不生效。 |
各参数的详细说明及最小值/最大值/基准值请参阅 Overlay Parameters 文档。
终端示例
ros2 action send_goal /fx_276730383020104/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}}"执行结果的流程与 Beamforming 设置相同。成功时以 SUCCEEDED 状态结束,并在 Result 的 setting 中返回已应用的叠加设置值。
应用确认
-
可通过 REST API 的
GET /beamforming/overlay查询当前的叠加设置值。规格请参阅 API Playground (FX)。 -
将
enable_overlay设置为 True 后,通过 RTSP 及 ROS 传输的图像上会显示叠加,因此可在视频流中直接确认。
在代码中调用(Python)
在实际集成时,多数情况下是在代码中调用 Action,而非使用终端 CLI。以下是使用 rclpy 调用 Beamforming 设置 Action 的完整示例。Overlay 设置也只需更改 Action 名称、类型(OverlaySetting)和字段,即可以相同结构进行调用。
import rclpyfrom rclpy.action import ActionClientfrom rclpy.node import Node
from fx_stream_msgs.action import BeamformingSetting
HARDWARE_ID = '276730383020104' # 更改为通过 ros2 action list 确认到的值
class BeamformingSettingClient(Node): def __init__(self): super().__init__('beamforming_setting_client') self._client = ActionClient( self, BeamformingSetting, f'/fx_{HARDWARE_ID}/setting_beamforming', )
def send_goal(self): goal = BeamformingSetting.Goal() goal.setting.autogain = False goal.setting.gain = 1.0 goal.setting.x_cal = 0.0 goal.setting.y_cal = 0.0 goal.setting.distance = 5.0 goal.setting.high_cut = 60000.0 goal.setting.low_cut = 25000.0 goal.setting.l_point_0 = 580 goal.setting.l_point_1 = 20 goal.setting.l_point_2 = 290
self._client.wait_for_server() return self._client.send_goal_async(goal)
def main(): rclpy.init() node = BeamformingSettingClient()
goal_future = node.send_goal() rclpy.spin_until_future_complete(node, goal_future) goal_handle = goal_future.result()
if not goal_handle.accepted: node.get_logger().error('Goal rejected') else: result_future = goal_handle.get_result_async() rclpy.spin_until_future_complete(node, result_future) result = result_future.result().result node.get_logger().info(f'已应用的设置: {result.setting}')
node.destroy_node() rclpy.shutdown()
if __name__ == '__main__': main()问题排查(Troubleshooting)
-
Action 未出现在
ros2 action list中时:-
确认相机的固件是否为 v1.0.3c 以上。(固件发布说明)
-
确认执行环境的
ROS_DOMAIN_ID是否与相机相同。(ROS Domain ID) -
确认是否已连接到与相机相同的网络。
-
-
出现找不到
fx_stream_msgs类型的错误时:- 确认构建了
fx-stream-msgs包的工作空间是否已在当前 shell 中完成 source。
- 确认构建了
-
gain的更改未生效时:-
autogain为 True 期间不会使用gain值。请先将autogain设置为 False。 -
固件 v1.0.3(2025.10.04)版本中包含移除 Gain 设置及停用 Auto Gain 的变更。所使用固件版本的行为请查看固件发布说明。
-
-
声源探测模式无法运行时:
enable_source_mode仅在enable_overlay为 True 时才会运行。
-
average/threshold/range的更改未生效时:- 这三个值在声源探测模式(
enable_source_mode)启用期间不会生效。
- 这三个值在声源探测模式(
-
Listening Point 设置失败时:
-
l_point_0~l_point_2必须在 0 ~ 1199 范围内全部指定 3 个。坐标体系请参阅 Listening Point 坐标 文档。 -
在使用相同取值体系的 REST API 中,对于错误的 L Point 参数会返回
lpoint parameter error。
-
相关文档
-
ROS Integration — 消息·Action 规格全文
-
ROS Domain ID — ROS_DOMAIN_ID 设置方法
-
Beamforming Parameters — 波束成形参数详情
-
Overlay Parameters — 叠加参数详情
-
Listening Point 坐标 — L Point 索引坐标体系
-
固件发布说明 — 各版本支持的功能
-
API Playground (FX) — REST API 参考
-
SMI OSS - fx-stream-msgs — 消息/Action 类型定义代码仓库