JY901姿态传感器串口调试、校准与数据解析避坑指南
发布时间:2026/11/3 15:43:47 锦皓数字建站

简介JY901官方使用说明文档是一份面向嵌入式开发者、机器人/无人机姿态测量初学者及硬件工程师的传感器技术手册用于快速了解这款高精度惯性导航模块的接口、参数与调试流程。压缩包仅含1个PDF文件约1.35MB篇幅集中、便于随查随用内容覆盖产品概述、性能参数、引脚与轴向定义、串口/IIC硬件连接、上位机软件操作、恢复出厂设置及模块校准等核心章节。文档对加速度、角速度、磁场、角度以及JY901B气压高度等输出维度给出明确量程与精度指标并说明GPS-IMU组合导航、扩展端口和最高200Hz输出等用法能帮助读者完成从接线、通信调试到陀螺/加计校准与磁场校准的落地操作。已有3552人学习适合作为JY901选型评估、嵌入式驱动联调和姿态数据采集的案头参考。1. 先接线再打开软件JY901 姿态传感器这块指甲盖大小的板子初次调试几乎都卡在同一个地方线接好了串口助手一开屏幕上只有一串55 51开头的十六进制没有数字也没有曲线。有人当场判定模块烧了回头又买一块有人把 TX 接 TX、RX 接 RX两边都沉默还有人拿 RS232 电平的转换板硬接上电后十几秒模块就发烫。见多了这种情况就会发现这套环境本身并不难麻烦的是它拆成了五件必须全部做到位的事供电、电平、驱动、波特率、校准。五项里错一项现象都一样——看不到数据。真正吃时间的不是调姿态解算而是这五分钟的接线和配置。下面按我实际装机的顺序走一遍从参数对表到接线再到上位机联调、校准、救砖最后用一段脚本验证数据真的解出来了。2. 装前把账算清3V~6V 供电、3.3V/5V 电平与两种接口装配前要先明确一件事JY901 是一块“裸模块”没有外壳、没有 USB 口、没有自带驱动它把自己当芯片卖。所以安装的第一步不是插线是确认手里这几样东西齐不齐——USB 转 TTL 模块、杜邦线、上位机软件、对应驱动缺一样都进行不下去。2.1 参数对表电压、量程和输出速率决定你怎么接先把关键参数列出来后面所有接线动作都是从这张表里推出来的不是凭经验拍脑袋。参数项官方数值落地时的影响供电电压3V~6V5V 和 3.3V 系统都能直接喂不用额外电平转换工作电流40mAUSB-TTL 的 5V 引脚带得动别跟舵机共用一路引脚电平兼容 3.3V / 5VSTM32、51、Arduino UNO 都能直连量程加速度 ±16g角速度 ±2000°/s角度 ±180°无人机、机械臂这类场景够用分辨率加速度 6.1e-5g角速度 7.6e-3°/s静态漂移能看出来所以校准必须做稳定性加速度 0.01g角速度 0.05°/s姿态 0.01°姿态角抖动小于 0.01° 才算调好输出速率0.1Hz~200Hz 可调速率越高对波特率的要求越苛刻串口2400~921600bps8 数据位 1 停止位 0 校验默认 9600第一次连别乱改IIC最高 400K默认地址 0x50开漏输出必须外部上拉尺寸15.24×15.24×2mm上下焊盘间距 100mil左右 600mil可直接画进 PCB有一处细节容易被忽略模块内部带 LDO当供电大于 3.5V 时芯片实际工作电压 Uvcc 是 3.3V供电小于 3.5V 时Uvcc 供电电压 − 0.2V。这个 Uvcc 只影响一件事——扩展口配成模拟输入时电压换算公式是U DxStatus / 1024 * Uvcc。用 5V 供电却按 5V 去算读数会整整差一截而且曲线看着“很合理”不去核对根本发现不了。2.2 串口还是 IIC先看主控还剩什么口模块同时给了串口和 IIC两条路都能出数据但选型逻辑不一样。串口的优势是省事模块主动往外推数据每帧自带0x55 类型字节的包头天然分帧MCU 端只要一个环形缓冲加状态机就能收。缺点是占一个 UART而且速率越高越吃带宽。IIC 的优势是省引脚一根 SCL 一根 SDA 能挂多个模块缺点是模块不会主动推要按寄存器地址去读而且必须处理上拉。如果你只是拿一块板子做姿态采集、调试阶段要看着曲线调参串口是更省事的选择。如果板子上已经挂了一排 IIC 传感器、UART 全被占了那就走 IIC把地址改开就行。提示同一个项目里两种接口不要混用调试。串口连着上位机看数据同时又用 IIC 从 MCU 读很容易把自己绕进去分不清哪份数据是哪条链路出来的。2.3 与计算机连接USB-TTL 四根线交叉的只有 TX 和 RX这是绝大多数人第一次踩坑的位置。模块是 TTL 电平电脑没有 TTL中间必须有一个 USB 转 TTL 的串口模块常见的是 CH340、CP2102 这类芯片的方案。接线只有四根对应关系是固定的USB 转 TTL 模块JY901 模块说明5VVCC供电3.3V 模块也能吃 5VTXDRX模块的接收接转换模块的发送RXDTX模块的发送接转换模块的接收GNDGND必须共地不共地一定没数据TXD 和 RXD 必须交叉这是串口最基本的规矩但紧张的时候真的会把两根线插反。判断方法很简单反了以后模块其实在发数据只是发到了转换模块的发送脚上两边都在“说”谁都不“听”所以串口助手一片空白而不是乱码。有些多合一的串口模块带拨码开关接这类模块时要把 2 号拨码拨到 OFF 端否则电平转换那一路不导通现象同样是没数据。这类模块的问题在于拨码开关没有丝印说明买回来不看图纸根本不知道拨哪边我一般会先在图纸上确认一遍再上电。2.4 与单片机连接3.3V 和 5V 系统的差别只在供电那一根接 MCU 和接电脑本质是同一件事都是 UART 对接区别在供电来源。STM32 这类 3.3V 系统VCC 直接接开发板的 3.3V模块能吃 3V~6V3.3V 完全在范围内。Arduino UNO 这类 5V 系统VCC 接 5V模块内部 LDO 会把它降到 3.3V引脚电平仍然兼容。所以模块本身不需要任何电平转换电路这一点比很多老式传感器省心。真正要注意的是电流和地。模块工作电流不到 40mA但如果你把它和舵机、电机驱动挂在同一路 5V 上电机启动瞬间的压降足以让模块复位现象是数据突然中断几百毫秒然后自己恢复日志里看不出任何异常。我的做法是给传感器单独走一路 LDO或者至少和功率器件分开供电、单点共地。2.5 IIC 接法与 4.7K 上拉这一步省不得走 IIC 的话接线是 VCC、GND、SCL、SDA 四根SCL 接 MCU 的 SCLSDA 接 SDA不用交叉。关键在两根上拉电阻。模块的 IIC 总线是开漏输出意味着它只能把线拉低拉高要靠外部上拉。官方文档明确要求用 4.7K 电阻上拉到 VCC。很多 MCU 内部自带弱上拉阻值几十 K短距离、低速率下勉强能通一旦拉到 400K 全速示波器上看上升沿明显变缓、波形变成圆角读出来的数据就会偶尔错位。这种故障最折磨人——不是完全不通是十次里错一次。# 装好 pyserial 后先确认系统认到了串口设备 # pip install pyserial from serial.tools import list_ports for p in list_ports.comports(): # device 是设备名description 能看出是哪颗转换芯片 print(p.device, |, p.description)这段脚本的作用是排除“驱动没装好”这个变量。Windows 下设备名形如COM3Linux 下是/dev/ttyUSB0。如果插上 USB-TTL 以后列表里什么都没有别急着怀疑模块先查驱动——这一步能省掉后面百分之八十的误判。2.6 扩展口 D0~D3 与 GPS 接入先想清楚再配置模块留了四路扩展口默认全部是模拟输入模式。这四路能配成模拟输入、数字输入、数字输出高/低电平、PWM 输出D1 还多一个 GPSRX 模式。PWM 模式挺实用周期 1us~65535us、分辨率 1us直接拿来驱动舵机是可以的高电平宽度写 1500、周期写 20000就是标准的舵机中位信号。不过要注意这四路是模块的“副业”一旦配成输出模式回传的端口状态数据含义就跟着变了——模拟输入时 DxStatus 是电压采样值数字输入时是 0 或 1PWM 输出时是高电平宽度。同一个字段四种解释写解析代码的时候必须按当前配置来不能写死。接 GPS 是 D1 的专属功能。把 D1 配成 GPSRX接 GPS 模块的 TX模块就能接收符合 NMEA-0183 标准的串口数据输出经纬度、地速、GPS 高度形成 GPS-IMU 组合。这里有两个默认值要记住GPS 连接波特率默认 9600模块时间和 GPS 时间都遵循 NMEA 的 UTC比北京时间晚 8 小时。3. 上位机联调串口号、波特率与回传内容线接完、驱动装完接下来才轮到软件。这一步的坑不在操作复杂在于顺序错了会得到完全误导的结果——比如先选串口再改波特率软件会以错误的速率去打开一个正确的口然后告诉你“设备无响应”。3.1 上位机与驱动路径别带中文和空格上位机是个免安装的小工具解压就能跑但它有两个隐藏行为必须提前知道。第一它会在自己所在的根目录下写记录文件。如果放在C:\Program Files这类需要管理员权限的目录点“记录”按钮不会有任何提示但文件就是写不出来。我一般固定解压到D:\tools\jy901\这种短路径。第二路径里带中文或空格某些系统上会出现界面能开、串口打不开的情况报错信息还很含糊。这种玄学问题排查起来非常费时间直接避开最省事。3.2 打开串口先选波特率再选串口正确的点击顺序是先点波特率菜单选 9600出厂默认值再点串口设置选设备管理器里看到的那个 COM 口。顺序反了也能开但一旦速率不匹配你会在“串口已打开”的状态下看着一片空白误以为是模块没上电。如果确实忘了模块被改成什么波特率用菜单里的“波特率 → Auto”自动搜索。这个功能有个前提条件模块的回传速率必须大于 5Hz。如果之前把速率调到了 1Hz 甚至 0.5Hz自动搜索会一直失败这时候唯一的办法是走恢复出厂见 4.5 节回到 9600 再来。3.3 回传内容 RSW只留你要的包模块默认不是把所有数据都往外发。出厂时时间包是关的加速度、角速度、角度三个包是开的。这个默认值很合理因为带宽有限。每一包都是 11 字节2 字节包头 8 字节数据 1 字节校验和。要估算带宽够不够用这个公式包数 × 11 × 回传速率 ≤ 波特率 / 10。9600 波特率下每秒大约能传 960 字节三个包 10Hz 是 330 字节绰绰有余如果开到 200Hz 并且把时间、磁场、四元数、端口状态全勾上那就是 6 包 × 11 × 200 13200 字节/秒9600 根本扛不住。扛不住的时候模块不会报错它会自动降频按当前波特率能支撑的最大速率输出。现象就是你设了 200Hz实际收到的只有 40Hz还不告诉你为什么。这个行为很隐蔽我第一次遇到时调了半天代码最后才发现是带宽问题。用指令改回传内容帧格式是固定的五字节0xFF 0xAA 地址 数据低字节 数据高字节。import serial # 打开串口出厂默认 9600 8N1 ser serial.Serial(COM3, 9600, timeout1) # 0xFF 0xAA 是固定帧头0x02 是 RSW 寄存器回传内容 # 数据位按包位掩码组合0x50 时间、0x51 加速度、0x52 角速度、0x53 角度 # 0x54 磁场、0x56 气压高度、0x57 经纬度、0x58 地速、0x55 端口 # 这里只保留角度包 加速度包 0x51 | 0x53 rsw 0x51 | 0x53 ser.write(bytes([0xFF, 0xAA, 0x02, rsw, 0x00])) # 0x00 地址写 0 表示保存当前配置不写这条掉电就还原 ser.write(bytes([0xFF, 0xAA, 0x00, 0x00, 0x00])) ser.close()这段代码做了两件事先改回传内容再保存。参数上要理解rsw这个字节是位掩码每一位对应一个数据包默认值0x3C时间关、加速度开、角速度开、角度开、磁场关。手动算掩码容易错位稳妥的做法是打开上位机的设置页勾选看它算出来的值再抄到代码里。第二条写 SAVE 寄存器是必须的模块的配置全部存在内部 FLASH不保存的话断电就回到出厂值白忙一场。3.4 回传速率与串口波特率一个立即生效一个要重新上电这两个参数经常被搞混因为都在设置页里但生效方式完全不同。回传速率是立即生效的寄存器地址 0x03取值从 0x01 到 0x0c分别对应 0.1Hz、0.5Hz、1Hz、2Hz、5Hz、10Hz、20Hz、50Hz、100Hz、200Hz0x0b 是单次输出0x0c 是不输出。改完马上能看到数据变快变慢。但要掉电保存还得点保存配置。串口波特率不一样改完必须重新上电才生效。寄存器地址 0x04取值 0x00 到 0x09 对应 2400 到 921600。改完之后上位机这边如果还挂在 9600立刻就会断流很多人以为是模块挂了其实是自己把门锁了。# 把串口波特率改成 1152000x06 对应 115200 ser serial.Serial(COM3, 9600, timeout1) ser.write(bytes([0xFF, 0xAA, 0x04, 0x06, 0x00])) # 改波特率 ser.write(bytes([0xFF, 0xAA, 0x00, 0x00, 0x00])) # 保存配置 ser.close() # 断电重上电后用新速率打开 # ser serial.Serial(COM3, 115200, timeout1)这里有个顺序陷阱改完波特率立刻保存然后断电。如果先保存回传速率再改波特率中间那几秒模块还在用旧速率发数据程序里如果有多线程在读很容易读到半帧导致后面的解析全乱。我的习惯是每改一个参数就断电重启一次虽然慢但状态永远干净。3.5 IIC 地址、GPS 波特率与 LEDIIC 地址默认 0x50寄存器 0x1a。改它同样需要重新上电因为地址是在初始化时读进总线的。多模块挂同一根 IIC 总线时必须改否则两个 0x50 会打架读出来的是两个模块数据的叠加现象是数值乱跳、毫无规律。GPS 连接波特率默认 9600寄存器 0x1c也是重新上电生效。这个值必须和 GPS 模块的实际输出速率一致不一致的话经纬度和地速会一直不刷新但其他数据正常很容易被忽略。LED 指示灯可以关寄存器 0x1b。在某些密闭结构或者夜间场景里那颗常亮的灯挺碍事配好以后关掉再保存就行。3.6 记录、清图与三维显示上位机的“记录”按钮不是点了就开始写文件。它是点开始、采数据、点停止才落盘文件写在上位机根目录文件名用记录的起始时间命名。所以采集过程中如果直接关软件这一轮数据就丢了。采集时间长的场景我一般分段落采几分钟停一次避免一次写太大。“清图”按钮解决的是图表刷新慢的问题。当两次采集间隔很久图表会慢慢吞吞地补历史点看起来像卡死点一下清图就立刻恢复。“三维”按钮会全屏显示姿态按 F 键切回窗口。这里有个特别无语的坑中文输入法开着的时候F 键被输入法吃掉了按什么都没反应。切回英文输入或者按 Ctrl空格关掉输入法再按 F 就行。第一次遇到时我以为是软件卡死重装了三次。4. 校准与恢复出厂三件套加两种救砖法数据能出来了不代表数据是对的。出厂状态下每颗传感器的零偏都不一样不校准直接用静止放着角速度也会显示 0.3°/s、航向角慢慢漂走。校准这一步省不掉而且顺序有讲究。4.1 陀螺/加计校准先摆平再等数字不动校准的目的是去掉陀螺仪和加速度计的零偏。操作前提是模块必须保持水平静止——放在桌面上别用手拿着手抖一下校准结果就废了。步骤是模块水平放置 → 打开设置页 → 点“陀螺、加计校准” → 等待 AxOffset、AyOffset、AzOffset、GxOffset、GyOffset、GzOffset 这六个数字稳定下来不再跳动 → 点“正常模式” → 点“保存配置”。六个值稳定的判断标准是连续几秒读数不变。这个过程通常十几秒但如果你放在不水平的桌面上AzOffset 会一直往一个方向爬永远不稳定。校准完以后静止状态下陀螺仪输出应该回到 0°/s 附近如果还在 0.2 以上说明没校准成功或者没保存。六个零偏也可以手动填点对应的按钮就能写入对应轴的偏移。手工改的场景不多一般是用在批量生产时把同一批次的校准值直接灌进去。4.2 磁场校准绕三个轴各转 360°磁场校准比陀螺加计麻烦因为要动。先把模块放到远离干扰源的地方——远离音箱、电机、金属桌面、手机。然后点“磁场校准”接着拿起来绕 X 轴转 360°可以来回转几圈再绕 Y 轴转 360°再绕 Z 轴转 360°最后随意转几圈。盯着 HxOffset、HyOffset、HzOffset 三个数字等它们不再变化了点“正常模式”点“保存配置”。磁场不校准的直接后果是航向角不准。加速度和角速度看着都挺正常唯独 Yaw 一直在慢慢转或者转到某个方向突然跳 180°。这种故障在无人机上表现为原地打转非常危险。注意磁场校准对环境极其敏感。在工位上校准完拿到现场用现场如果有大功率电机或者钢结构航向角照样跑偏。我的做法是在实际使用环境里做一次校准或者至少在一个没有金属干扰的干净台面上做。4.3 高度置零只对 JY-901B 有意义带气压传感器的 JY-901B 才能输出气压和高度普通版没有这个功能点了也没反应。高度是由气压算出来的高度置零这个操作就是把当前气压值当作零高度基准。点设置页的“高度校准”按钮就行。有个细节高度校准值模块不做保存所以不需要点保存配置重新上电后它会重新以当前气压为零点。这也意味着如果你需要固定基准得在每次上电后手动置零一次。4.4 保存配置不点这一步等于全部白干这是整篇里我最想强调的一条。陀螺加计校准、磁场校准、回传内容、回传速率、波特率、IIC 地址、扩展口模式、LED 开关——所有配置都写在模块内部的 FLASH 里但只有点了“保存配置”才会真正落盘。对应的寄存器是 0x00写 0 是保存当前配置写 1 是恢复默认配置并保存。很多人校准完看到数值正常了就直接断电下次上电发现又漂了回头怀疑模块质量其实是自己没保存。# 保存当前配置0x00 寄存器写 0 ser.write(bytes([0xFF, 0xAA, 0x00, 0x00, 0x00])) # 恢复出厂设置并保存0x00 寄存器写 1 # ser.write(bytes([0xFF, 0xAA, 0x00, 0x01, 0x00]))这两条指令的区别就一个字节但后果完全相反。第二条会把你所有校准值、波特率、IIC 地址全部清掉等于把模块格式化了。写代码的时候千万别把这两个常量放在一起还不起名字。4.5 恢复出厂短路法和指令法后者不一定走得通总有把模块配到连不上的时候比如波特率改成了一个自己都忘了的值。这时候要靠恢复出厂救回来两种方法。短路法最可靠把 D2 引脚和 VCC 用导线短接然后给模块上电。上电后 LED 会长亮持续约 2 秒后熄灭表示恢复完成松开导线就行。这个方法不依赖任何通信所以不管波特率被改成什么都能救回来。指令法是通过上位机设置页的“恢复默认”按钮或者发0xFF 0xAA 0x00 0x01 0x00。但它的前提是你得先连上模块——也就是说你必须知道当前的波特率。波特率不匹配指令发过去模块根本收不到。所以这条路只在“能连上但配置乱了”的时候有用真锁死了还是得用短路法。恢复出厂后必须重新上电模块才会以 9600 的默认波特率重新初始化。5. 避坑排查五个现场记录下面这几条都是我在实际接线和联调中反复遇到的按“现象 → 原因 → 解决”整理遇到问题可以按顺序对一遍。5.1 现象串口助手满屏十六进制没有数字也没有曲线原因模块发的是二进制帧不是 ASCII 文本串口助手默认按文本解析当然看不懂。原始帧长这样55 51 AxL AxH AyL AyH AzL AzH TL TH SUM。每一帧 11 字节以 0x55 开头第二个字节区分数据类型。解决要么把串口助手切到 HEX 显示先确认有数据在流动要么直接用上位机软件它会按协议解析成曲线。想自己写解析的话关键点是有符号转换——高低字节组合时必须先把高字节强转成有符号 short 再移位否则负数会变成六万多。加速度换算公式是ax ((AxH8)|AxL) / 32768 * 16g角速度是/32768*2000角度是/32768*180。5.2 现象打开串口后完全没有数据一片空白原因三个可能——TXD/RXD 没交叉、驱动没装好、波特率不对。后者最常见因为模块的波特率是可以被改的出厂 9600 但上一手用户可能改成了 115200。解决先按 2.3 节核对线序再用 2.5 节的脚本确认系统认到了串口设备最后试“波特率 → Auto”自动搜索。自动搜索失败的话用短路法恢复出厂回到 9600 重来。5.3 现象自动搜索波特率一直失败进度条卡住原因Auto 功能的前提是模块回传速率大于 5Hz。如果之前把速率配成了 1Hz 或者 0.5Hz软件扫一圈收不到足够的帧就判定失败。解决走短路法恢复出厂出厂默认回传速率是 10Hz、波特率 9600恢复后用默认值连接即可。这也是为什么我建议调试阶段别急着改速率先把链路跑通再提速。5.4 现象模块静止放在桌上角速度读数不是 0慢慢漂原因没做陀螺加计校准或者校准了但没点保存配置。传感器的零偏是物理属性出厂时每颗都不一样不校准就是会漂。解决按 4.1 节重新校准六个 Offset 值稳定后点正常模式再点保存配置然后断电重启验证。重启后静止读数应该回到 0°/s 附近。如果重启后又漂了说明保存那一步没生效检查是不是漏点了。5.5 现象航向角乱跳或者慢慢转圈原因磁场没校准或者使用环境里有磁干扰。前者是软件问题后者是物理问题两者现象很像容易误判。解决先按 4.2 节做一次完整的磁场校准绕三个轴各转 360°。校准后如果还跳把模块挪到远离电机、音箱、金属桌面的地方再试。如果换了地方就正常说明是环境干扰得从结构上解决——比如给模块加个屏蔽罩或者调整安装位置远离功率器件。5.6 现象改了波特率之后彻底连不上原因波特率要重新上电才生效而且上位机这边的设置没跟着改。模块已经用新速率说话了软件还在用旧速率听。解决改完波特率先保存、再断电、再上电然后在上位机里把波特率菜单改成新值再开串口。如果彻底忘了改成了什么别纠结短路法恢复出厂两秒钟的事。6. 验证跑通写二十行脚本把 0x55 0x51 解出来配置全做完最后一步是验证数据真的解对了。别只看上位机曲线好看——曲线是软件画的中途哪一步算错了它照样画得挺顺。要确认的话自己写一段解析把原始字节变成物理量再跟静态的真实情况对一对。import serial, struct # 打开串口和模块当前波特率一致 ser serial.Serial(COM3, 9600, timeout1) buf bytearray() while True: buf ser.read(64) # 找帧头 0x55加速度帧的第二个字节是 0x51 while len(buf) 11: if buf[0] 0x55 and buf[1] 0x51: frame buf[:11] # 校验和前 10 字节累加取低 8 位 if sum(frame[:10]) 0xFF frame[10]: # 有符号 16 位注意 h 是小端有符号 short ax, ay, az, t struct.unpack(hhhh, frame[2:10]) print(fax{ax/32768*16:.3f}g fay{ay/32768*16:.3f}g faz{az/32768*16:.3f}g fT{t/100:.2f}C) buf buf[11:] else: buf buf[1:] # 校验失败丢一字节重新找帧头 else: buf buf[1:] # 不是目标帧继续滑动这段代码的关键点在三个地方。struct.unpack(hhhh, ...)里的是小端h是有符号 16 位——模块每个数据都是低字节在前、高字节在后且是有符号数这正是 5.1 节提到的那个坑的代码级解法。校验和是前十个字节累加取低 8 位对不上就丢一个字节重新对齐防止半帧导致后面全体错位。/32768*16是把原始值归一化到 ±16g 量程。验证标准很直接模块水平静止放在桌上az应该接近 1.000g误差 0.02 以内ax和ay接近 0温度在 20~35℃ 之间合理波动。如果az是 −1g说明模块装反了如果三个轴都是 0.3 左右说明没校准如果读数完全不合逻辑先怀疑校验和对不上在丢帧。角度帧同理第二个字节换成 0x53解出来是 Roll、Pitch、Yaw除以 32768 乘 180。这里还有个坐标系要注意姿态解算用的是东北天坐标系正方向放置时向左为 X 轴、向前为 Y 轴、向上为 Z 轴旋转顺序是 Z-Y-X。所以俯仰角的实际范围只有 ±90°超过 90° 会变换到小于 90°同时让滚转角超过 180°。这是欧拉角表示的固有问题不是模块算错了。另外提一句这份说明文档里有两处笔误四元数包和卫星定位精度包都标成了0x55 0x59时间包的校验和公式里多写了一个 0x51。不影响使用但自己写解析的时候别照着抄实际以抓到的字节为准。从那以后我每次把 JY901 接到一块新板子上都会强制走一遍静态三分钟水平放好跑一段解析脚本确认 az ≈ 1g、三个角速度接近 0、Yaw 不漂才动后面的算法。这三分钟能挡掉后面几天的怀疑人生。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。