跳转到内容

ROS Domain ID 设置

BATCAM FX ROS Domain ID 设置

1. 概述

BATCAM FX 基于 ROS 2 Humble 发布传感器数据,只有使用相同 ROS_DOMAIN_ID 的节点之间才能相互发现并通信。当需要在同一网络中分离运行多个 ROS 2 系统,或需要使 BATCAM FX 与所用环境的 Domain ID 保持一致时,请更改此设置。

2. 方法选择:确认固件版本

设置方法因固件版本而异。请先确认所用设备的固件版本。

固件版本设置方法备注
1.0.3c 以上REST API(第 3 项,推荐)官方支持的方法
低于 1.0.3c手动修改 systemd 服务文件(第 4 项)非官方方法 — 请务必阅读注意事项

固件版本可通过设备信息查询 API(GET /setting/status)的 firmware_version 字段确认。

Terminal window
curl -u admin:<password> "http://192.168.0.30/setting/status"
# 示例中的 192.168.0.30 请替换为实际 BATCAM FX 的 IP 地址。

响应示例:

{
"error": 0,
"result": {
"hardware_id": "3287162925128",
"sbrio_version": "1.0.14",
"firmware_version": "v1.0.3c"
}
}

💡 参考: BATCAM FX 的所有 REST API 均需要 HTTP Basic 认证。设备中默认预先设置了 adminuser 两个账户,出厂默认密码请务必更改后再使用。固件更新方法请参阅 BATCAM FX Web 软件更新BATCAM FX Shell 软件更新 文档。

3. 通过 REST API 进行设置(推荐,固件 1.0.3c 以上)

从 BATCAM FX 固件 1.0.3c 版本开始,可通过 REST API 设置 ROS Domain ID。请求/响应模式的详细信息以及实时测试,请参阅 BATCAM FX API 参考ros 标签。

方法路径说明请求正文
GET/ros/domain查询当前设置的 ROS Domain ID
PATCH/ros/domain更改 ROS Domain IDmultipart/form-data

PATCH /ros/domain 请求字段:

字段类型是否必填说明
domain_idinteger必填要设置的 ROS Domain ID

查询当前值

Terminal window
curl -u admin:<password> "http://192.168.0.30/ros/domain"

响应示例:

{
"error": 0,
"result": {
"domain_id": 123
}
}

更改值

Terminal window
curl -u admin:<password> -X PATCH "http://192.168.0.30/ros/domain" -F "domain_id=113"

响应示例:

{
"error": 0,
"result": {
"domain_id": 113
}
}

⚠️ 注意: 在设置生效期间,与摄像头的连接会短暂中断。设置后立即出现连接中断属于正常现象。

4. 旧版本手动设置(固件低于 1.0.3c,非官方)

当您所用环境的 ROS_DOMAIN_ID 不为 0 时,这是目前非官方支持的 ROS_DOMAIN_ID 设置方法。

固件低于 1.0.3c 的 BATCAM FX,或者在其内部运行的 ROS 2 选项中,均不具备添加 DOMAIN_ID 的功能。因此,需要修改用于创建并发布 ROS 2 Node 与 Topic 的 beamforming-camerad 执行服务文件。

⚠️ 注意: 该服务配置为 Restart=alwaysStartLimitAction=reboot,因此如果错误地修改服务文件,beamforming-camerad 可能会反复重启,进而导致摄像头重新启动。修改前请保留原始内容,并准确遵循下方示例的格式。此外,建议在更新固件之后再次确认设置是否原样保留。

前提条件

  • 必须能够通过 SSH 连接到 BATCAM FX。请将下方示例中的 192.168.50.11 替换为实际 BATCAM FX 的 IP 地址。

更改顺序

  1. 通过 ssh 登录 BATCAM FX

  2. 访问服务执行文件( vi、nano 等 )

  3. 在 Service 标签中添加 Environment

  4. 重新加载守护进程及服务文件

  5. 重启 Beamforming-camerad 或摄像头

