FollowMe模块设计思路与学习总结


组成结构

  • FollowMe (跟踪引导)

实现思路

FollowMe

头文件包含以下头文件:

  • #include < QTimer>
  • #include < QObject>
  • #include < QThread>
  • #include < QGeoPositionInfo>
  • #include < QGeoPositionInfoSource>
  • #include < QElapsedTimer>
  • #include “QGCToolbox.h”
  • #include “MAVLinkProtocol.h”

源文件包含以下头文件:

  • #include < QElapsedTimer>
  • #include < cmath>
  • #include “MultiVehicleManager.h”
  • #include “FirmwarePlugin.h”
  • #include “MAVLinkProtocol.h”
  • #include “FollowMe.h”
  • #include “Vehicle.h”
  • #include “PositionManager.h”

定义一个结构体motionReport_s,包含时间标记,X轴位置,Y轴位置和高度,XYZ轴速度和加速度。

定义一个新枚举,位置为0,速度为1,加速度为2,高度等级为3。

定义变量:

  • estimatation_capabilities (估算能力)
  • _**gcsMotionReportTimer** (定时器定时发出运动报告)

定义一个公有槽: void followMeHandleManager(const QString&); (跟踪引导处理管理器) 如果飞行器有PX4固件且飞行模式包含PX4,那么调用enable函数启动并返回,否则不启动。

定义两个私有槽:

  • void _**setGPSLocation**(QGeoPositionInfo geoPositionInfo); (设置GPS位置) 如果GPS信息有效,则获取当前的位置坐标,赋值到经度纬度高度,计算XYZ轴的速度。
  • void _**sendGCSMotionReport**(void); (发送门控开关运动报告) 初始化一个追踪目标,并设置它的各项参数。如果飞行器的飞行模式与PX4飞行模式相比为0的话,获取飞行器的信息,并通过连接发送信息将该飞行器设为优先连接。

初始化:将estimatation_capabilities初始化为0,将运动报告结构体中的数据成员用memset初始化,启动计时器并设置单次激发为false,然后把计时器和运动报告联系起来。

成员函数:

  • _**enable**() 将位置信息更新与GPS位置连接起来,设置运动报告计时器的间隔,并开始计时。
  • _**disable**() 断开位置信息更新与GPS位置的连接,停止运动报告计时器。
  • _ degreesToRadian(double deg) (角度转弧度) M_PI/180.0为弧度。

总结

FollowMe类实现了对当前位置的获取,以及XYZ轴方向上的速度计算,通过计时器不断发送位置信息,达到了对飞行器位置实时监控的目的。

#pragma once的用法

为了避免同一个文件被include多次

1 #ifndef方式

2 #pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。

方式一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif方式二:#pragma once
... ... // 一些声明语句

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

方式一由语言支持所以移植性好,方式二 可以避免名字冲突

FollowMe设计思路相关推荐

  1. 第 5 章 Nova - 025 - OpenStack 通用设计思路

    API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例 nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...

  2. 亿级流量网关设计思路

    本文准备围绕七个点来讲网关,分别是网关的基本概念.网关设计思路.网关设计重点.流量网关.业务网关.常见网关对比,对基础概念熟悉的朋友可以根据目录查看自己感兴趣的部分. 什么是网关 网关,很多地方将网关 ...

  3. 传授“带权重的负载均衡实现算法”独家设计思路!

    作者|孙玄/陈东 分布式系统中,大部分系统调用都会涉及到负载均衡,例如:客户端发往服务端的请求首先到达反向代理,然后反向代理再通过负载均衡算法将请求转发到业务系统:或者后端业务系统各模块间的调用前,也 ...

  4. 会计期间在ERP开发中的设计思路

    会计期间在ERP开发中的设计思路 2010年08月03日00:00 it168网站原创  作者:IT168 阿峰  编辑:李倩 评论:1条 本文Tag: ERP ERP开发 系统分析 [IT168 专 ...

  5. “私有云”安全的“过渡”时期-“云朵”方案的设计思路

    一.私有云安全的尴尬现状 云计算因为能够提供虚拟化的资源池.弹性的服务能力.自助服务等,深得CIO们的青睐,为了提高企业IT设备的利用率,提高服务容灾的能力,提高对业务支撑的快速响应能力,大多数的企业 ...

  6. OpenStack 通用设计思路 - 每天5分钟玩转 OpenStack(25)

    API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...

  7. 总体设计和登陆服务器 [游戏服务器的设计思路 转]

    作者博客: http://blog.csdn.net/yahle 大纲: 项目的历史背景 服务器的设计思路 服务器的技术 服务器的设计 服务器的改进 图形引擎myhoho及UI库的设计 客户端与服务器 ...

  8. Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  9. 我的微信'智障聊天助手'的设计思路

    2019独角兽企业重金招聘Python工程师标准>>> 前言 每次写前言最费神,就是感兴趣想研究研究,有了一点点成果希望分享交流,如果能帮助别人就很好,如果有人指导一下就更好了.这次 ...

最新文章

  1. “巨杉数据库”获1000万美元B轮融资,DCM领投
  2. XenApp/XenDesktop 7.11中对于视频、图片、文字的优化的说明
  3. vscode Python 运行环境配置
  4. oracle的scn增量备份,【Oracle】基于SCN的增量备份修复DataGuard GAP
  5. 为什么说选择正确的编程语言很重要,以及如何正确的选择
  6. 适合初学者的安卓开源项目_开源周初学者
  7. mysql以下日期函数正确的_[数据库]MYSQL基础03(日期函数)
  8. 【Java程序设计】接口与多态
  9. VMProtect修复导入表的插件
  10. 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
  11. rpg模拟器汉化android版,nekorpg模拟器
  12. ACI注册国际项目考试地点汇总
  13. Hive 官网函数全列表(聚合函数/日期函数/字符串函数...)
  14. 最详细的工业网络通讯技术与协议总结解读(现场总线、工业以太网、工业无线)
  15. 超声波测距 c语言程序流程图,超声波模块测距51程序_单片机超声波测距c语言
  16. R语言使用order函数对dataframe数据进行排序、基于多个字段(变量)进行降序排序(DESCENDING)
  17. 人工智能——离线情况下自动给视频添加字幕,支持中文,英文,日文等等
  18. 自实现微微型axios
  19. 机器学习和特征工程理论与python代码实现 晓物智联
  20. MTK-展讯修改笔记

热门文章

  1. 明可夫斯基距离和马氏距离
  2. 【Tools】PDF编辑软件-pdfelement 6.8 官网文件中文+破解版本
  3. PLC电气控制基本原理1--点动连续运动两地控制
  4. DDR5 SDRAM简要前瞻以及DRAM DIMM和DCPMM配置指南
  5. android R 修改wifi信号强度
  6. (HTM)时间沉积池算法细节-翻译
  7. rem、vw可伸缩布局框架(fpx)
  8. 计算机音乐文爱,文爱_CG贺敬轩_单曲在线试听_酷我音乐
  9. Zemax,LightTools中LED光源设置总结
  10. jmeter 监测服务器性能,24. Jmeter使用ServerAgent对服务器进行性能监控