- 博客(112)
- 收藏
- 关注
原创 3、部分功能介绍(3.1. HAL 类)
HAL 类(全名 AP_HAL::HAL)是 ArduPilot 项目中的硬件抽象层(Hardware Abstraction Layer)核心类,也是 ArduPilot 系统中连接飞控核心代码与具体硬件平台的桥梁,实现了底层硬件的统一抽象和管理,保证了代码的高可移植性与模块化。HAL 类的成员变量保存了各类硬件驱动对象的指针(如 rcin、rcout、gpio、console、i2c_mgr 等),各模块通过 hal 对象访问对应硬件。DataFlash 存放板载日志文件。4、初始化与生命周期管理。
2025-07-29 10:57:38
3
原创 3、部分功能介绍(3.6 ArduPilot 解锁操作流程详解(以Copter为例))
ArduPilot 中的解锁(arm)操作是一个多层次的安全检查流程,确保飞行器只有在所有安全条件都满足的情况下才能解锁。从代码可以看到,Copter 类中包含了 AP_Arming_Copter arming 成员变量,这是解锁管理的核心组件。MAVLink解锁命令 → AP_Arming → AP_Arming_Copter → AP_Motors::armed()触发解锁 - 通过多种方式(遥控器、MAVLink、开关等)状态检查 - 检查当前是否已解锁强制检查 - 执行无法跳过的安全检查。
2025-07-28 08:30:11
9
原创 2、开发环境安装
飞行控制系统(Flight Controller, 简称“飞控”)作为无人机等自主系统的核心,其研发对硬件与软件环境有着较高的要求。为了高效地开发、调试和测试飞控算法,开发者需要搭建一个完善且适配自身需求的开发环境。本章节将详细介绍飞控开发所需的基础环境配置、工具链选择与常见开发平台的安装步骤,帮助读者快速进入飞控系统的开发实践环节。安装步骤如下:1、更改Ubuntu软件源:为阿里云软件源注意:这里的软件源可以选择清华软件源、中科大软件源、网易163软件源等。2、更新软件源仅更新软件包列表,不进行实际的更
2025-07-26 09:43:44
45
原创 1、虚拟机安装
本文档详细介绍了在VMware Workstation 16 Pro上安装Ubuntu 22.04虚拟机的完整流程。内容包括VMware软件和Ubuntu系统的下载链接、安装步骤说明、硬件资源配置建议(CPU核心数、内存和磁盘空间分配),以及安装过程中关键配置项的注意事项(如ISO文件选择、磁盘分区方式等)。特别提醒了64位系统选择需与ISO文件匹配,并配图说明安装类型界面。文档提供了完整的技术参考,适合需要搭建Ubuntu虚拟开发环境的用户参考使用。
2025-07-26 09:25:44
14
原创 C++ 智能指针
shared_ptr// 创建空的智能指针;内部的智能计数器为0,而不是1std::shared_ptr<int> p1;std::shared_ptr<int> p2(nullptr);// 创建的时候,指明其指向std::shared_ptr<int> p3(new int(10));std::shared_ptr<int> p4 = std::make_shared<int>(10);// 调用拷贝构造函数进行赋值std:
2022-04-13 01:02:02
582
1
原创 Linux清空特定进程
#!/bin/sh# ps -efww: 显示所有进程# grep: 在结果中搜索包含特定字符串的条数# awk: 将文本按照空格进行换行处理,之后进行输出# xargs:将前面的输出,作为参数传递给后面的命令# ps -efww | grep _screen | grep -v "grep" | awk '{print $2}' | xargs kill -9 ;# ps -efww | grep /home/pi/fixedWing_ws/devel/lib/ | grep -v "g
2021-09-28 09:43:18
284
原创 git: 修改环境变量
fengxuewei@fengxuewei-Legion-Y7000-2019-PG0:~$ env|grep -i proxy HTTP_PROXY=http:// 127.0.0.1:7890/https_proxy=http:// 127.0.0.1:7890/http_proxy=http:// 127.0.0.1:7890/ALL_PROXY=socks:// 127.0.0.1:7891/no_proxy=localhost,127.0.0.0/8,::1NO_PROXY=loca
2021-09-21 22:31:52
418
原创 git: 远程仓库和本地仓库
内容协调只进行一次克隆即可仓库抓取:fetchfengxuewei@fengxuewei-Legion-Y7000-2019-PG0:~/gitTest02/git_test$ git fetch remote: Enumerating objects: 3, done.remote: Counting objects: 100% (3/3), done.remote: Compressing objects: 100% (2/2), done.remote: Total 2 (delta 1
2021-08-22 22:20:02
163
原创 git:远程仓库
远程仓库创建和绑定1、在远程仓库中创建一个仓库2、需要在本地验证是否是本人的操作 一般是使用 SSH公钥# 生成公钥,不断回车ssh-keygen -t rsa# 查看秘钥cat ~/.ssh/id_rsa.pub# 将上面现实的秘钥内容,复制到 gitee 中,来配置 公钥# 验证是否成功ssh -T [email protected]、告诉本地仓库,所对应的远程仓库是哪一个# 远程绑定# 需要添加一个远程仓库: git remote add# 远程仓库的地址是: <
2021-08-22 22:19:35
145
原创 git:本地仓库
Git - 1版本控制适用场景:1、备份;2、代码还原;回滚3、协同开发;4、代码追责问题方式:集中式版本控制工具(SVN 和 CVS)、分布式版本控制工具(git)git 每一台电脑上面都有一个版本库 ==> 分布式分支和合并install安装了git之后,首先需要设置 用户名称和 email 名称git 版本控制,需要知道什么人做了那些操作,通过邮箱和用户名来实现这个控制git config --global user.name "xxx"git config --g
2021-08-22 22:18:59
156
原创 20210730
20210730文件的操作:对文件操作的方式:追加、创建、重写。。。;只读模式、只写模式;文本模式、二进制模式ifstream \ ofstream: 等价于在文本文件和输入输出流中打开一条通道,流就是 他们的对象二进制文件的读取:文本文件和二进制文件的区别:将 \r\n 和 \n 进行一层转换.电脑中的所有文件都是二进制的方式存储的。那么为什么会文本模式和二进制模式呢?因为 在 windows 下面,每行结束的时候,最后面会有两个看不到的字符(回车\r、换行\n),windows 下面以
2021-07-30 20:41:56
145
原创 20210728
20210728C-plus-plus异常处理机制:在c语言中,异常处理,是通过 if 语句来分条件进行判断在 C++ 语言中,异常处理,是通过返回一个异常事件对象的方式来表示异常,进行做相应的处理异常为什么好?1、函数的返回值可以忽略,但是异常不可忽略,必须进行处理2、整数返回值没有语义信息,而异常却包含语义信息;(根据异常进行匹配,抛出一个异常对象,根据异常对象的类名就可以判断异常的特点)3、异常可以调用跳级;假如 func1 调用 func2 ,func2 调用 func 3 ,在fu
2021-07-28 11:55:00
116
原创 计算机硬件(3): CPU
CPU程序最先是存放在硬盘中的,然后程序的运行需要先经历加载的过程(程序的代码、数据从硬盘中读入内存)然后CPU从内存中读取指令来运行安装的软件都安装在硬盘里面,软件的运行都是把数据加载到内存中。因此,计算机硬盘的大小决定了能够安装的软件数目,而计算机内存的大小决定了计算机能够同时运行的软件数目cpu 指令集:提供给人类进行调用三步走:取指(从内存中取到所需要运行的指令)解码(解析指令,理解 读懂)运行(执行指令)1. CPU 从内存(主存)中取出指令2. 程序:就是一堆代
2021-07-05 22:27:10
543
1
原创 计算机硬件(2): 计算机硬件组成
计算机硬件组成计算机(电脑) ==》 人大前提:计算机的所有组成都是模仿人的某一器官功能去设计的1、控制器2、运算器 控制器 + 运算器 ==》集成在 CPU 上面(中央处理器) CPU 可以等价于一个人,那么一个人在不接受其他控制命令之前,是有控制各个控件的能力。(CPU 指令集)程序都是最终转换为 CPU内部的指令集来实现具体的功能程序 ==》 指令集 ==》 硬件3、存储器 内存 外存4、输入设备(对应着人类的眼睛、皮肤等) 键盘、鼠标5、输出设备 显
2021-07-05 22:26:10
171
原创 计算机硬件(1):计算机简介
计算机硬件1. 电脑需要电流直接控制2. 操作系统帮助用户将底层的实现细节实现好内核(程序)对计算机硬件进行直接控制有了内核之后,可以不需要直接使用电流对底层硬件进行驱动,程序相对简单了好多。但是对于一些非专业人士,还是有很大的难度进行使用因此,假如内核有 10万 个功能,我们可以将其进行分类包装,进行简化接口,进而形成了系统接口(简易程度再次加大)==》完成了操作系统的实现那么,可以继续往上进行封装,进行简化功能。到达了应用程序这一层各类解释器将操作系统提供的接口进行了再次封装
2021-07-05 22:25:21
157
1
原创 C++内存分配规则
#include <iostream>#include <string.h>using namespace std;// 程序的内存地址的划分// 1. 操作系统位数不同,地址划分也会存在一定的差别。但是有一些核心区域是固定的// 内存区域划分: // 保留区:0开始,C库函数(不能变动) // 代码区: 一个程序执行的时候,会按照次序依次从代码区调用程序运行(也是不可修改的) // 全局变量区: 包括两个部分:.data (非0值)、.
2021-07-05 19:12:49
216
原创 0705
https://renzhesub.com/link/vyfs0miqRzPfUl5P?clash=1https://renzheapi.com/sub?target=clash&new_name=true&url=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttps%2Frenzhesub.com%2Flink%2Fvyfs0miqRzPfUl5P%3Fsub%3D1&insert=false&config=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttps%2Fcdn.jsdelivr.net%2Fgh%2FSereneWin
2021-07-05 11:20:46
2884
原创 CNN
卷积神经网络input: A two-dimensional array of pixelsprocessor: CNN (box)output: what the picture is?计算机可以看到的是数字化的矩阵 识别出 图片的 特征,发现其与原图的相似性 比如;一个图片存在三个特征,将这三个特征提取出来, 成为 "卷积核" 或者 "特征提取器"CNN 的三个操作第一步: 卷积运算: ==> feature map Line up the feature and
2021-05-21 11:59:17
263
原创 yolo: dark train my custom database
1. 自定义数据集合==> 训练集 & 测试集 文件路径分别保存到 : train.txt 和 valid.txt 2. 修改 yolov4-tiny-custom.cfg 文件中必须的参数3. 预训练模型 yolov4-tiny.conv.294. *.data 文件。 输入 classes 个数, train.txt / valid.txt 路径, classes.txt 路径5 classes.txt 文件。内容是 label 名称列表## *.dataclas
2021-05-20 19:45:28
415
原创 Gammar(1)
For website: https://www.englishclub.com/grammar/rules.htmwhat is Grammar?syntax (语法) and morphology (词法)Grammar is not a 'rule', because it is not created the rules first.What we call "grammar" is simply a reflection of a language at a particular ti
2021-05-11 11:54:56
379
原创 Gazebo(3): ModelStructedAndRequirement
the way of loading models into simulation1\ programmatically (code)2\ the GUIThis document describes Gazebo's model directory struct, the necessary files within a model directory.In Gazebo, models define 1\ a physics entity(object) with dynamic,
2021-05-09 23:31:58
215
原创 gazebo(2):Gazebo Architecture
Uses a distributed architecture with seperate libiraries for physics simulation\ rendering\ user interface\ communication\ sensor generationThe gzclient and gzserver communicate using the gazebo communication library.Communication
2021-05-09 23:30:29
151
原创 Gazebo(1): Gazebo Components
the document is summarized from the website http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b1what is the gazebo?1、3d dynamic simulator 2、accurately and efficiently simulate3、support in complex indoor and outdoor environments.Gazebo is use
2021-05-09 23:29:19
166
原创 c语言数据结构 -单向循环链表
#include "CircylarLinkedlists.h"typedef struct PERSON{ CircylarLinkNode node; char name[64]; int age; int score;}Person;void MyPrint(CircylarLinkNode*);int MyCompare(CircylarLinkNode*, CircylarLinkNode*);void test01();void test02.
2021-04-05 20:46:42
585
原创 c语言数据结构 - 线性表的企业链式存储
概述NULLcode#include "LinkList.h"/** * 1. 首先定义数据类型,内部包含了 LinkNode 小挂钩(内部存放下一个节点地址) 和 数据域(内部存放name 和 age) * 定义其对象P1 * 2. 使用一个LinkNode指针来指向 该对象 P1 地址且进行强制转换为 LinkNode 类型 * (指针赋值相互操作的机制,因为是 指针类型是 LinkNode 类型, 而Person 第一个数据也是该类型 * 所以使用该指针可以访问到第一快内存,若想
2021-04-05 13:48:56
119
原创 linux学习(1): 基础指令和进阶指令
文章目录基础指令lscpmv输出重定向cat进阶指令dffree 指令head 指令tail 指令less 指令wc 指令date 指令(重点)cal 指令基础指令lsls 输出显示 的颜色:蓝色代表文件夹;黑色代表文件;绿色表示该文件/文件夹拥有所有权限cpcp linux1.txt /home/linux123/linux1.txtcp linux1.txt /home/linux123/linux10.txt # 可以改名字linux 复制的时候可以为文件重新命名,但是一般不介意复
2021-04-04 19:36:29
238
原创 c语言数据结构 - 线性表的链式存储
概述NULLcode#include "LinkList.h"// 自定义数据类型typedef struct PERSON{ char name[64]; int age; int score;}Person;// test 函数void test02();void test03();void test04();// 用户自定义 打印函数void myPrint(void*);int main(int argc, char **argv){
2021-04-03 21:49:36
215
原创 c语言数据结构 - 线性表的顺序存储
线性表顺序存储#include "DynamicArray.h"void test01(){ // 1. 初始化一个动态数组 Dynamic_Array* myArray = Init_Dynamic_Array(); // 打印容量 printf("打印容量: %d\n", Capacity_Dynamic_Array(myArray)); printf("数组大小: %d\n", Size_Dynamic_Array(myArray)); //
2021-04-02 23:53:58
98
原创 matlab simulink: Linearizing the plant
想要线性化一个设备,你需要告诉 simulink 设备的模型是哪一部分!通过增加线性分析点来指定输入和输出信号。即设备的输入和输出。这个时候已经定义了 设备的输入和输出信号,接下来就是需要对其进行自动线性化至此, 已经获得了该设备的 线性化模型。LTI 系统。该LTI系统是设备的近似到此,就已经获取了非线性系统的线性化(等价于非线性曲线的切线)线性化分析...
2021-03-29 17:48:26
1016
原创 uart通信
文章记录源: http://www.1zlab.com/wiki/micropython-esp32/uart/uart 通信uart 是一种采用异步串行通信方式的通用异步收发传输器同步通信:带时钟同步信号的数据传输,发送方和接收方在同意时钟的控制下,同步传输数据异步通信:不带时钟同步信号的数据传输,发送方和接收方使用各自的时钟控制数据的发送和接收过程。异步收发若在两个设备中加一个添加两根线(rx-tx, tx-rx),让左边的设备在成为发送方的同时也可以成为接收方,右边的设备在成为发送方的同时
2021-03-29 17:41:50
644
原创 matlab simulink:simulink time
simulink 知道如何评估系统,自动选择为你选择一个好的求解器。但一个自动求解器不能决定你的仿真应该运行多久。系统选定的自动求解器,最大的时间间隔计算公式为:hmax=tstop−tstart50h_{max} = \frac{t_{stop} - t_{start}}{50}hmax=50tstop−tstart当 simulink stop time 设置称为 10s, 那么每执行一次的时间步长为 10/50 = 0.2s/step, 相当于,两个点之间的间隔太长,连线看起来折
2021-03-21 11:09:32
2746
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人