HiPNUC GNSS/INS 组合导航指令与编程手册
Rev 2.0
适用于 HiPNUC GNSS/INS 组合导航产品
版本与适用范围
本手册主要面向当前在售的 HiPNUC HIxxN 系列 GNSS/INS 组合导航产品。不同型号的物理接口和可选功能可能不同,请以具体产品规格书和交付配置为准。旧 HI32 产品的指令、寄存器和部分数据字段不能无条件套用本手册,应以适用的交付资料为准。
首次接入或排查问题时,可通过 LOG VERSION 查询产品名称和固件版本。
| 接口 | 数据与协议 | 适用说明 |
|---|---|---|
| 串口(RS-232 或 RS-422) | HI81、GGA、RMC、RTCM3、ASCII 配置命令 | 物理电平和端口数量以具体型号为准 |
| 以太网 | HI81、GGA、RMC、ASCII 配置命令 | 仅适用于配有以太网接口的型号 |
| CAN | SAE J1939 | CAN 波特率和节点地址可配置 |
| PPS/SYNC | PPS 输出 | 引脚、电平和时序指标以具体型号规格书为准 |
快速接入
连接 COM1
- 按产品规格书确认供电、COM1 电气接口、接线和天线连接。
- 将接收端设置为
115200 bps、8N1,即 8 个数据位、无校验、1 个停止位。 - 上电后直接接收 COM1 数据。产品默认输出 HI81 二进制数据,周期为
0.01 s(100 Hz)。
验证 HI81 数据
接收端应按帧头 0x5A 0xA5 搜索数据帧,再根据数据域长度取出完整帧并校验 CRC。通信接入成功应同时满足:
- 能够持续收到 CRC 正确的数据帧;
- 数据域中包含标签为
0x81的 HI81 数据; - 帧周期约为 10 ms。
ins_status 未进入组合导航状态不代表通信失败。完成通信验证后,再根据 HI81 数据定义和后续状态说明检查安装、天线、GNSS 定位及组合导航状态。
接入其他协议
GGA、RMC、RTCM3 和 J1939 按实际应用配置。相关命令、字段和验证方法见后续协议章节;快速接入不修改设备的默认输出配置。
文档变更历史
| 版本 | 日期 | 作者 | 变更内容 |
|---|---|---|---|
| V2.0 | 2026年9月13日 | HiPNUC | 重构适用范围、快速接入、差分数据与协议说明 |
| V1.0 | 2023年10月1日 | HiPNUC | 初始版本 |
安装与坐标系
机体系
本手册使用右手直角坐标系描述设备机体系(b 系):Y 轴指向载体前方,X 轴指向载体右侧,Z 轴指向上方。按默认方向安装时,b 系与产品外壳上的 X / Y / Z 坐标标识一致;按其他水平方向安装时,用下文的安装方向码声明外壳箭头在载体上的指向,设备据此把输出对齐到载体。
设备、天线和载体之间应刚性固定,运行中相对位置和方向不得变化;天线杆臂应测量到天线相位中心。
HI81 的 ins_lon、ins_lat 和 ins_msl 表示 IMU 原点的组合导航位置。GGA、RMC 的位置来源见对应消息说明。
导航系
组合导航工作模式下导航系固定为东北天(ENU):X 轴指东、Y 轴指北、Z 轴指天。vel_enu 和 acc_enu 均按东、北、天顺序输出,航向以真北为 0°、顺时针为正。输出数据轴向固定为右-前-上,CONFIG IMU COORD 只接受 0,LOG USRCONFIG 读回 COORD=0。
ENU 下的欧拉角采用 3-1-2(Z-X-Y)旋转顺序,即依次为航向、俯仰、横滚。四元数表示机体系到导航系的旋转,顺序为 W、X、Y、Z。
水平安装方向(HIxxN)
HIxxN 水平安装时,用 CONFIG IMU URFR <CODE> 声明外壳上印的 X、Y 箭头分别指向载体的哪个方向,Z 箭头保持向上。方向以载体为准:前 = 车头方向,右 = 驾驶员的右手边。
| 方向码 | X 箭头指向 | Y 箭头指向 |
|---|---|---|
24 | 右(默认) | 前 |
304 | 前 | 左 |
214 | 后 | 右 |
134 | 左 | 后 |
配置后保存并重启,再读回确认:
CONFIG IMU URFR 24
SAVECONFIG
REBOOT
LOG USRCONFIG双天线基线与杆臂设置
A 为定位主天线,B 为双天线定向天线,天线接口与 ANTA、ANTB 坐标不得交换。ANTA 和 ANTB 分别表示 A、B 天线相位中心相对 IMU 原点的位置矢量,坐标采用设备机体系(安装方向修正后的载体右、前、上:X 向右、Y 向前、Z 向上),单位为米。双天线基线向量为 ANTB - ANTA。
设置 A 天线杆臂:
SETBASELINE ANTA <X,Y,Z>
设置 B 天线杆臂:
SETBASELINE ANTB <X,Y,Z>
参数必须使用逗号分隔,不能包含空格。每个天线杆臂的长度不得超过 1000 m,双天线基线长度应为 0.05–1000 m。
例如,A、B 天线相对 IMU 的坐标分别为 (-1.5, -1.2, -0.3) 和 (1.5, -1.2, -0.3):
SETBASELINE ANTA -1.5,-1.2,-0.3
SETBASELINE ANTB 1.5,-1.2,-0.3
SAVECONFIG
REBOOT设备重启后,发送 LOG INSCONFIG,确认返回的 ANTA 和 ANTB 与实际安装一致。准确的杆臂参数可减小载体转动时天线位置与 IMU 位置不同所引入的误差。
杆臂也可通过寄存器读写:ANTA 的 X / Y / Z 位于 0x03D0 / 0x03D2 / 0x03D4,ANTB 位于 0x03D6 / 0x03D8 / 0x03DA,每个值为 IEEE-754 单精度浮点数的 32 位位模式,单位为米。J1939 按配置 J1939 逐个写入,保存并重启后生效。单个值的绝对值超过 1000 m 时写入被拒绝;逐个写入时不检查两根天线的间距,写入前由主机确认间距不小于 0.05 m。CHCenter 配置对话框的「安装设置」页可直接读写杆臂。

