四旋翼飞行器的姿态解算小知识点

2023-05-16

1、惯性测量单元IMU(InertialMeasurement Unit)

姿态航向参考系统AHRS(Attitude and Heading Reference System)

地磁角速度重力MARG(Magnetic, Angular Rate, and Gravity)

微机电系统MEMS(Micro Electrical Mechanical Systems)

自由度维数DOF(Dimension Of Freedom)

无人驾驶飞行器UAV(Unmanned Aerial Vehicle)

扩展卡尔曼滤波EKF(Extended Kalman Filter)

无损卡尔曼滤波UKF(Unscented Kalman Filter)

惯性导航系统INS(Inertial Navigation System)

全球导航卫星系统GNSS(Global Navigation Satellite System)

天文导航系统CNS(Celestial Navigation System)

可垂直起降VTOL(Vertical Take-off and Landing)

2、  常见的导航系统:惯性导航、天文导航、卫星导航、路标导航、无线电导航、推算导航、组合导航。

3、  有两个基本坐标系地理坐标系和载体坐标系。”地理”坐标系指的就是地球上的“东北天(ENU)”坐标系,而“载体”坐标系值的就是四轴自己的坐标系。

4、  在“地理”坐标系中,重力的值始终是(0,0,1g),地磁的值始终是(0,1,x)。这些值就是由放置在四轴上的传感器测量出来的。

5、  “地理”坐标系和“载体”坐标系是两个不同的坐标系,需要转化。转化的方法就是坐标系的转换,目前有三种方式:四元数(q0123)、欧拉角(yaw(Z轴)/ pitch(Y轴)/roll(X轴)属于其中一种旋转顺序Z-Y-Xà航空次序欧拉角)、方向余弦矩阵(9个系数)。

6、  所谓的姿态,就是公式+系数。比如:欧拉角公式和欧拉角的系数(翻滚、倾仰、偏航)

7、  姿态的数据来源有5个:重力、地磁、陀螺仪、加速度计、电子罗盘。其中前两个来自“地理”坐标系,后三个来自“载体”坐标系。

8、  导航的基本原则就是保证两个基本坐标系的正确转化,没有误差。只有实现了这个原则,载体才可以在自己的坐标系中完成一系列动作而被转换到地理坐标系中看起来是正确的。为了达到这个目标,需要对两个坐标系进行实时的标定和修正。因为坐标系有三个轴,偏航yaw修正由电子罗盘(基于载体)、地磁(基于地理)对比修正误差补偿得到。倾仰pitch和翻滚roll上的修正由加速度计(基于载体)、重力(基于地理)对比修正误差得到。在完成了基本原则的基础之后,即保证两个坐标系的正确转化后,利用基于载体上的陀螺仪进行积分运算,得到基于载体坐标系的姿态数据,经过一系列PID控制,给出控制量,完成基于载体坐标系上的稳定控制后,反应到地理坐标系上的稳定控制,从而达到我们观察到的定高、偏航、翻滚、倾仰等动作。

对于上述论述可以看出,导航姿态从理论上讲只用陀螺仪是可以完成任务的。但是由于陀螺仪在积分过程中会产生误差累计,外加上白噪声、温度偏差等会造成导航姿态的解算随着时间的流逝而逐渐增加。所以就需要用加速度计在水平面对重力进行比对和补偿,用来修正陀螺仪的垂直误差。但是对于竖直轴上的旋转,加速度计是无能为力的,此时用的是电子罗盘。他也可以测量出水平面内的地磁方向用来修正陀螺仪的水平误差。通过这两个器件的修正补偿,使得陀螺仪更加稳定、可靠的工作

9、  加速度计在地球上测量的是重力加速度,如果载体沿着z轴旋转,加速度计是无法感知他的运动的;类似的,电子罗盘测量的是地球上的磁场方向,如果载体沿着y轴旋转,电子罗盘同样也是无法感知他的运动的。综上所述,加速度计和电子罗盘只能得到2维的角度关系,通过某种方式的融合,可以得到正确的三维姿态信息。

