ArduPilot开源飞控之AP_Mount_Backend_Serial

ArduPilot开源飞控之AP_Mount_Backend_Serial

  • 1. 源由
  • 2. 框架设计
    • 2.1 类定义
    • 2.2 构造函数
    • 2.3 init 方法
    • 2.4 受保护成员
  • 3. 重要方法
  • 4. 总结
  • 5. 参考资料

1. 源由

AP_Mount_Backend_Serial是AP_Mount_Backend基于串口的通信的一个扩展模版。

2. 框架设计

  • 继承自 AP_Mount_Backend
  • 添加了与串行通信相关的功能

2.1 类定义

class AP_Mount_Backend_Serial : public AP_Mount_Backend
{// 类成员和方法在这里定义
};
  • 这行声明了一个新的类 AP_Mount_Backend_Serial,它继承自基类 AP_Mount_Backend

2.2 构造函数

public:// 构造函数AP_Mount_Backend_Serial(class AP_Mount &frontend, class AP_Mount_Params &params, uint8_t instance, uint8_t serial_instance) :AP_Mount_Backend(frontend, params, instance),_serial_instance(serial_instance){}
  • 构造函数被定义为 public,意味着可以从类外部访问。
  • 构造函数接受四个参数:
    • AP_Mount &frontend:一个指向 AP_Mount 对象的引用。
    • AP_Mount_Params &params:一个指向 AP_Mount_Params 对象的引用。
    • uint8_t instance:一个无符号 8 位整数,表示实例编号。
    • uint8_t serial_instance:一个无符号 8 位整数,表示串行实例编号。
  • 构造函数使用初始化列表将基类 AP_Mount_Backend 初始化为 frontendparamsinstance 参数。
  • _serial_instance 成员变量使用 serial_instance 参数进行初始化。

2.3 init 方法

void init() override;
  • 这是一个 public 方法,名为 init,它覆盖了基类中的一个虚方法。
  • init 方法用于执行此实例所需的任何初始化操作。代码片段未提供此方法的实际实现。

2.4 受保护成员

protected:// 内部变量AP_HAL::UARTDriver *_uart;      // 与云台连接的 UARTuint8_t _serial_instance;       // 该实例的串行实例编号bool _initialised;              // 如果 UART 已经初始化,则为 true
  • protected 部分包含内部成员变量,可以被这个类和派生类访问。
  • AP_HAL::UARTDriver *_uart:一个指向 AP_HAL 命名空间中 UARTDriver 对象的指针,表示与云台的 UART 连接。
  • uint8_t _serial_instance:一个无符号 8 位整数,存储该对象的串行实例编号。
  • bool _initialised:一个布尔变量,指示 UART 是否已经初始化。

3. 重要方法

AP_Mount_Backend_Serial::init初始函数,设置了串行实例,并调用基础类AP_Mount_Backend::init

// Default init function for every mount
void AP_Mount_Backend_Serial::init()
{const AP_SerialManager& serial_manager = AP::serialmanager();// search for serial port.  hild classes should check that uart is not nullptr_uart = serial_manager.find_serial(AP_SerialManager::SerialProtocol_Gimbal, _serial_instance);if (_uart == nullptr) {return;}// initialised successfully if uart is found_initialised = true;// call the parent class initAP_Mount_Backend::init();
}

4. 总结

整个基础类的集成关系,这里梳理一遍:

AP_Mount_Backend├──> AP_Mount_Alexmos├──> AP_Mount_Gremsy├──> AP_Mount_Scripting├──> AP_Mount_Servo├──> AP_Mount_SoloGimbal├──> AP_Mount_SToRM32├──> AP_Mount_Xacti└──> AP_Mount_Backend_Serial├──> AP_Mount_SToRM32_serial├──> AP_Mount_Siyi├──> AP_Mount_Viewpro└──> AP_Mount_Topotek

通过上面的梳理,整个云台设备业务逻辑是通过AP_Mount来整合,包括摄像头、测距仪、摄像头跟随。

5. 参考资料

【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码Task介绍
【3】ArduPilot飞控启动&运行过程简介
【4】ArduPilot之开源代码Library&Sketches设计
【5】ArduPilot之开源代码Sensor Drivers设计
【6】ArduPilot开源飞控之AP_Mount
【7】ArduPilot开源飞控之AP_Mount_Backend

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sentieon应用教程:本地使用-Quick_start

1、准备工作: License下载链接:http://www.sentieon.com/eula/b703e839c8c7c5b8fa73238277fd5da23a0276be54712edb46ee8f4d4f3d873fbf 软件下载地址: https://insvast-download.oss-cn-shanghai.aliyuncs.com/Sentieon/release/sentieon-gen…

11-《风信子》

风信子 风信子(学名:Hyacinthus orientalis L.):是多年草本球根类植物,鳞茎卵形,有膜质外皮,皮膜颜色与花色成正相关,未开花时形如大蒜,原产地中海沿岸及小亚细亚一带&am…

【Vue】vue-element-admin组件化功能