常用操作
设备使用 ASCII 配置命令。每条命令必须以回车换行 \r\n 结束。命令执行成功通常返回 OK;ERR 或以 ERROR 开头的文本均表示失败。通信参数切换、重启或超时时,应以读回和有效数据作为最终验证。
命令总览
| 命令 | 用途 |
|---|---|
REBOOT | 重启设备 |
LOG | 查询信息或控制指定串口的数据输出 |
CONFIG | 配置组合导航工作参数 |
UNLOGALL | 关闭当前串口的全部周期消息 |
SAVECONFIG | 保存需要长期保留的配置 |
FRESET | 恢复默认用户配置 |
SETBASELINE | 设置 A、B 天线杆臂 |
SERIALCONFIG | 设置指定串口的波特率 |
LOG 和 SERIALCONFIG 可在命令后加入目标端口,例如 LOG COM2 COMCONFIG 或 SERIALCONFIG COM2 460800。省略 COMx 时作用于命令所在串口;可用端口以具体型号为准。
重启设备
发送 REBOOT 后,设备立即重启,作用等同于重新上电。需要长期保存的参数应先执行 SAVECONFIG。
查询与控制串口输出
暂停或恢复数据输出
LOG ENABLE:恢复命令所在串口的数据输出;LOG DISABLE:暂停命令所在串口的数据输出。
这两个命令只控制当前运行时的端口输出,不修改其他串口的配置。
查询版本
发送 LOG VERSION 查询产品名称和固件版本。PNAME、APP_VER 和 BL_VER 分别表示产品名称、应用固件版本和 Bootloader 版本。返回内容还可能包含序列号、编译日期等信息,接收程序不应依赖固定字段数或固定行数。
查询串口配置
发送 LOG [COMx] COMCONFIG 查询当前或指定串口的波特率和消息周期。返回的 ONTIME 单位为毫秒,例如:
COM=COM1
BAUD=115200
MSG=HI81, ONTIME=10设备可能继续列出该端口支持的其他消息。
查询双天线配置
发送 LOG INSCONFIG 查询 A、B 天线杆臂。主要字段为:
ANTA=0.000,0.000,0.200
ANTB=0.000,1.000,0.200返回内容可能包含其他配置字段,接收程序不应依赖固定字段数或固定行数。
配置周期消息
格式:LOG [COMx] <MSG> ONTIME <PERIOD>。
| 参数 | 说明 |
|---|---|
MSG | HI81、GGA 或 RMC |
PERIOD | 输出周期,单位为秒;统一使用范围为 0–32.767 s,设为 0 时关闭该消息 |
常用示例:
LOG HI81 ONTIME 0.01
SAVECONFIG上例将当前串口的 HI81 周期设为 10 ms(100 Hz)。GGA、RMC 通常使用 0.1 或 1 秒周期。请根据消息长度、各消息周期和串行数据格式,自行核算全部启用消息的总带宽,并在端口波特率允许范围内留出余量。OK 仅表示配置已接受,不保证实际输出周期;带宽不足或发送拥塞时可能跳过周期消息。
配置组合导航工作模式
格式:CONFIG MODEL <MODEL>。
MODEL | 说明 |
|---|---|
CAR | 车载模式,启用车辆运动约束;出厂默认 |
SHIP | 船载模式 |
PLANE | 飞行器模式,不使用车辆运动约束 |
配置后保存并重启:
CONFIG MODEL CAR
SAVECONFIG
REBOOT配置 NTRIP
仅具备受支持网络接口或配套 DTU 的型号可以直接使用 NTRIP。接口接线、网络接入方式和配套设备以具体产品规格书及交付配置为准。
格式:
CONFIG NTRIP <SERVER> <PORT> <MOUNTPOINT> <USERNAME> <PASSWORD>| 参数 | 说明 |
|---|---|
SERVER | CORS/NTRIP 服务地址,可以是域名或 IP 地址 |
PORT | 服务端口 |
MOUNTPOINT | 挂载点 |
USERNAME | 账号用户名 |
PASSWORD | 账号密码 |
凭据安全
LOG NTRIPCONFIG 的返回内容可能包含用户名和密码。保存终端日志、截图或请求技术支持前,请先删除凭据信息。
示例中的地址和账号仅用于说明格式:
CONFIG NTRIP caster.example.com 2101 MOUNT1 demo_user demo_password
SAVECONFIG
REBOOT重启后发送 LOG NTRIPCONFIG 读回服务器、端口、挂载点和账号配置,再通过 HI81 中的 GNSS 定位状态确认是否进入 RTK。进入 RTK 所需时间取决于天线环境、差分服务、网络质量和基准站距离。
关闭当前串口的全部周期消息
UNLOGALL 将命令所在串口的全部周期消息设为不输出,包括默认 HI81。该命令不影响其他串口;需要掉电保持时,在命令后执行 SAVECONFIG。
保存配置
需要长期保留的配置在完成后执行 SAVECONFIG。
只有明确要求重启生效的设置才需要继续执行 REBOOT。
恢复默认配置
恢复前记录配置
FRESET 会用默认值覆盖用户配置。执行前记录所需的杆臂、网络、输出和总线配置;终端日志中的 NTRIP 凭据应先做脱敏处理。
FRESET 仅用于常规排查无法恢复的配置问题:
- 记录必要配置后发送
FRESET。 - 等待设备重新启动;若连接未恢复,重新上电。
- 使用 COM1、
115200 bps、8N1重新连接,确认持续收到 100 Hz HI81。 - 读回配置,恢复实际应用所需参数,并重新验证导航与通信数据。
若重启后部分配置未恢复默认(例如 HI81 没有输出),不要反复发送 FRESET:按第 4 步手动设置缺失的项(例如 LOG HI81 ONTIME 0.01),再执行 SAVECONFIG。
修改串口波特率
可使用 115200、460800 和 921600:
SERIALCONFIG [COMx] <BAUD>切换步骤:
- 发送
LOG [COMx] COMCONFIG记录目标串口的当前配置。 - 发送
SERIALCONFIG [COMx] <BAUD>。如果修改的是命令所在串口,收到OK后将主机切换到新波特率。 - 在仍可通信的串口发送
SAVECONFIG。 - 发送
LOG [COMx] COMCONFIG,确认返回的BAUD与目标值一致;再在目标串口验证有效数据。
串口与网络协议
简介
串口和适用型号的网络接口可传输 NMEA 0183 ASCII 消息和 HiPNUC 二进制消息。两类消息可以在同一端口输出,接收端应分别按 $ 和 0x5A 0xA5 识别帧起始位置。
传输接口
- RS-232 和 RS-422 使用相同的串行数据格式。设备与接收端必须使用相同的波特率;默认波特率为 115200 bps。
- 部分型号配有以太网接口并通过 DHCP 获取 IP 地址。默认数据连接为 TCP,端口为 5944;连接建立后,命令和数据格式与串口相同。具体网络能力以产品规格书和交付配置为准。
NMEA 消息(ASCII)
NMEA 消息以 $ 开始,以 * 和两位十六进制校验和结束,最后发送回车换行 0x0D 0x0A:
$<Talker><Type>,<Field1>,<Field2>,...*<Checksum><CR><LF>| 字段 | 字段说明 |
|---|---|
$ | 起始符,ASCII 码 0x24 |
Talker | 两字符发送者标识;当前产品默认使用 GP。接收端应按消息类型识别数据,不应据此限制卫星系统 |
Type | 三字符消息类型,本手册公开 GGA 和 RMC |
, | 字段分隔符,ASCII 码 0x2C;空字段仍保留分隔符 |
* | 数据与校验和的分隔符 |
Checksum | $ 与 * 之间全部字符逐字节异或的结果,以两位大写十六进制 ASCII 表示 |
<CR><LF> | 终止符,ASCII 码 0x0D 0x0A |
NMEA 消息列表
| NMEA 协议 | 描述 | 数据来源 |
|---|---|---|
| GGA | 定位数据、UTC 时间、定位质量和参与定位的卫星数 | 定位结果 |
| RMC | 时间、位置、地面速度和地面航向 | 定位与速度结果 |
GGA 和 RMC 的位置来源可能随产品实现而不同,可来自 GNSS 天线位置或组合导航结果。需要稳定获取以 IMU 原点为参考的组合导航位置、速度和姿态时,请解析 HI81。
外部时间发生变化时,时间字段可能暂时无效;接收端应持续检查字段有效性,确认新历元后再使用绝对时间。
GGA
接收机的时间、位置和定位相关数据。
定位质量字段为空或为 0 时,应将该语句视为定位无效,不应依赖其他字段的固定填充值。时间字段为空时表示 UTC 无效;语句仍可能按配置周期输出。
$GPGGA,062134.00,2813.9908005,N,11252.6285300,E,1,28,0.5,83.684,M,-17.038,M,0.0,0000*54| ID | 示例 | 格式 | 描述 |
|---|---|---|---|
| 1 | $GPGGA | 帧头 | |
| 2 | 062134.00 | hhmmss.ss | UTC 时间 |
| 3 | 2813.9908005 | ddmm.m… | 纬度,前两位为度,后续为分,范围 0°~90° |
| 4 | N | - | 纬度方向:N 为北纬,S 为南纬 |
| 5 | 11252.6285300 | dddmm.m… | 经度,前三位为度,后续为分,范围 0°~180° |
| 6 | E | - | 经度方向:E 为东经,W 为西经 |
| 7 | 1 | x | 0:无效解;1:单点或 PPP;2:伪距差分;4:RTK 固定;5:RTK 浮点 |
| 8 | 28 | xx | 参与定位解算卫星数 |
| 9 | 0.5 | x.x | HDOP:水平位置精度因子 |
| 10 | 83.684 | x.xxx | 海拔高(平均海平面高度) |
| 11 | M | U | 海拔高单位:m |
| 12 | -17.038 | x.xxx | 高程异常值:WGS84 椭球高减海拔高 |
| 13 | M | U | 高程异常值单位:m |
| 14 | 0.0 | x.x | 差分龄期,单位:s |
| 15 | 0000 | xxxx | 差分站 ID |
| 16 | 54 | hh | 校验和 |
经纬度使用“度分”格式,不包含独立的秒字段。转换为十进制度时使用:
十进制度 = 度 + 分 / 60,再根据 N/S/E/W 确定正负号。小数位数可能随固件版本变化,接收端应按逗号分隔的十进制数值解析,不应按固定字符宽度截取。
RMC
最简导航传输数据。
定位状态字段为空或为 V 时,应将该语句视为定位无效,不应依赖位置、速度和航向字段的固定填充值。时间或日期字段为空时表示 UTC 无效;语句仍可能按配置周期输出。
$GPRMC,020550.00,A,2813.9891299,N,11252.6278784,E,0.03,315.70,161117,0.0,E,A,V*49| ID | 示例 | 格式 | 描述 |
|---|---|---|---|
| 1 | $GPRMC | 帧头 | 起始符+消息类型标识 |
| 2 | 020550.00 | hhmmss.ss | UTC 时间 |
| 3 | A | x.x | 定位状态:A-有效定位,V-无效定位 |
| 4 | 2813.9891299 | ddmm.m… | 同 GGA 语句纬度格式 |
| 5 | N | - | 同 GGA 语句纬度格式 |
| 6 | 11252.6278784 | dddmm.m… | 同 GGA 语句经度格式 |
| 7 | E | - | 同 GGA 语句经度格式 |
| 8 | 0.03 | x.xx | 水平地面速度,单位:节 |
| 9 | 315.70 | x.xx | 地面航向,以真北为参考,顺时针为正,范围 0°~360° |
| 10 | 161117 | ddmmyy | 日期,日月年 |
| 11 | 0.0 | x.x | 保留字段,接收端忽略 |
| 12 | E | - | 保留字段,接收端忽略 |
| 13 | A | - | 模式指示:N=数据无效;A=自主定位;D=差分;E=估算;F=RTK浮点;R=RTK固定 |
| 14 | V | - | 扩展状态字段,不得据此单独判断定位是否有效 |
| 15 | 49 | hh | 校验和 |
判断 RMC 定位是否有效时,以字段 3 的 A/V 为主,并结合字段 13 的定位模式。字段 14 不作为定位有效性的独立依据。
HiPNUC 二进制消息
HI81 是 HiPNUC GNSS/INS 产品的通用二进制输出。串口使用 8N1 格式;具体物理接口以产品规格书为准。
除另有说明,协议表中整数字段的物理值等于原始值乘以比例因子。
数据帧格式
COM1 默认以 100 Hz 输出 HI81。多字节整数和 CRC 均按小端顺序传输。
| 帧内顺序 | 值 | 长度(字节) | 说明 |
|---|---|---|---|
| 同步字 1 | 0x5A | 1 | 固定值 |
| 同步字 2 | 0xA5 | 1 | 固定值 |
| 数据域长度 | HI81 为 0x0068 | 2 | 仅表示数据域长度,不包含同步字、长度字段和 CRC |
| CRC | - | 2 | 小端;计算时跳过本字段 |
| 数据域 | 首字节为 0x81 | HI81 为 104 | 字段定义见下表 |
因此,一个 HI81 完整帧固定为 110 字节:CRC 位于帧偏移 4–5,数据域从帧偏移 6 开始。下表的字节偏移均从数据域首字节 0x81 开始计算。
数据域内容
组合导航数据(HI81)
HI81 数据域固定为 104 字节。
组合导航状态
ins_status 是判断组合导航工作阶段的统一状态字段:
| 值 | 状态 | 含义 |
|---|---|---|
| 0 | 无效 | 尚未获得完成初始化所需的信息 |
| 1 | 对准中 | 已开始初始化,但尚未进入组合导航 |
| 3 | 组合导航 | 组合导航已初始化,GNSS 辅助有效 |
| 6 | 惯性递推 | 组合导航已初始化,但当前 GNSS 辅助失效,正在惯性递推 |
| 字节偏移 | 名称 | 数据类型 | 大小(Byte) | 单位 | 比例因子 | 说明 |
|---|---|---|---|---|---|---|
| 0 | tag | uint8_t | 1 | - | - | 数据包标签:0x81 |
| 1 | status | uint16_t | 2 | - | - | 保留;接收端不应解释 |
| 3 | ins_status | uint8_t | 1 | - | - | 组合导航状态,见上表 |
| 4 | gpst_wn | uint16_t | 2 | week | 1 | GPS 周 |
| 6 | gpst_tow | uint32_t | 4 | s | 0.001 | GPS 周内秒 |
| 10 | reserved | uint8_t[2] | 2 | - | - | 保留;接收端忽略 |
| 12 | gyr_b | int16_t[3] | 6 | rad/s | 0.001 | 机体系 X、Y、Z 轴角速度,出厂校准后的 IMU 测量数据 |
| 18 | acc_b | int16_t[3] | 6 | m/s² | 0.0048828 | 机体系 X、Y、Z 轴加速度,出厂校准后的 IMU 测量数据 |
| 24 | mag_b | int16_t[3] | 6 | μT | 0.030517 | 机体系 X、Y、Z 轴磁场,出厂校准后的 IMU 测量数据 |
| 30 | air_pressure | int16_t | 2 | Pa | 1 | 实际气压 = 字段值 + 100000 Pa;例如 2000 表示 102000 Pa |
| 32 | reserved | uint8_t[2] | 2 | - | - | 保留;接收端忽略 |
| 34 | temperature | int8_t | 1 | °C | 1 | 温度 |
| 35 | utc_year | uint8_t | 1 | year | 1 | UTC 年份减 2000;例如 24 表示 2024 年 |
| 36 | utc_month | uint8_t | 1 | month | 1 | UTC 月 |
| 37 | utc_day | uint8_t | 1 | day | 1 | UTC 日 |
| 38 | utc_hour | uint8_t | 1 | h | 1 | UTC 时 |
| 39 | utc_min | uint8_t | 1 | min | 1 | UTC 分 |
| 40 | utc_msec | uint16_t | 2 | s | 0.001 | UTC 秒及毫秒 |
| 42 | roll | int16_t | 2 | deg | 0.01 | 横滚角,范围 -180°~180° |
| 44 | pitch | int16_t | 2 | deg | 0.01 | 俯仰角,范围 -90°~90° |
| 46 | yaw | uint16_t | 2 | deg | 0.01 | 航向角,以真北为 0°,顺时针为正,范围 0°~360° |
| 48 | quat | int16_t[4] | 8 | - | 0.0001 | 机体系到导航系的四元数,顺序为 W、X、Y、Z |
| 56 | ins_lon | int32_t | 4 | deg | 1e-7 | 组合导航经度 |
| 60 | ins_lat | int32_t | 4 | deg | 1e-7 | 组合导航纬度 |
| 64 | ins_msl | int32_t | 4 | m | 0.001 | 组合导航海拔高 |
| 68 | pdop | uint8_t | 1 | - | 0.1 | GNSS 位置精度因子 |
| 69 | hdop | uint8_t | 1 | - | 0.1 | GNSS 水平位置精度因子 |
| 70 | solq_pos | uint8_t | 1 | - | - | GNSS 定位质量:0 无效;1 单点或 PPP;2 伪距差分;4 RTK 固定;5 RTK 浮点 |
| 71 | nv_pos | uint8_t | 1 | - | - | 参与 GNSS 定位的卫星数 |
| 72 | solq_heading | uint8_t | 1 | - | - | 双天线定向质量:4 表示固定解;其他值表示定向不可用 |
| 73 | nv_heading | uint8_t | 1 | - | - | 参与双天线定向的卫星数 |
| 74 | diff_age | uint8_t | 1 | s | 1 | RTK 差分龄期 |
| 75 | undulation | int16_t | 2 | m | 0.01 | 高程异常值,即 WGS84 椭球高减海拔高 |
| 77 | reserved | uint8_t | 1 | - | - | 保留;接收端忽略 |
| 78 | vel_enu | int16_t[3] | 6 | m/s | 0.01 | 导航系东、北、天速度 |
| 84 | acc_enu | int16_t[3] | 6 | m/s² | 0.0048828 | 导航系东、北、天加速度 |
| 90 | reserved | uint8_t[14] | 14 | - | - | 保留;接收端忽略 |
获得有效 GNSS/UTC 历元后,gpst_wn、gpst_tow 和 UTC 字段才可作为绝对时间使用。时间无效时,不应依赖这些字段的固定填充值;HI81 仍可能按配置周期输出。
保留字段必须按固定长度跳过,不应依据其值改变解析布局。
CRC
HI81 使用 CRC-16/XMODEM:生成多项式为 0x1021,初值为 0x0000,输入和输出均不反射,无最终异或。CRC 覆盖帧头、长度字段和数据域,不包含 CRC 字段自身。
static void crc16_update(uint16_t *currentCrc, const uint8_t *src,
uint32_t lengthInBytes)
{
uint32_t crc = *currentCrc;
for (uint32_t j = 0; j < lengthInBytes; ++j)
{
crc ^= (uint32_t)src[j] << 8;
for (uint32_t i = 0; i < 8; ++i)
{
uint32_t temp = crc << 1;
if (crc & 0x8000)
temp ^= 0x1021;
crc = temp;
}
}
*currentCrc = (uint16_t)crc;
}
uint16_t crc = 0;
crc16_update(&crc, frame, 4); /* 5A A5 LEN_L LEN_H */
crc16_update(&crc, frame + 6, 104); /* HI81 payload */
uint16_t receivedCrc = (uint16_t)frame[4] | ((uint16_t)frame[5] << 8);
bool crcOk = (crc == receivedCrc);RTCM3 差分数据
RTCM3 用于传输 GNSS 差分改正数据。建议保留 COM1 的默认 HI81 输出,使用可用的 COM2 传输 RTCM3。基站输出与移动站差分输入是两种独立的应用流程。
移动站差分输入
将差分源输出的原始 RTCM3 字节流直接送入 COM2,不添加 ASCII 命令、行结束符或其他封装。差分源与 COM2 必须使用相同波特率。
同时只使用一路差分源。连接后持续检查 HI81:diff_age 应随差分数据更新,solq_pos 进入 4(RTK 固定)或 5(RTK 浮点)时才表明定位解已使用 RTK。
基站 RTCM3 输出
将设备切换为基站前,先记录当前工作模式和端口配置。在 COM2 执行:
UNLOGALL
CONFIG MODEL BASE
LOG RTCM3 ONTIME 1
SAVECONFIG
REBOOTLOG RTCM3 ONTIME 1 中的非零值只用于开启 RTCM3 转发,不设置 RTCM 消息的生成频率。内置 GNSS 模块生成并由设备转发以下消息:
| RTCM3 消息 | 输出频率 |
|---|---|
| 1005 | 1 Hz |
| 1074 | 1 Hz |
| 1094 | 1 Hz |
| 1124 | 1 Hz |
重启后,在 COM2 检查完整且校验正确的 RTCM3 帧。恢复组合导航应用时,重新选择 CAR、SHIP 或 PLANE 模式,并恢复所需的端口输出。
CAN 接口:SAE J1939
配有 CAN 接口的 INS 产品使用 SAE J1939,默认 CAN 波特率为 500 kbit/s,默认设备地址为 0x08。具体接口能力以型号和交付配置为准。
FF10 和 FF14 中的组合导航位置参考点为 IMU 原点,与 HI81 一致。
J1939 使用 29 位扩展帧 ID,结构为:优先级 P(3 bit)、保留位 R(1 bit)、数据页 DP(1 bit)、PDU 格式 PF(8 bit)、PDU 特定域 PS(8 bit)和源地址 SA(8 bit)。本节测量 PGN 的 PF 为 0xFF,属于 PDU2 广播帧,PS 是 PGN 的低 8 位,SA 是设备地址。
| 项目 | 约定 |
|---|---|
| 通信模式 | 测量 PGN 周期广播 |
| 数据长度 | 本节各测量 PGN 均为 8 字节 |
| PF | 0xFF |
| 优先级 | 3 |
| 默认源地址 | 0x08 |
| 数据格式 | 多字节数值均为小端;除明确标为无符号或状态的字段外,均为有符号整数 |
各 PGN 的发送周期独立配置,不同产品的默认周期可能不同。集成时应以配置读回值和实际接收周期为准,不应假定统一默认周期。
PGN 消息列表
PGN 65296(FF10):经纬度
默认地址下 CAN ID 为 0x0CFF1008。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 纬度 | 0–3 | int32_t,单位 deg,比例因子 1e-7 |
| 经度 | 4–7 | int32_t,单位 deg,比例因子 1e-7 |
PGN 65300(FF14):高度及差分龄期
默认地址下 CAN ID 为 0x0CFF1408。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 海拔高 | 0–3 | int32_t,单位 m,比例因子 0.01 |
| 高程异常值 | 4–5 | int16_t,单位 m,比例因子 0.01 |
| 差分龄期 | 6–7 | int16_t,单位 s,比例因子 0.01 |
PGN 65304(FF18):定位状态与卫星数
默认地址下 CAN ID 为 0x0CFF1808。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| GNSS 定位质量 | 0 | 0 无效;1 单点或 PPP;2 伪距差分;4 RTK 固定;5 RTK 浮点 |
| 双天线定向质量 | 1 | 4 表示固定解;其他值表示定向不可用 |
| 定位卫星数 | 2 | 参与 GNSS 定位的卫星数 |
| 定向卫星数 | 3 | 参与双天线定向的卫星数 |
ins_status | 4 | 组合导航状态,定义与 HI81 相同 |
| 保留 | 5–7 | 接收端忽略 |
PGN 65318(FF26):速度
默认地址下 CAN ID 为 0x0CFF2608。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 东向速度 | 0–1 | int16_t,单位 m/s,比例因子 0.01 |
| 北向速度 | 2–3 | int16_t,单位 m/s,比例因子 0.01 |
| 天向速度 | 4–5 | int16_t,单位 m/s,比例因子 0.01 |
| 水平地面速度 | 6–7 | int16_t,单位 m/s,比例因子 0.01 |
PGN 65327(FF2F):时间
默认地址下 CAN ID 为 0x0CFF2F08。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| UTC 年 | 0 | 年份减 2000,例如 24 表示 2024 年 |
| UTC 月 | 1 | |
| UTC 日 | 2 | |
| UTC 时 | 3 | |
| UTC 分 | 4 | |
| UTC 秒 | 5 | |
| UTC 毫秒 | 6–7 | uint16_t,单位 ms,比例因子 1 |
日期合理且非零时,FF2F 才可作为 UTC 使用。绝对时间有效前应忽略该 PGN,不应依赖无效时间的固定填充值。
PGN 65332(FF34):加速度
默认地址下 CAN ID 为 0x0CFF3408。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 加速度 X | 0–1 | int16_t,单位 g,比例因子 0.00048828 |
| 加速度 Y | 2–3 | int16_t,单位 g,比例因子 0.00048828 |
| 加速度 Z | 4–5 | int16_t,单位 g,比例因子 0.00048828 |
| 保留 | 6–7 | 接收端忽略 |
PGN 65335(FF37):角速度
默认地址下 CAN ID 为 0x0CFF3708。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 角速度 X | 0–1 | int16_t,单位 deg/s,比例因子 0.061035 |
| 角速度 Y | 2–3 | int16_t,单位 deg/s,比例因子 0.061035 |
| 角速度 Z | 4–5 | int16_t,单位 deg/s,比例因子 0.061035 |
| 保留 | 6–7 | 接收端忽略 |
PGN 65341(FF3D):横滚角和俯仰角
默认地址下 CAN ID 为 0x0CFF3D08。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 横滚角(Roll) | 0–3 | int32_t,单位 deg,比例因子 0.001 |
| 俯仰角(Pitch) | 4–7 | int32_t,单位 deg,比例因子 0.001 |
PGN 65345(FF41):航向角
默认地址下 CAN ID 为 0x0CFF4108。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 航向角(顺时针) | 0–3 | uint32_t,以真北为 0°,顺时针为正,范围 0°~360°,单位 deg,比例因子 0.001 |
| 保留 | 4–7 | 接收端忽略 |
PGN 65347(FF43):温度
默认地址下 CAN ID 为 0x0CFF4308。
| SPN 名称 | 字节位置 | 说明 |
|---|---|---|
| 温度 | 0–1 | int16_t,单位 °C,比例因子 0.01 |
| 保留 | 2–7 | 接收端忽略 |
配置 J1939
配置使用 PDU1 的 PGN 0xEF00,配置主机固定使用源地址 0x55。设备保持默认地址 0x08 时:
- 主机请求 ID:
0x0CEF0855,目的地址为设备0x08,源地址为主机0x55; - 设备应答 ID:
0x0CEF5508,目的地址为主机0x55,源地址为设备0x08。
配置帧固定为 8 字节:
| 字段 | 字节 | 说明 |
|---|---|---|
ADDR | 0–1 | 16 位寄存器地址,小端 |
CMD | 2 | 0x06 写入,0x03 读取 |
STATUS | 3 | 保留,主机发送 0x00 |
VAL | 4–7 | 32 位值,小端;读取请求时发送 0 |
普通写入成功时,设备回显请求;读取成功时,设备在 VAL 中返回当前值。非法地址或参数可能不返回应答,主机应设置超时,不要无限等待。
配置寄存器
| 地址 | 对象 | 值 |
|---|---|---|
0x0110 | FF10 经纬度周期 | 0:关闭;10–1000:周期,单位 ms |
0x0114 | FF14 高度及差分龄期周期 | 0:关闭;10–1000:周期,单位 ms |
0x0118 | FF18 定位状态周期 | 0:关闭;10–1000:周期,单位 ms |
0x0126 | FF26 速度周期 | 0:关闭;10–1000:周期,单位 ms |
0x012F | FF2F 时间周期 | 0:关闭;10–1000:周期,单位 ms |
0x0134 | FF34 加速度周期 | 0:关闭;10–1000:周期,单位 ms |
0x0137 | FF37 角速度周期 | 0:关闭;10–1000:周期,单位 ms |
0x013D | FF3D 横滚角和俯仰角周期 | 0:关闭;10–1000:周期,单位 ms |
0x0141 | FF41 航向角周期 | 0:关闭;10–1000:周期,单位 ms |
0x0143 | FF43 温度周期 | 0:关闭;10–1000:周期,单位 ms |
0x009A | CAN 波特率 | 0:1000 kbit/s;1:800 kbit/s;2:500 kbit/s;3:250 kbit/s;4:125 kbit/s |
0x009C | 设备地址 | 范围 1–64,默认 8 |
0x009D | J1939 周期输出总开关 | 0:关闭;1:开启 |
0x03D0–0x03DA | 天线杆臂 ANTA、ANTB | 每轴一个地址,浮点位模式,单位 m,见双天线基线与杆臂设置;保存并重启后生效 |
0x0000 | 控制 | 0x00000000:保存配置;0x000000FF:重启 |
例如,将 FF37 角速度周期设置为 100 ms:
ID = 0x0CEF0855
DATA = 37 01 06 00 64 00 00 00随后读取 0x0137 验证:
ID = 0x0CEF0855
DATA = 37 01 03 00 00 00 00 00关闭全部 J1939 周期输出时,写入:
ID = 0x0CEF0855
DATA = 9D 00 06 00 00 00 00 00将 VAL 改为 01 00 00 00 可重新开启。配置后先读回目标寄存器,再向 0x0000 写入 0x00000000 保存、写入 0x000000FF 重启,最后检查实际 CAN 报文的 ID 和周期。修改 CAN 波特率时,重启后使用新波特率验证。重启命令可能在应答发出前生效,主机应以新参数下重新出现有效报文作为成功依据。
状态与故障定位
组合导航初始化
通信正常不等于组合导航已经初始化。设备先使用有效 GNSS 定位建立位置,再使用双天线固定定向解或连续运动形成的速度航向完成初始化。没有双天线定向时,在良好卫星环境中保持稳定运动,并通过 ins_status 判断初始化结果。
初始化和运行状态统一查看 ins_status:0 表示无效,1 表示对准中,3 表示组合导航,6 表示惯性递推。进入状态 6 后,设备仍连续输出导航数据,但误差会随失锁时间和运动状态累积;GNSS 辅助重新有效后,设备自动恢复组合导航。
排查顺序
| 现象 | 优先检查 | 判定与处理 |
|---|---|---|
| COM1 收不到 HI81 | 供电、接口电平、TX/RX、共地和 115200 8N1 | 能持续找到 0x5A 0xA5、取得 110 字节完整帧且 CRC 正确,才表示通信正常;必要时用 LOG COMCONFIG 核对当前配置 |
ins_status 长期为 0 或 1 | A 天线视野、solq_pos、卫星数、工作模式和杆臂参数 | 双天线产品还应检查 A/B 天线连接、基线方向及 solq_heading 是否为 4;没有固定定向解时,保持稳定运动完成航向初始化 |
ins_status 由 3 变为 6 | solq_pos、差分龄期、天线遮挡和 GNSS 数据连续性 | 使用 NTRIP 时同时检查网络、服务器、挂载点和账号;恢复有效 GNSS 辅助后观察状态是否回到 3 |
| 航向方向或偏差明显错误 | 设备 Y 轴前向、A/B 天线顺序、ANTA、ANTB 和安装刚性 | 确认航向以真北为 0°、顺时针为正;双天线定向应以 solq_heading=4 为有效条件 |
| RTK 长期不能固定 | 天线环境、差分数据、diff_age、网络和 NTRIP 配置 | 先确认设备持续接收差分数据,再排查账号、基准站距离和卫星遮挡,不以固定等待时间作为成功条件 |
| J1939 无报文 | 型号是否配有 CAN、500 kbit/s、29 位扩展帧、总线终端、设备地址和配置周期 | 先读回目标 PGN 周期,再按实际设备地址检查 CAN ID;不要假定所有固件具有相同默认周期 |
联系技术支持前
请准备产品名称和 APP_VER、LOG COMCONFIG、LOG INSCONFIG,以及一小段原始 HI81 或 CAN 报文。涉及航向或 RTK 时,同时说明天线安装、卫星环境、差分龄期和网络状态。
固件升级与技术支持
固件升级
如需升级,请联系技术支持并提供产品型号和 LOG VERSION 查询结果,由技术支持确认适用的 .hex 文件;请勿使用其他型号的固件。在 CHCenter 的“工具 > 固件升级”中选择该文件,连接设备后执行升级。升级期间应保持供电和通信稳定;完成后重新连接设备,并通过 LOG VERSION 核对 APP_VER。
开发资源
C/C++、Python、STM32、ROS 和 DBC 资源见 SDK 与开发资源。协议定义以本手册为准。
技术支持
最新资料与技术支持渠道如下:


