FollowMe设计思路
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设计思路相关推荐
- 第 5 章 Nova - 025 - OpenStack 通用设计思路
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例 nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...
- 亿级流量网关设计思路
本文准备围绕七个点来讲网关,分别是网关的基本概念.网关设计思路.网关设计重点.流量网关.业务网关.常见网关对比,对基础概念熟悉的朋友可以根据目录查看自己感兴趣的部分. 什么是网关 网关,很多地方将网关 ...
- 传授“带权重的负载均衡实现算法”独家设计思路!
作者|孙玄/陈东 分布式系统中,大部分系统调用都会涉及到负载均衡,例如:客户端发往服务端的请求首先到达反向代理,然后反向代理再通过负载均衡算法将请求转发到业务系统:或者后端业务系统各模块间的调用前,也 ...
- 会计期间在ERP开发中的设计思路
会计期间在ERP开发中的设计思路 2010年08月03日00:00 it168网站原创 作者:IT168 阿峰 编辑:李倩 评论:1条 本文Tag: ERP ERP开发 系统分析 [IT168 专 ...
- “私有云”安全的“过渡”时期-“云朵”方案的设计思路
一.私有云安全的尴尬现状 云计算因为能够提供虚拟化的资源池.弹性的服务能力.自助服务等,深得CIO们的青睐,为了提高企业IT设备的利用率,提高服务容灾的能力,提高对业务支撑的快速响应能力,大多数的企业 ...
- OpenStack 通用设计思路 - 每天5分钟玩转 OpenStack(25)
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求. 以 Nova 为例,nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 ...
- 总体设计和登陆服务器 [游戏服务器的设计思路 转]
作者博客: http://blog.csdn.net/yahle 大纲: 项目的历史背景 服务器的设计思路 服务器的技术 服务器的设计 服务器的改进 图形引擎myhoho及UI库的设计 客户端与服务器 ...
- Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战
本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...
- 我的微信'智障聊天助手'的设计思路
2019独角兽企业重金招聘Python工程师标准>>> 前言 每次写前言最费神,就是感兴趣想研究研究,有了一点点成果希望分享交流,如果能帮助别人就很好,如果有人指导一下就更好了.这次 ...
最新文章
- “巨杉数据库”获1000万美元B轮融资,DCM领投
- XenApp/XenDesktop 7.11中对于视频、图片、文字的优化的说明
- vscode Python 运行环境配置
- oracle的scn增量备份,【Oracle】基于SCN的增量备份修复DataGuard GAP
- 为什么说选择正确的编程语言很重要,以及如何正确的选择
- 适合初学者的安卓开源项目_开源周初学者
- mysql以下日期函数正确的_[数据库]MYSQL基础03(日期函数)
- 【Java程序设计】接口与多态
- VMProtect修复导入表的插件
- 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
- rpg模拟器汉化android版,nekorpg模拟器
- ACI注册国际项目考试地点汇总
- Hive 官网函数全列表(聚合函数/日期函数/字符串函数...)
- 最详细的工业网络通讯技术与协议总结解读(现场总线、工业以太网、工业无线)
- 超声波测距 c语言程序流程图,超声波模块测距51程序_单片机超声波测距c语言
- R语言使用order函数对dataframe数据进行排序、基于多个字段(变量)进行降序排序(DESCENDING)
- 人工智能——离线情况下自动给视频添加字幕,支持中文,英文,日文等等
- 自实现微微型axios
- 机器学习和特征工程理论与python代码实现 晓物智联
- MTK-展讯修改笔记
热门文章
- 明可夫斯基距离和马氏距离
- 【Tools】PDF编辑软件-pdfelement 6.8 官网文件中文+破解版本
- PLC电气控制基本原理1--点动连续运动两地控制
- DDR5 SDRAM简要前瞻以及DRAM DIMM和DCPMM配置指南
- android R 修改wifi信号强度
- (HTM)时间沉积池算法细节-翻译
- rem、vw可伸缩布局框架(fpx)
- 计算机音乐文爱,文爱_CG贺敬轩_单曲在线试听_酷我音乐
- Zemax,LightTools中LED光源设置总结
- jmeter 监测服务器性能,24. Jmeter使用ServerAgent对服务器进行性能监控