1. 引言
车辆定位监控系统是基于卫星定位、移动通信等技术对车辆进行合理管控的一套系统,在物流追踪、户外作业监控等场景中具有重要应用价值。
北斗卫星导航系统(BDS)作为四大全球定位导航系统之一,中国自主建设和运行的全球卫星导航系统,其全球服务体系于2020年全面建立。北斗在亚太地区具有比GPS更好区域定位精度[1]。
在国外,C Gwatirisa等借助GPS追踪技术,可以准确监测家畜放牧分布[2];我国学者也使用大规模GPS轨迹分析旅行目的地分布[3]。但是,使用单一定位系统在复杂城市环境具有很大的局限性,且历史轨迹查看功能的缺少会导致无法对常用路径做出合理性评估与规划。因此,采用包括北斗系统在内的双模定位技术,可以充分发挥多模系统的互补优势,从而提高整体定位性能和系统可靠性。是复杂环境下智能定位应用的优选方案。
本文利用双模定位技术,结合STM32F103C8T6处理器、无线通信模块、传感器等单元电路,实时解析获取的用户位置信息,同时,使用无线通信技术对此位置信息进行传输,在终端调用百度地图去实时查看位置信息,并绘制出历史轨迹,实现对移动目标的高精度轨迹追踪与可视化。
将在物流运输追踪、个人出行、户外作业、车辆管理等实际场景中具有重要应用价值。也为北斗系统在民用领域的深入推广与智能交通的发展提供了技术参考。
2. 系统总体设计方案
2.1. 模块选型
2.1.1. 定位模块
在硬件选取方面,本设计主要对ATGM336H支持北斗三号、GPS、GLONASS六频点。在开阔环境下,水平定位精度(CEP50)为2.3米,在城市峡谷场景中,通过多径抑制算法将误差控制在6.8米,捕获灵敏度为−148 dBm,跟踪灵敏度−165 dBm。在连续工作模式下的电流为28 mA (3.3 V),待机电流0.1 μA,支持UART、I2C、SPI三种通信协议,内置北斗三号特色服务,符合我国自主可控政策导向。
2.1.2. 无线通信模块
为了实现车载终端与上位机之间的远程数据传输,本系统需选用一款稳定可靠、传输距离适中、功耗低的无线通信模块。
LORA模块(如ATK-LORA-01)是一种基于扩频调制技术的低功耗广域网通信技术,在无遮挡开阔环境下通信距离可达1~3公里,满足车载设备与固定接收终端的远距传输需求;超低功耗,适合嵌入式系统连续运行,适配STM32低功耗控制逻辑;模块自带串口通信接口,无需额外协议栈支持,便于快速集成与调试;LORA调制技术具有良好的频谱扩展能力,适用于复杂电磁环境下的稳定通信。
因此,综合考虑通信距离、功耗、稳定性和开发便利性,最终选用正点原子ATK-LORA-01串口模块作为系统的数据无线传输组件。该模块已集成射频电路与协议处理芯片,支持固定频段通信,配合STM32可实现简洁高效的数据发送与接收。
2.1.3. 模块简介
核心控制器STM32F103VCT6是STMicroelecronics公司发布的32位增强型通用微处理器产品,具备较高的处理能力和丰富的外设资源,广泛应用于工业控制、智能设备和消费类电子产品中。其LQFP48封装形式为系统开发提供了便利,能够引出37个可编程GPIO口,满足大多数外设连接需求。
2.2. 多模联合定位技术优势
在全球卫星导航系统技术持续发展的背景下,单一卫星系统已经难以满足复杂环境下对高精度定位的需求。多模联合定位技术,即同时使用多个卫星导航系统(如GPS、北斗、GLONASS)协同定位,已成为提高定位性能的重要趋势。
在城市峡谷、复杂道路、恶劣天气等情况下,单一卫星系统容易因遮挡或信号干扰导致定位中断,而多模定位具备更强的抗干扰能力与容错能力,系统自动切换至信噪比更高的卫星组合继续定位,提升系统鲁棒性。此外,当某一系统发生短时异常或维护(如GPS漂移事件),联合使用其他系统可保障定位不中断。最后,从区域适应性角度看,北斗系统在中国及亚太区域拥有更多的区域导航卫星,信号强度更高,启动速度更快;与GPS协同定位,可进一步优化初始定位时间和动态追踪性能,提升车辆在起步、转弯等短时变化工况下的定位灵敏度[4]。
2.3. 系统总体架构设计
本系统需满足车载环境下车辆实时定位与远程监控的核心功能需求,涵盖定位数据采集、处理、传输与可视化全流程。定位功能要求支持北斗三号(BDS)、GPS多系统联合解算,通过ATGM336H模块实现原始卫星信号接收与解析,输出包含经度、纬度、速度、时间等信息的NMEA-0183标准数据流。模块需具备自动选择最优卫星组合的能力,在信号遮蔽场景下仍能维持至少4颗卫星的稳定锁定。数据传输功能需采用正点原子无线串口模块建立双向通信链路,支持TCP/IP协议下的数据实时上传与指令下发,要求在网络中断时自动缓存最近30秒数据,确保轨迹连续性。本地显示功能通过0.96寸OLED屏幕实现基础定位信息可视化,需设计多级菜单系统支持经纬度、时间等参数的切换显示,屏幕刷新率不低于1 Hz。
远程监控平台需基于百度地图API开发,实现车辆位置实时映射、历史轨迹回放等功能。通过上述功能设计,系统可满足物流运输、共享出行、应急救援等场景下的车辆动态监管需求。系统性能指标满足《车载北斗定位终端技术规范》。
系统架构如图1,它以STM32F103C8T6主控芯片为核心,链接ATGM336H北斗/GPS双模定位芯片、正点原子ATK-LORA-01无线串口模块、0.96寸SSD1306OLED显示屏,实现定位、无线传输和显示功能。首先ATGM336H通过北斗卫星信号实时获取经纬度数据(定位精度2.5米),并输出NMEA-0183协议格式的定位信息;STM32主控芯片通过UART串口解析原始数据(格式,如:$ GPRMC,084103.00,A,2233.3954,N,11356.5566,E,0.035,220618,A*7A)提取经度、纬度、卫星数量及定位状态,
Figure 1. System architecture diagram
图1. 系统架构示意图
设置5秒为时间窗口(更新序列时间戳递增1秒),对GPRMC (Global Positioning System Recommended Minimum Navigation Message)中的速度或位置字段进行滑动平均后,驱动OLED屏幕动态显示。其次,主控芯片将处理后的坐标数据通过无线串口模块以470 MHz频段发送至电脑端;电脑端运行Python脚本接收数据并调用百度地图API(需申请AK密钥),通过坐标转换算法将经纬度映射至电子地图,实现车辆位置的实时标记,同时支持历史轨迹回放功能[5]。
STM32F103C8T6芯片内部集成了3个独立的串口模块(USART1, USART2, USART3),为本系统各功能模块提供了灵活的通信接口。其主要承担四项任务:一是接收与解析ATGM336H输出的NMEA-0183格式定位数据;二是将解析结果通过串口发送至ATK-LORA-01模块进行远程通信;三是驱动OLED模块显示经纬度、时间等信息;四是响应用户按键中断,实现显示内容的翻页切换。在本设计中,UART2接收ATGM336H定位数据,并完成数据解析与格式化处理;UART3发送处理数据至LORA模块将经处理的坐标数据通过无线串口模块传输出去;I2C控制OLED屏幕刷新内容;GPIO(中断输入)检测按键按下事件。
LORA通信自适应机制为自适应数据速率(ADR),通过动态调整扩频因子(SF)、带宽(BW)和编码率(CR)来优化通信性能与功耗。参数调整逻辑为SF (7~12)决定每个符号的比特数,SF增大则符号持续时间延长、接收灵敏度提高(每增1级约3 dB),但数据速率下降;BW (125/250/500 kHz)和CR (如4/8)也可动态优化,以平衡抗干扰性与传输效率。
串口初始化过程中,需设置波特率(9600 bps)、数据位(8位)、停止位(1位)及校验方式(无校验),确保与GPS模块和LORA模块的数据格式一致。STM32使用HAL库或标准外设库可轻松实现串口初始化和中断收发机制,在后续的数据处理过程中亦可灵活扩展[6]。
3. 系统软件设计
斗汽车定位系统采用KeilµVision5嵌入式处理器进行程序设计,编程语言为C语言,基于LORA无线通信技术结合可视化监测设计。软件的主要功能包括北斗定位数据采集与解析、数据无线传输、MQTT协议封装数据上传[7]。
上位机系统作为数据可视化与地图交互的核心部分,采用Python语言进行开发。Python具有简洁的语法和强大的生态系统,适用于串口通信、网络请求、数据处理以及图形化界面的快速开发。尤其在与百度地图API对接方面,Python能够通过标准库或第三方模块实现高效的HTTP请求与JSON解析[8]。
主程序流程如图2。
Figure 2. Flowchart of the main program
图2. 主程序流程图
3.1. 北斗定位数据解析
在实际应用中,ATGM336H模块主要通过NMEA-0183协议输出定位数据,该协议格式通用、简洁,广泛适配各种嵌入式平台和上位机系统。其中,GPRMC语句是最核心的数据源之一,包含了时间、经度、纬度、定位状态、速度、航向角和日期等关键信息[9]。
NMEA-0183常用命令如表1所示:
Table 1. NMEA-0183 common commands
表1. NMEA-0183常用命令
序号 |
命令 |
说明 |
最大帧长 |
1 |
$GNGGA |
GPS/北斗定位信息 |
72 |
2 |
$GNGSA |
当前卫星信息 |
65 |
3 |
$GPGSV |
可见GPS卫星信息 |
210 |
4 |
$BDGSV |
可见北斗卫星信息 |
210 |
5 |
$GNRMC |
推荐定位信息 |
70 |
6 |
$GNVTG |
地面速度信息 |
34 |
7 |
$GNGLL |
大地坐标信息 |
-- |
8 |
$GNZDA |
当前时间(UTC1)信息 |
-- |
程序中,纬度与经度经转换后将用于LORA发送与地图定位;系统每秒会刷新一次解析结果,并覆盖旧数据,确保数据实时性[10]。北斗解析模块流程如图3所示。
Figure 3. Beidou parsing module flowchart
图3. 北斗解析模块流程图
3.2. OLED显示与页面切换程序设计
OLED显示模块主要用于实时显示定位信息,包括经纬度、时间和系统状态等。通过按键控制切换不同页面,使用户可灵活查看各项核心数据。首先从驱动初始化开始,通过配置STM32的I2C外设,设置正确的时钟、地址和通信协议,然后调用初始化函数对OLED内部寄存器进行设置,包括关闭显示、设置寻址模式、设置对比度、开启显示等命令。驱动初始化完成后,系统即可通过主程序向OLED传输字符信息。默认页面下,OLED显示“纬度”、“经度”、“时间”等关键字段,并随GPS解析更新而刷新。
3.3. LORA无线通信模块程序设计
在本设计中,LORA通信部分采用两块正点原子ATK-LORA-01模块进行点对点通信,一端与STM32主控板相连,另一端连接上位机(通过USB转串口)。本模块的主要任务是将STM32端解析后的定位数据,通过LORA无线链路实时传输至上位机,实现远距离、低功耗的数据传输[9]。LORA无线通信流程如图4。
Figure 4. LORA wireless communication module flowchart
图4. LORA无线通信模块流程图
STM32通过UART接口与ATK-LORA-01模块通信,配置波特率为9600,采用标准8N1数据格式。通信协议为自定义的结构化文本协议,便于上位机解析。发送数据采用帧结构格式,每帧包含帧头、经纬度数据、UTC时间及帧尾,确保接收端能准确提取有效内容。
在STM32主循环中,当GPS数据解析完成后,将坐标数据封装成标准格式后调用串口发送函数。数据如:#113.945,22.547,2025-05-15T10:31:00$。其中#为帧头,$为帧尾。
为了提升通信可靠性,STM32在每次发送数据后,启动一个定时器并等待上位机通过反向LORA链路回传确认信息;若在设定时限内未收到,将自动重发数据帧最多三次。这种机制保证了关键定位信息的传输完整性。
上位机通过USB转串口接收数据,配合Python脚本进一步解析坐标并进行地图标注。上位机可视化部分作为最终交互展示界面,承担着接收车辆定位信息、进行地图标注及轨迹可视化的功能。通过Python语言结合百度地图开放API,不仅实现了车辆实时位置的精准标记,同时支持历史轨迹的动态回放,如图5所示[11]。
Figure 5. Trajectory visualization
图5. 轨迹可视化
4. 设计总结
本文完成了从硬件选型、电路搭建、软件设计到系统测试的全过程,成功实现了一套具备定位、无线通信、显示与可视化等功能的车辆定位系统。
经过实验测试,系统在室外开阔环境下定位精度达到2.5米左右,通信距离可稳定达到4000米以内,系统运行稳定满足中短距离车辆定位与轨迹回放需求。
但是,采用LORA无线通信模块点对点连接的方式,通信速率设定为9600 bps,丢包率最优为2%,随着通信距离增加丢包率也在增大,且在建筑密集区域精度下降至3.7米左右;在树林覆盖区域存在一定干扰,最大误差达到5.2米,存在较大波动。因此,远距离通信质量的改善和定位精度稳定性和适应性仍然需要进一步探索与研究。
基金项目
国家级大学生创新计划项目:基于北斗差分定位技术的滑坡检测与预警系统(202410719031)。
NOTES
*通讯作者。