Skip to content

PythonSDK

Luke edited this page May 9, 2026 · 4 revisions
image

概述

SimpleSensorSync Python是一个多传感器同步监控系统,支持通过网络(UDP)或串口(USB)连接传感器设备,实现实时数据采集、触发监控和时间同步。

系统架构

┌─────────────────────────────────────────────────────────────┐
│                      Synchronizer                           │
│                   (主协调器,统一启动/停止)                    │
└─────────────────────┬─────────────────┬─────────────────────┘
                      │                 │
          ┌───────────▼────────┐   ┌─────▼─────────┐
          │    NetManager      │   │  UsbManager   │
          │   (UDP 网络)        │   │  (串口)       │
          └───────────┬────────┘   └──────┬────────┘
                      │                    │
          ┌───────────▼────────────────────▼────────┐
          │                 Ptp                      │
          │         (PTP 精确时间同步协议)            │
          └──────────────────┬──────────────────────┘
                             │
          ┌──────────────────▼──────────────────────┐
          │               data.py                   │
          │    (解析 trigger/IMU/GPS/log 数据)      │
          └──────────────────┬──────────────────────┘
                             │
          ┌──────────────────▼──────────────────────┐
          │              Messenger                  │
          │       (ZeroMQ 发布/订阅消息系统)         │
          └───────────────────────────────────────┘

支持的传感器设备

设备 ID 名称
BIT 0 IMU_1
BIT 1 IMU_2
BIT 2 CAM_1
BIT 3 CAM_2
BIT 4 CAM_3
BIT 5 CAM_4
BIT 6 LASER
BIT 7 GPS

安装依赖

cd python
pip install -r requirements.txt
# 或使用 uv
uv sync

主要依赖:

  • pyzmq - ZeroMQ 消息队列
  • pyserial - 串口通信
  • PyQt6 - GUI 框架

使用方式

方式一:图形界面(推荐)

cd python
python gui_main.py

界面功能:

  • 设置菜单 → 连接配置:配置网络或串口参数
  • 监控菜单 → 开始/停止监控 (F5/F6)
  • 左侧面板:8个设备触发状态实时显示
  • 右侧图表:触发信号可视化

方式二:命令行模式

编辑 main.py 修改连接参数后运行:

synchronizer.set_net_link("192.168.192.188", 8888)
python main.py

数据格式

触发数据 (trigger)

{"f": "t", "t": 1234567890123456, "s": 0xFF}
  • f: 功能码 "t" 表示触发
  • t: 微秒时间戳
  • s: 8位状态掩码,标识哪些设备触发

IMU 数据

{"f": "imu", "t": 1234567890123456, "d": [ax, ay, az, gx, gy, gz, temp], "q": [qx, qy, qz, qw]}

GPS 数据 (NMEA GNGGA)

{"f": "GNGGA", "t": 1234567890123456, "d": "...", "pps": 1234567890000000}

配置文件结构

配置文件保存于用户目录:~/.config/SimpleSensorSync/config.json

{
    "connection_type": "network",
    "net_ip": "192.168.192.188",
    "net_port": 8888,
    "serial_device": "/dev/ttyUSB0",
    "serial_baudrate": 115200
}

API 参考

Synchronizer

from infinite_sense_core.infinit_sense import Synchronizer

sync = Synchronizer()

# 配置网络连接
sync.set_net_link("192.168.192.188", 8888)

# 或配置串口连接
sync.set_usb_link("/dev/ttyUSB0", 115200)

# 设置传感器
sync.use_sensor(sensor_object)

# 启动/停止
sync.start()
sync.stop()

Messenger (发布/订阅)

from infinite_sense_core.message import Messenger

msg = Messenger.get_instance()

# 订阅主题
msg.sub("imu_1", callback_function)
msg.sub("cam_1", callback_function)

# 发布主题
msg.pub("topic_name", "message_content")

TriggerProcessor

from infinite_sense_core.data import get_trigger_processor, TriggerEvent

processor = get_trigger_processor()

def on_trigger(event: TriggerEvent):
    print(f"触发设备: {event.triggered_devices}")
    print(f"时间戳: {event.timestamp_str}")

processor.add_callback(on_trigger)

版本信息

Clone this wiki locally