1. 组件的封装 在vue-element-admin中,每个功能区域或UI元素都被封装成一个或多个Vue组件。这些组件可以是简单的按钮、输入框,也可以是复杂的表格、表单或页面布局。每个组件都包含了其模板(HTML结构)、逻辑(JavaScr…

【论文精读】Exploring the Causality of End-to-End Autonomous Driving

背景信息 团队:百度 代码:https://github.com/bdvisl/DriveInsight 论文思想简述:这篇论文并不是提出SOTA模型,而是提出了一些评估模型的方法。 目前已有的分析方法 大语言模型。VAQ来提供解释性,比如DriveVLM&…

C++基础(二)

目录 1.类和对象 1.1类的定义 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.类的默认成员函数 4.1构造函数 4.2析构函数 4.5运算符重载 1.类和对象 1.1类的定义 类的定义格式 class为定义类的关键字,Stack为类的名字&…

7月11日学习打卡,数据结构栈

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之…

dataX入门

下载dataX https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 然后 下载后解压至本地某个目录,进入bin目录,即可运行同步作业: $ cd {YOUR_DATAX_HOME}/bin $ python datax.py {YOUR_JOB.json} 要求你有python…

vue-grid-layout详解

vue-grid-layout 教程 vue-grid-layout 是一个用于 Vue.js 的响应式拖放网格布局组件,允许开发者创建可调整大小、可拖放的布局,广泛用于仪表板、管理面板等复杂布局需求。本教程将介绍如何安装、配置和使用 vue-grid-layout。 目录 安装基本使用 布局…

怎样在 C 语言中进行类型转换?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…

暑假自律日记九

7.10 (半小时日记打卡之——暑假第九天) 前言:或许是累了,今天的效率和进度可以说是历史最低了,调休了一天,算是歇会 日程 八点二十起床,在床上赖了一会 九点二十抵达逸夫楼,开始补…

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

Spring Boot中的安全配置与实现

Spring Boot中的安全配置与实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Spring Boot中的安全配置与实现&#xff0c;看看如何保护你的…

在表格中把tab换成enter键------ivx

为了方便用户输入&#xff0c;把tab键替换成enter回车 方法如下&#xff1a; 添加一个fx函数 document.addEventListener(‘keydown’, function(event) { if (event.key ‘Enter’ && !event.shiftKey) { event.preventDefault(); var focusableElements document.q…

昇思25天打卡营-mindspore-ML- Day22-应用实践-自然语言处理-LSTM+CRF序列标注

昇思25天打卡营-mindspore-ML- Day22-应用实践-自然语言处理-LSTMCRF序列标注 今天学习了 LSTMCRF 序列标注方法&#xff0c;它是一种结合了循环神经网络&#xff08;RNN&#xff09;和条件随机场&#xff08;CRF&#xff09;的强大模型&#xff0c;用于处理序列标注问题&#…

【C++BFS】690. 员工的重要性

本文涉及知识点 CBFS算法 LeetCode690. 员工的重要性 你有一个保存员工信息的数据结构&#xff0c;它包含了员工唯一的 id &#xff0c;重要度和直系下属的 id 。 给定一个员工数组 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 个员工的 ID。 employees[…

RabbitMQ 高级功能

RabbitMQ 是一个广泛使用的开源消息代理&#xff0c;它支持多种消息传递协议&#xff0c;可以在分布式系统中用于可靠的消息传递。除了基本的消息队列功能外&#xff0c;RabbitMQ 还提供了一些高级功能&#xff0c;增强了其在高可用性、扩展性和灵活性方面的能力。以下是一些主…

软件架构之嵌入式系统设计(2)

软件架构之嵌入式系统设计&#xff08;2&#xff09; 12.4 嵌入式网络系统12.4.1 现场总线网12.4.2 家庭信息网11.4.3 无线数据通信网12.4.4 嵌入式 Internet 12.5 嵌入式数据库管理系统12.5.1 使用环境的特点12.5.2 系统组成与关键技术 12.6 实时系统与嵌入式操作系统12.6.1 嵌…

MyBatis(38)MyBatis 如何与 Spring Boot 集成,有哪些实践技巧

集成MyBatis与Spring Boot可以极大地提升开发效率&#xff0c;简化配置&#xff0c;并利用Spring Boot的自动配置特性优化项目结构和性能。下面我们将详细探讨如何实现这一集成&#xff0c;并分享一些实践技巧。 1. 添加依赖 首先&#xff0c;在pom.xml中添加MyBatis和Spring…

AI学习指南机器学习篇-聚类树的剪枝

AI学习指南机器学习篇-聚类树的剪枝 在机器学习领域&#xff0c;聚类是一种常用的无监督学习方法&#xff0c;通过对数据进行分组来发现数据中的结构和模式。聚类树是一种常用的聚类算法之一&#xff0c;它通过构建一个树状结构来展示聚类的层次关系&#xff0c;并能够帮助我们…

Linux 忘记root密码,通过单用户模式修改

银河麒麟桌面操作系统 V10&#xff08;sp1&#xff09;”忘记用户密码&#xff0c;需要修改用户密码所写&#xff0c;可用于 X86 架构和 arm 架构。 2. 选择第一项&#xff0c;在上图界面按“e”键进行编辑修改。 3. 在以 linux 开头这行的行末&#xff0c;添加“init/bin/bas…