10、   在这里要弄清楚一个问题,前面第8条所说的关于地理坐标系和载体坐标系之间的互相转化。这样就有两种转换方向:一是把B系(载体)转换到N系(地理);二是把N系转到B系。当我们在实际控制当中,我们关心的显然是载体坐标系相对于地理坐标系之间的变化,所以我们通常使用的旋转矩阵是把N系转到B系的矩阵(两者的关系是转置关系)。比如本次在利用加速度计计算姿态误差时,可以利用上一次的四元数姿态在N系中的三个轴的垂直分量转换到B系中垂直分量来算误差。 式中的右边为N系到B系的旋转矩阵的第三列元素(恰好是重力g在B系中的值)

11、   在单位时间内的位移被定义为速度,速度有线速度和角速度之分,分别对应两种传感器测量这两种不同的速度:线速度传感器(加速度计)、角速度传感器(陀螺仪)。所以,陀螺仪是用来测量角速度的,用于坐标系的旋转,也就是导航姿态了。加速度计只能测量线速度,最典型的例子就是重力加速度,如果加上水平坐标系上的加速度,形成合力F产生a。考虑一个导弹,他的飞行速度由加速度计来测量而飞行过程中的转体姿态由陀螺仪来测量

12、   当我们把加速度计拿在手上随意转动时,我们看的是重力加速度在三个轴上的分量值,无法直观的观察到三个轴上的加速度分别是多少。为了实现这样一个目的(可以看到每个轴上的真实加速度),我们需要一个旋转矩阵,这个矩阵的作用就是把放置在载体坐标系上的加速度计值转换到参考坐标系中,在参考坐标系中,三个轴上的值始终都是(0,0,1)。所以当我们把加速度计以任意角度固定在空间中时,无论加速度计的三个轴的值是多少,当经过旋转矩阵变换后,在参考坐标戏中输出的值始终都是(001-->这表明在参考坐标系中,物体在x和y轴上是没有加速度的,只有在z轴上存在重力加速度。但是这里又存在一个问题,既然z轴的输出是1,就是说存在加速度,物体应该运动起来才对。但是这里物体并没有运动。为什么输出是1呢?这涉及到加速度计的设计问题:加速度计测量加速度是通过比力来测量,而不是通过加速度。通过想象一个盒子中的小球就就可以明白。加速度计只有在自由落体时,其输出为0

13、   便于记忆的一个例子就是如何从青山到黄家湖。对于一个人来讲,要从青山到黄家湖,必须满足两个要求:1、你必须有张武汉地图,并且知道黄家湖的位置和青山的位置。2、你必须带有方向导航系统,实时更新你目前的朝向。对应到飞行导航上面,黄家湖的位置对应“地理”坐标系,青山的位置对应“载体”坐标系。你的目的就是让这个两个坐标系被正确转化和标定。这部分工作交给加速度计和电子罗盘处理。至于你具体是走过去,骑自行车去,乘公交去还是做出租车过去,对应在飞行导航上面的话,利用的陀螺仪通过积分作用确定自己的动态姿态。

14、           单轴融合的最简单的例子:在这里,K= 控制周期/传感器采样周期。

15、   在复数域里面,二维坐标通过对复数的加减乘除运算可以快速方便地表达出来,尤其是旋转。现在考虑三维空间的复数向量的拉伸和旋转,或者更高维度。那么就需要一个复数域坐标系,容易想到的形式就是h=a+bi+cj,事实证明在二维复数域里面简单添加一元j是无法构成三维复数空间的,实际上需要四个参数才能够构建三维复数空间(两个变量决定轴的方向,一个变量决定旋转角度,一个变量决定伸缩比例),即h=a+bi+cj+dk。这就是四元数的基本表达形式(其中i2=j2=k2=-1)。即用四个变量来表达三维空间的位置坐标,这就是复数域和实数域的不同。但是,这样定义是有前提条件的,即牺牲了乘法的交换律。例如两个四元数hp≠ph。如此一来,就出现了Q8乘法矩阵表。

16、   对四元数更进一步分析,发现四元数可以写成一个实数加上一个三维向量的和,即h=d+u(其中d为实数,u为三维向量)。令p=w+v,则

其中,实数乘法和内积具有乘法交换律,但是三维向量的外积不同,有 u x v = -v x u。所以,hp-ph就是两个向量外积的两倍如果两个向量部分外积为0,那么乘法运算就可交换了。

17、   对于四元数的乘法pq,就是在四维空间F上一个线性变换,因此必有两个互相垂直的二维不变子空间,分别是(1,0,0,0)和u张成的二维平面(这个平面在四维空间中,我们无法看到全貌,只能看到与我们相交的一条直线,即u)和由u1和u2组成的二维平面(u1和u2是在u的三维空间中找到的三者两两垂直的符合右手定则的一组基,这个平面我们是可以看到的)。所以四元数的乘法的几何意义就是在这两个二维不变子空间中做伸缩旋转的线性变换角度。伸缩因子为||p||(从(1,0,0,0)到u旋转,从u1到u2旋转)。如果p乘在右边,第一次旋转与上述方向相同,但是第二次旋转方向则与上述相反。本条所述内容全部发生在四维空间中,记住,四元数无法表示四维空间中的所有拉伸旋转,因为他要求两个不变子空间上的旋转角相同。但是他完全可以表示三维空间中的所有拉伸旋转。如果要讨论三维空间,那么四元数是完全可以胜任的。

18、   在三维空间用应用四元数乘法做线性变换时,会存在两次旋转,一次从(1,0,0,0)到u的旋转,第二次从u1到u2的旋转。前者旋转发生在四维空间,我们看不到,只看到u这一条交线。但是第二次旋转发生在三维空间,我们是可以看到的

19、   我们来看一下在三维空间中是如何旋转的。给定一个三维向量p(0,x,y,z),这是用四元数来表示的。然后做四维空间中的线性变换RPQ(Q为R的共轭向量,并且R为单位四元数,即N(R)=1),得到的答案就是(0,x’,y’,z’)。其中R=(cos(theta/2),alpha*sin(theta/2),beta*sin(theta/2),gama*sin(theta/2)),且alpha2+ beta2+gama2=1。这表示:在三维空间中将P向量绕着(alpha,beta, gama)轴逆时针旋转theta角度,长度不变。之所以为什么是theta/2,是因为在四维空间中实际上只转了theta角度。

20、   关于高维空间的知识。低维度事物无法感知在高维度发生的事情和动作。比如我们将一条纸袋旋转对折后首尾相连后在纸带的一面沿着直线一直画线,在二面平面上我们一直以为我们走的是直线,但是在三维上我们却是在走圆,只不过首尾相接,二维无法感知,这是在三维上干的事情。并且低维度的实物只能观察到高维度的实物在低纬度上的投影图像,比如扑克牌人看到的人体模型就是用一张纸纵切我们的人体,比如我们在现实生活中看到的人的外貌其实是四维空间在三维空间上的投影而已。二维空间上看到的直线有可能在三维空间上是一个圆,所以三维空间上看到的直线有可能在思维空间上是一个圆。所以我们在用四元数表达三维空间的时候,看到的实际上是四维空间中的一个切线,我们看到的直线有可能在四维空间是一个圆。

21、   球极投影对于从低维到高维的理解是比较好的一种方式。比如地球的地图球极投影。

22、   将一个数乘以-1,相当于找到对应与原点的镜像相反数,再乘以-1后又回到了原来的位置。这样的一个-1x-1的过程,相当于把数字转了360度。也就是说-1就意味着将数字旋转180度。现在定义一个数,只需要旋转90度,即出现 。在这里特别注意一下,我们在横坐标上操作的是只具有一维长度的实数,这样定义会出现一个不在横坐标上的数,这样需要扩展维度,如此一来,定义i为旋转90度,对应画出垂直于横坐标的纵坐标,就出现了复平面。既然是二维的平面,就需要两个数来表示坐标,正如我们的实数平面中的x和y坐标。但是复数不同,复数只需要一个复数就可以表达一个平面位置的拉伸和旋转

23、   四元数p=[w,u](其中w为标量,u为矢量)。描述的是一个旋转轴一个旋转角度。如果用一个向量乘以一个四元数p,表示的是该向量在这个旋转轴旋转一个特定角度。

24、   用于表示旋转的方法有很多:Axis/angle欧拉角方向余弦矩阵四元数。相比于其他几种表示方法,四元数具有不存在欧拉角存在的gimbal lock 问题、只需要4个系数而非方向余弦矩阵的9个系数、两个四元数更容易插值、两个四元数相乘表示旋转等优点。

方向余弦矩阵系数太多,难以插值。

欧拉角虽然表达简单,但是存在Gimbal lock问题(即可能失去一个自由度)

Axis/angle的问题如同欧拉角。

25、   用四元数直接表示旋转是很困难的,所以我们可以采用欧拉角来表示,但是在进行空间旋转的计算和插值时,需要对欧拉角和四元数进行转化,因为直接计算欧拉角会遇到Gimballock问题,而用四维空间中的四元数进行计算没有此类问题,并且插值简单(因为在思维空间中进行插值,就是在三维球形空间中的最短路径问题,个人理解,可能有误)。这就是优缺点的互补:采用欧拉角来表示当前载体的姿态,而在具体计算时将其转化为四元数

26、 该融合方案是将加速度计和地磁计的值经过QUEST算法融合后计算出四元数abcd,然后和陀螺仪的输出(角度速率)经过卡尔曼滤波后给出物体的估计四元数q。其中QUREST算法可以换成高斯算法(需要大量矩阵运算,可能需要DSP)或者梯度下降算法(折衷算法)。

27、  

28、   这样图从理论上给出了融合的具体依据。图中的中间竖线表示高斯算法,左下角关于四元数的微分方程很重要,该方程将四元数和角度变化率联系起来构成常系数齐次线性微分方程。两个相加融合后积分后再归一化,即可得到物体的姿态四元数表达式。再经过欧拉角的变换即可转换为我们熟知的Roll,Pitch,Yaw。

29、   从一个坐标系到另一个坐标系的转换前面谈到有多种转换方法:欧拉角法、方向余弦矩阵法、四元数法等。其中欧拉角法的核心思想是:一个坐标系可以用另一个参考坐标系的三次空间旋转来表达。旋转坐标系的方法又有两种:一种是依次旋转三个不同的坐标轴;另一种是相邻两次旋转不同的坐标轴。第一种旋转方法称之为Tait–Bryan angles(可选顺序有x-y-z, y-z-x, z-x-y,x-z-y, z-y-x, y-x-z);第二种旋转方法称之为Euler angles(可选顺序有z-x-z, x-y-x, y-z-y,z-y-z, x-z-x, y-x-y)。另外还有两个概念,外在旋转(extrinsic rotations)和内在旋转(intrinsic rotations)。我们固定不动的参考坐标系为xyz,需要被旋转的坐标系为abc。初始状态两个坐标值完全重合,现在的目标是旋转坐标abc到达指定位置。所谓的外在旋转指的是三次旋转中每次旋转的旋转轴都是固定参考系中的xyz轴中的一个轴。例如:Tait–Bryan angles的xyz顺序,那么在旋转abc的时候,每次旋转把abc坐标系围绕固定参考系xyz中的某个轴旋转;而内在旋转指的是在旋转abc的时候,每次旋转围绕的的轴是上一次abc旋转后的某个轴。打个比方,就好比数学中的数列问题,题目一般给出的是n项和n-1项的关系表达式,n项的值是根据前一项推导出来的,建立在前一次的值之上,而通项公式则是可以直接通过n的表达式计算任意第n项的值,比如计算第10项的值直接通过n的表达式就可以计算出来,而不需要通过计算第9项、第8项…直到第一项后再反推。外在旋转好比通项公式,每次旋转都是通过固定的参考系xyz旋转而来,与旋转过程中的abc状态无关。而内在旋转则需要根据上次旋转后转轴,在这个转轴的基础上再旋转,所以旋转轴是变动的,好比数列中的n项和n-1项的递推关系。关于内在旋转和外在旋转的关系,如果将其中一种旋转的第一次旋转和第三次旋转互换位置,那么他们就是等价的上图为内在旋转。(联想数列公式的n项和n-1项关系)

A rotation represented by Euler angles (α, β, γ) =(−60°, 30°, 45°), using z-x’-z″intrinsic rotations

上图为外在旋转。(联想数列公式的通项公式)

The same rotation represented by (γ, β, α) = (45°, 30°, −60°), usingz-x-z extrinsic rotations

可以看到最终的坐标系姿态相同。

最后关于Tait–Bryan angles,由于是在三个参考坐标系xyz上的旋转,所以刚好可以利用这个性质用来导航,就形成了roll、pitch、yaw等概念。但是这是一种外在旋转,我们画图经常利用的是内在旋转(因为便于记忆,好画),所以就需要利用内在旋转和外在旋转的关系:互换第一次旋转和第三次旋转的位置。刚才已经说明。并且在一些参考文献(James, D.,Representing Attitude: Euler Angles, Unit Quaternions, and Rotation Vectors)中会涉及到一些欧拉角转换的图解实例,如果出现Tait–Bryan angle,比如顺序为1-2-3,但是在图解时使用的是内在旋转,此时真正的旋转顺序是3-2-1,即替换13的位置。特别注意!!!

30、    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四旋翼飞行器的姿态解算小知识点 的相关文章

  • 安装CUDA wget下载速度慢解决办法(天下无敌)

    因为墙的原因 xff0c 再加上英伟达工作人员脑筋不会急转弯 xff0c 以及wget是个弟中弟 xff0c 下载cuda时可能会很慢 断线 xff0c 翻墙又不方便 但是没关系 xff0c 谈笑间 xff0c 让我们用一分钟成交它 以ub
  • px4下载指定版本的固件、git用法

    https hub fastgit org PX4 PX4 Autopilot git describe tag 查看当前版本号 git tag l 查看所有版本 xff0c 也就是打个tag git checkout v1 9 1 跳转到
  • YOLOX网络结构

    本文为博主DaneAI原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 原文链接 xff1a https blog csdn net happyday d article detai
  • 阿木实验室P450无人机硬件接线图备忘录

    其中数传是定制的 xff0c 相当于是路由器 43 数传二合一 xff0c 既负责地面站计算机与pixhawk的通讯 xff0c 又负责发射WiFi信号 组建局域网 xff0c 使板载英伟达NX上位机和手机 平板 笔记本电脑等远程终端连接在
  • yolov3损失函数公式及代码位置,绝对良心(更新)

    版本 xff1a darknet yolov3 环境 xff1a ubuntu16 04 本人小白 xff0c 毕设正在做基于yolov3的目标检测系统研究 xff0c 在网上找了一万遍 xff0c 基本没有靠谱的损失函数 xff0c 全是
  • 使用http协议Header中的Authorization传递token

    1 span class token annotation punctuation 64 GetMapping span span class token punctuation span span class token string 3
  • Shell命令之终端打开网页

    一句话用Safari打开百度 span class hljs built in open span span class hljs operator a span span class hljs string 34 Applications
  • 数据结构期末复习五:内部排序

    排序的基本概念和分类 排序 xff1a 将杂乱无章的数据按关键字递增 xff08 或递减 xff09 有序排列 假设Ki 61 Kj xff0c 排序前Ri领先于Rj 稳定排序 xff1a 排序后的序列Ri仍领先于Rj 不稳定排序 xff1
  • 数据同步工具DataX从Mysql同步数据到HDFS实战

    目录 1 查看数据同步模板2 高可用HA的HDFS配置3 MysqlReader针对Mysql类型转换说明4 HdfsWriter支持大部分Hive类型5 Mysql准备数据如下6 新建job mysql2hdfs json7 执行job8
  • 目标检测yolov3+文字识别CRNN 实现文本检测和识别

    参考链接 xff1a https github com chineseocr chineseocr https zhuanlan zhihu com p 34757009 https wenku baidu com view f4ec95e
  • 关于51单片机串口通信的相关知识(寄存器)

    一 51单片机串口概念 1 51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口 xff0c 具有UART xff08 通用异步收发器 xff09 的全部功能 2 51单片机的硬件连接 简单双向串口通信有两根数据通信线 xff
  • Linux服务器--TCP协议详解

    1 TCP服务的特点 传输层协议主要有两个 xff1a TCP协议和UDP协议 TCP协议相对于UDP协议的特点是 xff1a 面向连接 字节流 可靠传输 使用TCP协议通信的双方必须先建立连接 xff0c 然后才能开始数据的读写 双方都必
  • strpbrk函数

    strpbrk函数 1 函数功能 xff1a strpbrk是在源字符串 xff08 s1 xff09 中找出最先含有搜索字符串 xff08 s2 xff09 中任一字符的位置并返回 xff0c 若找不到则返回空指针 2 头文件 span
  • win10自带的office365怎么找到安装目录+mathtype

    遇到问题 xff0c 因为我要安装mathtype xff0c 但是一直显示错误代码53 显示运行时未找到mathpage wll 一般都在office文件夹中 xff0c 但是365死活在files和data中都找不到 xff0c 运行目
  • 面试问题记录

    csdn https www cnblogs com yinrw p 10795210 html 问题比较全面 问卷星 https www wjx cn xz 109293287 aspx 简述你在以前的工作中做过哪些事情 xff0c 比较
  • 学习记录2

    这是一个名字 新版换了之后跟之前的完全不太一样了 shell相关 Shell字符串截取 xff08 非常详细 xff09 苍青浪 博客园 这是一个快引用 linux相关 查看内容占用情况 输出 free m sed n 39 2p 39 a
  • leetcode 100热题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言标题easy问题合集1 有效括号问题 前言 提示 xff1a leetcode简单题目100题中的easy部分 xff1a
  • java小项目之成绩管理、排课软件、局域网聊天软件

    大三下 xff0c 想把上个学期的一些东西整理一下 可能是突然有点想法吧 我把答辩ppt以及文档要求还有项目文件夹全部都放在了我的github里面啦 点击打开链接 项目一 问题描述 xff1a 教师在教学过程中 xff0c 需要记录学生的成
  • LeetCode 114 二叉树转链表

    一 题目 分析 xff1a xff08 1 xff09 要求转化为先序遍历顺序 xff0c 这个很容易想到设置一个链表 xff0c 然后先序遍历二叉树 xff0c 把节点和指针记录在链表就好了 xff08 2 xff09 题目要求in pl
  • 使用gstreamer,rtsp拉流,保存图像, jeston,使用硬件加速nvdec/nvenc

    jeston xff0c 拉流 xff0c 使用硬件加速nvdec nvenc span class token macro property span class token directive hash span span class

随机推荐

  • LeetCoed 无重复字符的最长子串(java)

    一 题目分析 分析 xff1a 最长子串 xff0c 而不是最长子序列 子串是字符串连续的一段 xff0c 子序列是可以不连续的 所以有一种方法叫做滑动窗口法 xff0c 我记得左程云老师讲过 xff0c 那个题是计算窗口内最大或者最小值的
  • leetcode 127 单词接龙(搜索 java)

    就是给一个单词词典 xff0c 给一个开始词汇和结束词汇 xff0c 在词典中找出开始词汇转变成结束词汇的过程 xff0c 求转变次数 每次只能转变单词的一个字符 可能会有多条路径可以到达 xff0c 搜索问题可以用DFS BFS解决 xf
  • gtest单元测试配置+vs 2015+OpenCppCoverage输出测试覆盖率 || cmake命令构建项目以及编译以及命令行测试

    目录 一 仅使用gtest 43 vs2015 1 下载和编译gtest 2 创建具体的项目 3 gtest自带十个例子 二 使用gtest 43 vs2015 xff0c 并且输出测试覆盖率 1 使用vs 2015企业版 2 使用Open
  • Cmakelists配置多级目录的gtest项目(项目代码和测试代码分离)

    cmake一些语法定义 之前的博客主要写了怎么配置gtest项目 xff0c 但是一般项目代码和测试代码并不在一起 xff0c 所以尝试将代码分离 主要分成三个部分 xff0c 下面给出demo的分级目录 gtest demo CMakel
  • WGS-84 ECEF ENU 坐标系学习记录

    地球坐标系固定在地球上而随地球一起在空间做公转和自转运动 xff0c 因此地球上任一固定点在地球坐标系的坐标就不会由于地球旋转而变化 地心地固直角坐标系和大地坐标系都属于这种坐标系 一 几种坐标系 地心地固直角坐标系 xff08 ECEF
  • 关于大学生计算机未来发展的个人规划

    本人今年大二 xff0c 计算机专业 xff0c 和很多大学生一样 xff0c 在大一期间仍保持着高中的习惯 xff0c 每天只是上课听讲 xff0c 课后写作业 xff0c 复习与预习 可以说 xff0c 除了课堂上老师讲的知识和书本上有
  • 关于scanf的一些注意事项

    第一点 xff0c 设定的接受变量应以地址的方式出现在scanf内 xff0c 这是因为scanf本身是一个函数 xff0c 若不加地址相当于值传递 xff0c 无法改变对应变量的值 如 xff1a 规定输入类型是整形 xff08 d xf
  • 关于长度未知,输入几组数据之后如何终止输入

    首先 xff0c 应确定结束标准 xff0c 一般题目中会给出以输入 xffe5 或者负数之类的结束 xff0c 若题中没给 xff0c 正常情况下我们自己编码是习惯以回车作为结束符号 故可以用getchar xff08 xff09 接受一
  • 关于TortoiseGit的个人见解

    首先先放一个下载链接 xff1a Download TortoiseGit Windows Shell Interface to Git TortoiseGit是一个用于用户本身和gitee之间进行文件传输的中介 xff0c 本质上是用来简
  • c语言实现扫雷

    实现在9乘9的格子内实现扫雷游戏 xff0c 可修改格子的大小和雷的个数 思路 xff1a 初始利用随机数种子生成10个雷的位置 xff0c 通过输入x xff0c y坐标来显示当前格子是否是雷 xff0c 若是雷游戏结束 xff0c 显示
  • 使用Gstreamer拉取rtsp流,使用jeston硬件加速解码,并保存buffer为图片。

    编译 xff1a g 43 43 demo666 cc o demo666 span class token variable span class token variable 96 span pkg config cflags libs
  • 矩阵键盘驱动代码

    此代码仅提供了代码思路 xff0c 具体移植应用可以私信博主 key c include 34 stm32f10x h 34 include 34 key h 34 include 34 led h 34 include 34 sys h
  • 对于vs份文件编写代码的一些个人见解

    先说明一下为何要将代码写在不同的文件中 xff0c 这对于初学者来说可能是多此一举的 xff0c 因为明明在一个文件中就能完成的事 xff0c 为何要在多个文件中分别写 xff0c 繁琐还容易出错 先让我们明确一个观点 xff0c 就是一个
  • 不产生新变量的情况下交换整数

    思路 xff1a 利用其中一个变量同时存储两个变量的信息 xff0c 而后利用某些运算使得可以在知道其中一个的情况下求出另外一个 具体代码如下 xff1a void exchange1 int ex1 int ex2 ex1 61 ex2
  • 如何求一个数二进制1的个数

    思路 xff1a 方法1 xff1a 可以先求二进制的样式 xff0c 再计算其中1的个数 求二进制就是不断对2除和取余 xff0c 余数组成二进制 xff0c 除的结果做下次对2除和取余 xff0c 直到数字为0 方法2 xff1a 可以
  • BLE5.0蓝牙通信原理及TI BLE协议栈在CC2642上的应用

    蓝牙可以分为经典蓝牙和低功耗蓝牙 xff0c 本文重点介绍低功耗蓝牙 xff08 BLE 一 BLE协议栈结构 以TI的CC26XX芯片为例 xff0c BLE协议栈可以由如下图所示部分组成 xff1a 1 物理层 xff1a 物理层是BL
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • SVN 拉取分支(Branch/tag)和SVN合并(Merge)

    合并 xff08 Merge xff09 例子 xff1a 把对feature branch project name v3 3 7 branch的修改合并到develop 步骤1 xff1a 如图 xff0c 右键目标文件夹 xff0c
  • 宏#define的三种基本定义方式:固定值,表达式,运算符。

    define xff1a define是C语言中的预处理命令 xff0c 预处理命令以 开头 xff0c 比如我们经常写的代码 include lt stdio h gt 也是预处理命令 define用于宏定义 xff0c 作用是方便程序段
  • 四旋翼飞行器的姿态解算小知识点

    1 惯性测量单元IMU InertialMeasurement Unit 姿态航向参考系统AHRS Attitude and Heading Reference System 地磁角速度重力MARG Magnetic Angular Rat