概述
Lixel 系列是一系列手持三维扫描设备。Lixel OpenAPI 是设备软件对外提供的一组开放通信接口。通过这组接口,你可以远程控制 Lixel 设备、实时获取设备数据,并在此基础上开发与设备集成的应用程序。
本篇帮你建立整体认识。想直接上手,选择你的开发语言:Python 快速开始 或 C++ 快速开始。
OpenAPI 能做什么
- 控制设备:启停扫描、配置参数、重启或关机、格式化存储、启用文件共享。
- 实时取数:订阅实时点云、实时位姿、设备状态、系统异常;通过视频流获取相机画面。
- 管理数据:管理工程列表、控制点与测量点,对已录数据做解包处理。
- 配置定位:设置 RTK / Ntrip 参数,获取卫星定位状态。
协议架构
设备与客户端之间通过运行在设备端的 MQTT Broker 通信。所有业务消息以 Protobuf 序列化后作为 MQTT 负载收发(心跳消息例外,采用 JSON 文本)。实时相机视频流则通过设备内置的 RTSP 服务传输。
┌────────────┐ 请求 (request) ┌──────────────┐
│ │ ───────────────────► │ │
│ 客户端 │ │ Lixel 设备 │
│ (你的应用) │ ◄─────────────────── │ (MQTT Broker)│
│ │ 响应/上报 (response/ │ (RTSP Server)│
└────────────┘ report) └──────────────┘
Topic 采用三段式命名:
lixel/<domain>/<type>/<name>
domain:业务域,当前主要为application。type:消息方向。request:客户端 → 设备(请求)response:设备 → 客户端(对请求的应答)report:设备 → 客户端(主动上报)
name:具体功能,如device_info、modeling。
典型交互有两种模式:
- 请求-响应:客户端向
.../request/xxx发布请求,订阅.../response/xxx等待应答。 - 订阅上报:客户端订阅
.../report/xxx,被动接收设备主动推送的数据。
关键约定
| 约定 | 说明 |
|---|---|
| 传输协议 | MQTT / MQTTS,视设备型号而定 |
| 消息负载 | Protobuf 二进制(心跳为 JSON 文本) |
| Proto 包名 | openapi.aiot_msgs |
| 鉴权方式 | 请求消息头携带 OpenAPI Key,由 XGRIDS 提供 |
| 视频流 | RTSP,扫描开始后推送相机画面 |
| 开发方式 | Python 或 C++,两者共用同一套 MQTT 主题和 proto 定义 |
| 版本 | 文档版本 v1.1.0 对应示例工程 Lixel_OpenAPI 的发布标签 1.1.0(该版本把 Python 移入 python/、并新增 C++ 客户端)。设备的协议版本是另一回事:设备心跳里的 ProtocolVersion 在 Lixel L2Pro 固件 V3.2.1 上实测为 3.0.0 |
注:接口清单与消息字段以 OpenAPI 公开的 proto(示例工程中的
proto/openapi/aiot_msgs.proto)为准。设备端内部的 proto 定义比公开的多,多出的部分不在本文档范围内。
文档导航
协议本身与开发语言无关,以下共用章节对 Python 和 C++ 都适用:
| 共用章节 | 内容 |
|---|---|
| 连接与鉴权 | USB / Wi-Fi / 蓝牙配网,MQTT/MQTTS 连接参数,OpenAPI Key |
| 消息模型与编解码 | Topic 规则、Proto 编译、JSON 与 Protobuf 互转 |
| 接口清单 | 状态监控、设备管理、扫描建图、点位、工程、RTK/Ntrip、数据处理 |
| 实时数据 | 实时点云解压、实时位姿、RTSP 视频流 |
| 项目文件访问 | 通过文件共享访问工程文件 |
| 错误码 | 错误码分类与含义 |
按开发语言选择入口:
| 入口 | 内容 |
|---|---|
| Python | 图形界面 OpenAPI-XPanel、18 个示例脚本、可复用客户端(Linux / Windows) |
| C++ | 客户端库与 18 个命令行示例(仅 Linux) |