跳到主要内容

远程模式

远程模式适用于传感器连接在算力板上的场景。开发机通过网络访问算力板服务,并使用传感器序列号和算力板的 mac_addr 创建远程 Sensor 实例。

准备工作​

  • 将传感器连接到算力板,并确认算力板上的传感器服务已经启动。
  • 确保开发机与算力板网络互通,并能够发现 EzROS/DDS 服务。
  • 获取算力板的 master 服务名,通常为 master_{mac_addr},例如 master_000000000000。使用时请替换为实际服务名。
  • 运行带界面的远程示例时需要安装 xensesdk[viz]。

IP 地址用于网络连通和设备发现,不是 Sensor.create() 的直接参数。创建远程传感器时需要传入 master 服务名中的 mac_addr 部分。

使用 ezros 命令行工具​

安装 XenseSDK 的 Python Wheel 后会同时提供 ezros 命令行工具。它可用于扫描 EzROS 节点、查看 Xense master 的版本和传感器信息、调用 service,以及监听基础 topic。

  • 配置远程模式时,可先运行 ezros -a 查看全部节点,或使用 ezros -i 快速确认 master 服务和已连接的传感器。
  • 可以通过 ezros service -n master_{mac_addr} -c scan_sensor_sn 直接测试传感器查询服务。
  • 运行 ezros --help 可查看完整参数说明。

查询远程传感器​

调用 master 服务的 scan_sensor_sn action,获取连接在该算力板上的传感器:

from xensesdk import call_service

master_service = "master_000000000000" # 替换为实际服务名
serial_map = call_service(
master_service,
"scan_sensor_sn",
timeout_sec=1,
)

if not serial_map:
raise RuntimeError("未发现远程传感器")

print(serial_map)

返回结果包含可用传感器的序列号。连接多个传感器时,请从结果中选择需要使用的序列号,不要默认使用第一项。

创建远程传感器​

从 master 服务名中取出 mac_addr,并与目标传感器序列号一起传入 Sensor.create():

from xensesdk import Sensor

serial_number = "OG000001" # 替换为 serial_map 中的目标序列号
mac_addr = master_service.split("_", 1)[1]
sensor = Sensor.create(serial_number, mac_addr=mac_addr)

读取数据​

远程实例与本地实例使用相同的 selectSensorInfo() 接口:

from time import sleep

try:
while True:
rectify, depth = sensor.selectSensorInfo(
Sensor.OutputType.Rectify,
Sensor.OutputType.Depth,
)
print("rectify:", rectify.shape, "depth:", depth.shape)
sleep(0.02)
except KeyboardInterrupt:
pass
finally:
sensor.release()

如果 call_service() 返回空结果,请先检查 master 服务名、算力板服务状态和网络连通性。具体服务名和 action 由算力板固件提供,调用其他远程服务前请先通过 EzROS 查询可用服务。

远程模式完整示例查看远程传感器发现、连接、多模态数据读取和可视化界面的完整代码。
打开 GitHub 示例 ↗