You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Ublox M9N模块的GPS经纬度移动计算技术问询

基于摇杆步进经纬度的遥控模型实现方案

1. 解析初始NMEA获取起始坐标

从你提供的$GNRMC,162254.00,A,3723.02837,N,11150.39853,W,0.820,188.36,110706,,,A*74语句中提取起始经纬度,转成十进制格式方便计算:

  • 纬度(N为正):37 + 23.02837/60 = 37.383806°,记为lat0_dec
  • 经度(W为负):-(111 + 50.39853/60) = -111.839976°,记为lon0_dec

2. 摇杆绑定经纬度步进规则

直接给摇杆方向绑定经纬度增减逻辑,同时确定步进精度:

  • 摇杆上推:纬度NMEA值+0.00001(如3723.02837→3723.02838),对应十进制纬度增加0.00001/60≈0.000000167°
  • 摇杆下推:纬度NMEA值-0.00001
  • 摇杆右推:经度NMEA值+0.00001(西经场景下,经度十进制值会变大,对应向东移动)
  • 摇杆左推:经度NMEA值-0.00001
  • 步进精度可调整:如果要让模型单次移动1米左右,可根据所在纬度计算对应经纬度差(纬度L处,1经度差≈111000*cos(L)米,1纬度差≈111000米)

3. 计算相对起始点的角度与距离

把当前经纬度和起始点都转成十进制后,用Haversine公式计算:

距离计算(单位:米)

import math

# 起始点十进制坐标
lat0_dec = 37.383806
lon0_dec = -111.839976
# 当前点十进制坐标(示例)
lat_current_dec = 37.383807
lon_current_dec = -111.839975

dLat = math.radians(lat_current_dec - lat0_dec)
dLon = math.radians(lon_current_dec - lon0_dec)
a = math.sin(dLat/2)**2 + math.cos(math.radians(lat0_dec)) * math.cos(math.radians(lat_current_dec)) * math.sin(dLon/2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
distance = 6371000 * c  # 地球半径取6371km

相对方位角计算(正北为0°,顺时针递增)

y = math.sin(dLon) * math.cos(math.radians(lat_current_dec))
x = math.cos(math.radians(lat0_dec)) * math.sin(math.radians(lat_current_dec)) - math.sin(math.radians(lat0_dec)) * math.cos(math.radians(lat_current_dec)) * math.cos(dLon)
bearing = (math.degrees(math.atan2(y, x)) + 360) % 360

4. 可选:生成模拟NMEA语句输出给模型

如果模型需要接收GPS信号,把更新后的经纬度转回NMEA格式:

  • 十进制转ddmm.mmmmm:比如十进制纬度37.383807° → 整数37,小数0.383807*60=23.02842 → 格式为3723.02842,N
  • 经度同理处理后拼接成GNRMC语句,最后计算校验和(将$与*之间的所有字符做异或运算,结果转十六进制)

5. 硬件联动逻辑

  • 用ADC读取摇杆模拟值,判断触发方向(如模拟值>阈值触发上推/右推,<阈值触发下推/左推)
  • 把计算出的方位角、距离用大字体显示在屏幕上,方便视力不佳时查看
  • 直接将方位角映射为模型舵机角度,距离映射为油门大小,实现自动控制

内容的提问来源于stack exchange,提问作者Camerart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:32:33