You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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

这段输出表示:

  1. GPS驱动已经启动。
  2. 驱动正在把 /dev/ttyS0 当作 Main GPS 端口。
  3. /dev/ttyS0 对应物理 GPS1 接口。
  4. 当前 GPS 实际插在物理 GPS2 接口,即 /dev/ttyS6
  5. 驱动当前读取了错误的物理串口。
  6. rate reading: 0 B/s 表示该串口没有收到任何 GPS 字节。
  7. 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_CONFIGGPS_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_CONFIGGPS_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 位置和速度。