更改详情

通过 SSH 登录 BATCAM FX。

Terminal window
ssh root@192.168.50.11
# 请根据您所用的环境更改 IP 地址后使用。

使用下方命令访问系统执行文件。 编辑器请使用 vi、nano 等您习惯的方式。

Terminal window
nano /lib/systemd/system/beamforming-camerad.service
# 或者
vi /lib/systemd/system/beamforming-camerad.service

请参考下方代码块,在 Service 标签内添加 Environment 值。示例中的 113 可指定为符合您所用环境的 ROS_DOMAIN_ID 值。

[Unit]
Description=Batcam FX Camera daemon
Wants=multi-user.target
After=systemd-networkd.service dbus-org.neard.service network.target nvargus-daemon.service setup-account.service
[Service]
## 需要添加的部分 — 可根据您所用的环境指定 ROS_DOMAIN_ID。
Environment=ROS_DOMAIN_ID=113
##
ExecStart=/bin/bash -c 'source /opt/ros/humble/local_setup.sh && systemctl restart nvargus-daemon && /opt/ros/humble/bin/beamforming-camerad'
Restart=always
StartLimitAction=reboot
RestartSec=5
TimeoutStopSec=30
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 15
# RuntimeMaxSec=86400
[Install]
WantedBy=multi-user.target

⚠️ 注意: systemd 单元文件不支持行尾注释。若在 Environment=ROS_DOMAIN_ID=113 行的后面附加 # 注释,注释也会被解析为值,导致设置无法生效,因此注释请务必写在单独的行中。

使用下方命令重新加载 systemd daemon。

Terminal window
systemctl daemon-reload

重启 Beamforming-camerad 或摄像头。

Terminal window
systemctl restart beamforming-camerad
# 或者
reboot

5. 确认设置

可通过两种方法确认设置是否已应用。

通过 REST API 确认(固件 1.0.3c 以上)

调用 GET /ros/domain,确认返回的 domain_id 是否与所设置的值一致。(请参阅第 3 项的查询示例)

在主机 PC 上通过 ROS 2 话题确认

在主机 PC 的 ROS 2 环境中设置与设备相同的 ROS_DOMAIN_ID 之后,确认话题列表中是否出现 BATCAM FX 的话题。

Terminal window
export ROS_DOMAIN_ID=113 # 指定为与设备上设置的值相同
ros2 topic list

正常应用的情况下,列表中会出现如下基于摄像头硬件 ID 的话题。

Terminal window
/fx_276730383020104/beamforming
/fx_276730383020104/image
/fx_276730383020104/lpoint_audio
/fx_276730383020104/prpd
/fx_276730383020104/ws_audio

话题名称中的硬件 ID(hardware_id)可通过设备信息查询 API(GET /setting/status)确认。各话题的消息规范请参阅 FX ROS 系统集成概述 文档。

6. 问题排查 (Troubleshooting)

  • 在主机上看不到设备话题时:

    • 确认主机与设备的 ROS_DOMAIN_ID 是否相同。设备的值可通过 GET /ros/domain(固件 1.0.3c 以上)或服务文件的 Environment 行确认。

    • 设备的 ROS 默认 DOMAIN_ID 为 123。如果是未另行更改的设备,请在主机上执行 export ROS_DOMAIN_ID=123 后再次确认。

  • REST API 调用以 401 失败时:

    • 确认 HTTP Basic 认证凭据(adminuser 账户)是否正确。
  • PATCH 之后摄像头连接立即中断时:

    • 在设置生效期间连接短暂中断属于正常现象。请稍后重新连接,并通过 GET /ros/domain 确认值。
  • 手动修改后服务反复重启或摄像头重新启动时:

    • 确认 Environment=ROS_DOMAIN_ID=<值> 行中是否存在行尾注释或拼写错误,修改后请重新执行 systemctl daemon-reload

7. 相关文档