7.8 KiB
CUAV 7-Nano GPS2 配置与检查
1. 当前设备和固件配置
- 飞控:CUAV 7-Nano V2
- PX4:
v1.17.0 - 固件目标:
cuav_7-nano_minimal_vtol - 当前 GPS 物理连接口:
GPS2 - GPS协议:UBX(从当前
gps status输出判断)
当前固件中的串口映射为:
| 物理接口 | PX4设备节点 |
|---|---|
| GPS1 | /dev/ttyS0 |
| GPS2 | /dev/ttyS6 |
| TELEM1 | /dev/ttyS5 |
| TELEM2 | /dev/ttyS3 |
| TELEM3 | /dev/ttyS1 |
该映射来自:
boards/cuav/7-nano/minimal_vtol.px4board
其中定义:
CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0"
CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS6"
2. 当前检测结果
在 NuttShell 中执行:
gps status
得到:
INFO [gps] Main GPS
INFO [gps] protocol: UBX
INFO [gps] status: NOT OK, port: /dev/ttyS0, baudrate: 0
INFO [gps] sat info: disabled
INFO [gps] rate reading: 0 B/s
这段输出表示:
- GPS驱动已经启动。
- 驱动正在把
/dev/ttyS0当作 Main GPS 端口。 /dev/ttyS0对应物理GPS1接口。- 当前 GPS 实际插在物理
GPS2接口,即/dev/ttyS6。 - 驱动当前读取了错误的物理串口。
rate reading: 0 B/s表示该串口没有收到任何 GPS 字节。status: NOT OK不是单纯的“室内没有卫星定位”,而是当前端口连串口数据都没有收到。
因此,当前首要问题是 GPS 端口配置与实际接线不一致。
3. GPS串口配置参数
当前固件中,GPS串口配置值含义为:
| 参数值 | 端口 |
|---|---|
0 |
Disabled,禁用 |
101 |
TELEM1 |
102 |
TELEM2 |
103 |
TELEM3 |
201 |
GPS1 |
202 |
GPS2 |
相关参数:
GPS_1_CONFIG:配置 Main GPS 所使用的串口。GPS_2_CONFIG:配置 Secondary GPS 所使用的串口。
这里的 GPS_1_CONFIG 和 GPS_2_CONFIG 表示“主 GPS 实例”和“次 GPS 实例”,并不强制要求主 GPS 一定插在物理 GPS1 口。
例如:只有一个 GPS,且它插在物理 GPS2 口时,可以让 Main GPS 使用 GPS2:
GPS_1_CONFIG=202
GPS_2_CONFIG=0
4. 当前推荐配置
当前只有一个 GPS,并且插在 GPS2 物理接口,因此推荐将它配置成 Main GPS。
先查看现有参数:
param show GPS_1_CONFIG
param show GPS_2_CONFIG
然后设置:
param set GPS_1_CONFIG 202
param set GPS_2_CONFIG 0
param save
reboot
设置结果表示:
Main GPS → GPS2物理口 → /dev/ttyS6
Secondary GPS → 禁用
GPS_1_CONFIG 和 GPS_2_CONFIG 都属于需要重启后生效的串口配置参数。
不要同时把两个 GPS 实例配置到同一个物理串口,否则会产生串口占用冲突。
5. 重启后的验证步骤
5.1 检查 GPS 驱动状态
gps status
首先确认端口已经变成:
port: /dev/ttyS6
如果串口和模块正常,应看到:
status: OK
rate reading: 非0 B/s
波特率也应被自动检测为一个实际值,而不是长期保持 0。
5.2 检查原始 GPS 数据
listener sensor_gps -n 5
重点字段:
| 字段 | 含义 | 正常表现 |
|---|---|---|
timestamp |
数据时间戳 | 每次输出持续增加 |
fix_type |
定位类型 | 室外最终至少达到 3 |
satellites_used |
使用的卫星数量 | 室外逐渐增加并趋于稳定 |
latitude_deg |
纬度 | 定位后为有效值 |
longitude_deg |
经度 | 定位后为有效值 |
altitude_msl_m |
海拔高度 | 定位后为有效值 |
eph |
水平精度估计 | 定位后逐渐降低并稳定 |
epv |
垂直精度估计 | 定位后逐渐降低并稳定 |
vel_m_s |
地面速度 | 静止时接近0 |
常见 fix_type:
| 数值 | 含义 |
|---|---|
0 |
没有有效 GPS |
1 |
没有定位 |
2 |
2D定位 |
3 |
3D定位 |
4 |
DGPS |
5 |
RTK Float |
6 |
RTK Fixed |
GPS在室内可能已经有非零串口数据,但长时间无法达到 3D Fix。这表示通信已经建立、卫星信号不足,和 rate reading: 0 B/s 是不同问题。
5.3 检查 EKF2 是否融合 GPS
ekf2 status
然后查看融合标志:
listener estimator_status_flags -n 1
重点关注类似字段:
cs_gnss_pos: True
cs_gnss_vel: True
只有 sensor_gps 有数据,不代表 EKF 一定已经采用它。EKF还会检查定位类型、精度、数据质量和稳定时间。
5.4 检查最终位置输出
listener vehicle_global_position -n 3
listener vehicle_local_position -n 3
判断链路如下:
GPS串口收到字节
│
▼
gps驱动解析UBX数据
│
▼
sensor_gps持续发布
│
▼
EKF2检查质量并融合
│
▼
vehicle_global_position / vehicle_local_position
6. 推荐的一次性检查命令
重启飞控后,按顺序执行:
param show GPS_1_CONFIG
param show GPS_2_CONFIG
gps status
listener sensor_gps -n 5
ekf2 status
listener estimator_status_flags -n 1
listener vehicle_global_position -n 3
listener vehicle_local_position -n 3
预期参数应为:
GPS_1_CONFIG = 202
GPS_2_CONFIG = 0
7. 如果改为 GPS2 后仍然没有数据
如果重启后已经看到:
port: /dev/ttyS6
但仍然是:
status: NOT OK
rate reading: 0 B/s
说明参数端口已经正确,问题转向硬件、线序或设备类型。按以下顺序检查。
7.1 检查供电
- GPS模块指示灯是否亮。
- GPS2接口是否有正确供电电压。
- GPS模块需要的电压是否与飞控接口兼容。
- 插头是否完全插入、方向是否正确。
7.2 检查 UART 线序
UART连接需要交叉:
GPS TX → 飞控 RX
GPS RX → 飞控 TX
GPS GND → 飞控 GND
GPS VCC → 正确电源
不同厂家即使使用相同外形插头,针脚顺序也不一定一致。不能仅凭插头能插入就认定线序兼容,必须核对 CUAV 7-Nano 与 GPS 模块各自的针脚定义。
7.3 确认 GPS 接口类型
确认模块输出的是哪一种接口:
- UART UBX
- UART NMEA
- DroneCAN/UAVCAN
如果模块是 DroneCAN GPS,就不应插在普通 UART GPS2 口并由 gps 串口驱动读取。DroneCAN设备应连接 CAN 接口,并检查:
uavcan status
7.4 检查串口占用
确认 GPS2 没有同时配置给:
- MAVLink
- 遥控接收机
- DShot遥测
- 其他串口驱动
- Secondary GPS的另一个实例
一个物理串口通常只能由一个驱动占用。
7.5 检查协议和波特率
通常保持 GPS协议自动检测即可。当前输出已经显示协议为 UBX,但如果始终没有任何接收字节,首先仍应检查供电、线序和端口,而不是反复修改协议参数。
8. 如果将来安装两个 GPS
如果将来同时在 GPS1 和 GPS2 各安装一个串口 GPS,可以配置:
param set GPS_1_CONFIG 201
param set GPS_2_CONFIG 202
param save
reboot
对应关系:
Main GPS → GPS1 → /dev/ttyS0
Secondary GPS → GPS2 → /dev/ttyS6
两个 GPS 发布时,sensor_gps 会存在多个实例。可以使用:
listener sensor_gps -i 0 -n 3
listener sensor_gps -i 1 -n 3
具体 listener 参数以当前固件中的 listener help 输出为准。
9. 当前结论
当前状态不是“GPS有数据但没有卫星定位”,而是:
GPS插在GPS2物理口
│
▼
PX4仍在读取GPS1对应的/dev/ttyS0
│
▼
读取速率为0 B/s
│
▼
GPS状态NOT OK
当前应先应用:
param set GPS_1_CONFIG 202
param set GPS_2_CONFIG 0
param save
reboot
重启后,以 gps status 是否显示 /dev/ttyS6 和非零 rate reading 作为第一步验证。通信正常后,再到室外等待 fix_type >= 3,最后确认 EKF2 已经融合 GNSS 位置和速度。