所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
解码高速GPS
Tangshm2025/02/02航天技术 IP:北京

飞控使用的GPS刷新率高达18Hz以上,使用UBX协议,除了能高速读出位置坐标,还能直接读出天向、东向、北向速度等信息,利于飞控使用。无人机上通常使用飞控板解码,不够灵活和微型化。本文报道Arduino单片机解码高速GPS,可组成更为简单灵活、微型化的飞控系统。

1,器材:

GPS模块,深圳市飞空科技RC12-B0带地磁,35元/片。

单片机采用Arduino Pro Micro或更小体积的Nano mini。

2,连线:

将GPS TX线连单片机D8脚,RX连D9,Vcc和GND分别连到单片机上。

3,代码:

使用软串口(8,9)读取GPS数据,UBX数据格式固定以B5 62开头,该GPS模块数据默认为NAV-PVT格式(码01 07)。数据头B5 62后面会接92个GPS数据,判断找到数据头后,逐个读出这些数据即可,详细数据格式可参考文章《UBX 协议报文整理》CIStoner。

注意每个读数操作后要加一个delay(1)延迟一下,不然数据不对,原因不明,实测有效。不需要的数据用for循环读,节约语句和内存。该示例中所有数据打印到串口显示,实际应用于飞控就不需要串口打印。

代码故意未做过多优化,利于初学者理解和调试,可以先写短一点只读最前面几个数,一步步调试,用串口打印如XXXXXXXXXintln(length),看看读出的数据对不对。

#include <SoftwareSerial.h>

SoftwareSerial gpsSerial(8, 9); // RX, TX


void setup() {

  XXXXXXXXXgin(115200);

  XXXXXXXXXXXXgin(115200);

}

void loop() {

  if (gpsSerial.available()) {

    if (XXXXXXXXXXXXad() == 0xB5 ) {

      delay(1);

      if (XXXXXXXXXXXXad() == 0x62 ) { // 同步字符判断

        delay(1);

      uint8_t msgClass = XXXXXXXXXXXXad();

        delay(1);

      uint8_t msgId = XXXXXXXXXXXXad();

        delay(1);

      uint8_t length = (XXXXXXXXXXXXad());

        delay(1);

        XXXXXXXXXXXXad();

        delay(1);

        XXXXXXXXXintln(length);    

        XXXXXXXXXintln(msgId);    

      if (msgClass == 0x01 && msgId == 0x07) { // NAV-PVT消息

        for(int i=0;i<4;i++){

          uint8_t Dt00 = XXXXXXXXXXXXad();

          delay(1);  

        }

        uint8_t Dt1 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt2 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt3 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt4 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt5 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt6 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt7 = XXXXXXXXXXXXad();

        delay(1);

             

        // 日期和时间信息...

        XXXXXXXXXint(Dt1+Dt2*256);

        XXXXXXXXXint("-");

        XXXXXXXXXint(Dt3);

        XXXXXXXXXint("-");

        XXXXXXXXXint(Dt4);

        XXXXXXXXXint("  ");

        XXXXXXXXXint(Dt5);  

        XXXXXXXXXint("-");

        XXXXXXXXXint(Dt6);

        XXXXXXXXXint("-");

        XXXXXXXXXintln(Dt7);

        for(int i=0;i<12;i++){

          uint8_t Dt00 = XXXXXXXXXXXXad();

          delay(1);  

        }  

//经纬度信息…

        uint8_t Dt8 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt9 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt10 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt11 = XXXXXXXXXXXXad();

        delay(1);

        uint8_t Dt12 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt13 = XXXXXXXXXXXXad();

        delay(1);      

        uint8_t Dt14

        delay(1);

        uint8_t Dt15 = XXXXXXXXXXXXXXXXXXXXX();

        delay(1);

        uint8_t Dt16 = XXXXXXXXXXXXXXXXXXXXX();

        delay(1);            

        XXXXXXXXXint("卫星数");    

        XXXXXXXXXintln(Dt8);

        XXXXXXXXXint("经度");    

XXXXXXXXXintln((1.0*Dt9+1.0*Dt10*256+1.0*Dt11*256*256+1.0*Dt12*256*256*256)/10000000.0);

        XXXXXXXXXint("纬度");    

XXXXXXXXXintln((1.0*Dt13+1.0*Dt14*256+1.0*Dt15*256*256+1.0*Dt16*256*256*256)/10000000.0);

      }

    }

  }

  }

}




来自:航空航天 / 航天技术动手实践:实验报导严肃内容:教程/课程
7
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
ZZCjas
1个月22天前 IP:湖北
944114

大佬问一下,这个可以防止gps限高限速吗?


引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Tangshm作者
1个月22天前 IP:北京
944115
引用ZZCjas发表于1楼的内容
大佬问一下,这个可以防止gps限高限速吗?

“防止”?是想说“规避”吗?法规要自觉遵守哈~😳


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ZZCjas
1个月22天前 IP:湖北
944117
引用Tangshm发表于2楼的内容
“防止”?是想说“规避”吗?法规要自觉遵守哈~😳

不是的,就指的是民用gps超一定高度或一定速度

直接锁星丢星的现象,之前看虎哥说过自己写个解算程序就可以解决问题,所以问一下😅


引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Tangshm作者
1个月22天前 IP:北京
944118
引用ZZCjas发表于3楼的内容
不是的,就指的是民用gps超一定高度或一定速度直接锁星丢星的现象,之前看虎哥说过自己写个解算程序就可

有可能哦!这个也不大好测试,尤其是高速,好一点火箭经常就超音速。高度限制估计几公里内不会有问题,不然都不实用了。还打算用个氢气球系留升空测试一下,升到高空后来个自由落体,也许可以测个高速


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ZZCjas
1个月22天前 修改于 1个月22天前 IP:湖北
944119
引用Tangshm发表于4楼的内容
有可能哦!这个也不大好测试,尤其是高速,好一点火箭经常就超音速。高度限制估计几公里内不会有问题,不然

御坂18650的ssr3A就是升到3000m直接丢星

了,具体可以看帖子和下面虎哥的评论

https://www.kechuang.org/t/85313#container

IMG_3016.png


引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Tangshm作者
1个月22天前 IP:北京
944123

看了,看看怎么测试一下!


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Tangshm作者
1个月22天前 IP:北京
944129
引用ZZCjas发表于5楼的内容
御坂18650的ssr3A就是升到3000m直接丢星了,具体可以看帖子和下面虎哥的评论https:/

这个GPS的操作极限指标

Screenshot_20250517_212621_com.taobao.taobao_edit_578610430022126.jpg

加速度这个是比较局限的


引用
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
Tangshm
学者 机友
文章
10
回复
96
学术分
1
2024/11/16注册,2时3分前活动

研究神经科学的火箭工程师

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:北京
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的