赞
踩
1.启动跟新gps的数据的任务是在ArduCopter.cpp中scheduler_tasks中
调用的速度是50hz
2.通过执行update_GPS方法中的
3.调转到ap_gps.cpp中的update方法中
4.在update中通过for循环遍历每个gps
5.当AP_GPS,type[0],1选择的参数是1及为自动判断类型
6.若为自动判断类型,第一次执行会认为当前的gps的状态是NO_GPS则执行gps类型判断
7.进入到识别gps的类型的方法中会先执行一段发送初始化的代码,这部分代码有意思的是它可以实现每隔1200ms改变波特率,来发送初识配置gps的代码
8.在while循环中判断挨个遍历端口读取到的数据
9.在遍历到数据后根据不同gps的detect来识别该gps是哪种类型的gps
10.识别成功后会将gps的类型设置好
11.在之后再调用update_gps之后就会执行
12.以上是gps的数据读取和gps类型的设置接下来再看一下当是司南或和芯星通的设备时数据是如何读取的
13.由上调用gps的read即AP_GPS_NMEA.cpp中的read()
14.通过端口读取到端口的字符长度numc循环,每次读一个字符,然后跳转到decode(字符)
15.在进入到decode中后会先选择case’$’后将各种变量初始化
16.如果是普通字符例如G等字符则执行:
17.而当遇到’,’ ’;’ ‘\r’ ‘\n’ ‘*’等就会执行
18.并且执行_term_complete的同时会将_term_number加1, _term_offset置0
这样当执行_term_complete()的时候就会依据_term_number == 0来判断该报文是哪种报文
19.而其他报文内容则是依据_sentence_type + _term_number来判断该报文以特殊符号所分割的内容的涵义都是什么例如:GPGGA报文的第7个特殊符号的涵义是当前gps的星数.
总结:以上就是本人总结的在pixhawk当中gps的处理过程,如果想要加入新的数据可以根据自己的需要来添加.如果内容有写的不对的地方.请大家及时提出.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。