css基础
代码
前言CSS 是层叠样式表,又叫级联样式表,后缀名为 .css ,用于是 html 中元素样式的定义
CSS 的主要作用是为了让网页具有美观一致的页面
导入到html内联样式要使用内联样式,需要在相关标签内使用 style 属性,其中的 style 属性可以包含任何 CSS 属性
但是缺乏整体性和规划性,不利于维护,维护成本高
1<p style="background-color: green; color:red">段落</p>
内部样式当单个文档需要特殊样式时,就应该使用内部样式表,可以使用 <style> 标签在文档头部定义内部样式表
这使得单个页面内的 CSS 代码具有统一性和维护性,便于维护,但是在多个页面之间容易混乱
外部样式实际上是引入外部 css 文件作为不同网页的统一样式,可以实现通过改变一个文件来改变整体的样式,需要注意的是, link 标签在文档的头部才能引入,可以链接到样式表
1<link rel="stylesheet" type="text/css" ...
html基础
代码
前言html 是一种描述网页的语言,是一种超文本标记语言,是一套标记标签,标签是被尖括号包围的关键字
html 需要有 DOCTYPE 的声明,是文档类型的缩写,声明位于文档最前面
1<!DOCTYPE html>
html标签定义 html 文档,这个元素是一种声明文档为 html ,而且其他的元素必须包含在内,限定文档的开始和结束
head标签用于定义文档的头部,文档的头部描述了文档的各种属性和信息,包括文档的标题,在 web 中的位置以及其他和文档的关系等。大部分内容都不会被看到
body标签定义文档的主体,元素包含文档的所有内容,比如文本,图像等,会在页面中直接显示
title标签可以定义文档的标题,显示在浏览器窗口的标题栏或者状态栏上,是在 head 标签中必须要包含的标签, title 标签有利于 SEO 优化
meta标签用来描述一个网页文档的属性,关键词等
标题标签标题是通过 <h1>~<h6> 标签进行定义的,其中 <h1> 定义最大的标题, <h6> 定义最小的标题
其中生成标题的快捷键 h$*1 ~ ...
GTest使用
前言在编写代码中有 bug 很常见,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的 bug ,使用 GTest 是一个不错的选择
GTest 可以用作代码的检测,一般来说可以搭配 CTest 来进行测试
单元测试就是对程序中最小的单元进行测试,最小的可测试单元可以是一个函数,一个调用过程,一个类等
对于 C/C++ 来说,测试一般是一个函数,检测目标函数在所有可能的输入下,函数执行过程和输出是否符合预期
在测试功能中,每一个单元都是一个可执行文件,实现了 main 函数,所以要在 CMakeLists.txt 中使用 add_test 命令来添加测试用例
测试用例指的是对一项特定的任务进行测试,体现着测试方案,方法,技术和策略等,包括测试目标,环境,输入数据,步骤,预期结果和测试脚本等
对于上述单元测试,就是在不同输入下,目标函数的预期执行过程和输出,不同的情形可以有一个或者多个测试用例,编写测试用例尽量覆盖所有输入情况,特别是边界值,特殊值和异常
GTest介绍是 Google 开源的一个跨平台的 C++ 单元测试框架( Google Test ...
CMakeLists编写
前言CMake是一个跨平台的构建系统,能自动生成各种平台和编译器的构建文件,相对于直接编写 makefile 文件,编写 CMakeLists 文件不需要考虑太多的文件之间的依赖关系,它可以自动帮你管理复杂项目的构建过程,检测依赖关系,生成目标文件,编译静态库和动态库等,减少手动管理的负担
可以看看这个知乎专题 CMake实践应用专题 - 知乎 (zhihu.com) ,下面的内容几乎都是从这里整理的
CMake一般使用流程生成构建系统通过 cmake 指令生成构建系统,可以在命令行中输入 cmake --help 来看到 cmake 指令支持的详细参数,常用参数如下
参数
作用
-S
指定源文件根目录,该目录下必须包含 CMakeLists.txt 文件
-B
指定构建目录,构建生成的中间文件和目标文件的生成路径
-D
指定变量,格式为 -D = , -D 后的空格可省
例如,使用当前目录为源文件目录,其中包含 CMakeLists.txt 文件,使用 build 目录作为构建目录,设定变量 CMAKE_BUILD_TYPE 为 Debug
1cma ...
makefile编写
功能makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章。Makefile执行之后所进行的操作是编译和链接,就是先将源文件编译为中间文件(object file),然后把大量的中间文件链接起来合成执行文件
规则
如果这个工程没有编译过,那么我们的所有源文件都要编译并被链接(按需)
如果这个工程某些源文件被修改,那只编译被修改的源文件,并链接目标程序
如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的源文件,并链接目标程序
基本格式123target ...: prerequisites ... command ...
target 目标文件,是命令执行后生成的目标,可以是 Object File ,也可以是执行问价,还可以是一个标签,类似于 clean
prerequisites 依赖,也就是生成目标文件所需要的文件或者是目标
command make 需要执行的指令,可以是任意的 shell 指令
核心规则 ...
DOB扰动观测器
GitHub - Luo25177/modelControl
前言——一些用到的概念
最小相位系统:对于FIR系统(没有极点),如果系统函数的所有零点都位于单位圆内,则称该系统为最小相位系统。如果系统函数的所有零点都位于单位圆外,则称该系统为最大相位系统。如果一部分零点位于单位圆内,一部分零点位于单位圆外,则称该系统为混合相位系统或非最小相位系统。对于IIR系统(存在极点),如果系统函数的所有零点和极点都在单位圆内,则称该系统为最小相位系统。也就是相频特性 $\varphi(w)$ 在 $w=0$ 和 $w=\pi$ 之间经历的净相位变化为零
最小相位系统主要特性
最小相位系统是因果且稳定的
其逆系统也是因果且稳定的
在所有具有相同幅频响应的零-极点系统中,最小相位系统的群时延最小
基本原理基本思想就是将外部扰动以及模型参数变化造成的实际模型与理想模型输出的差异统统等效为控制输入,即观测出等效干扰,在控制中引入等量的补偿,实现对干扰完全抑制。干扰观测器的基本思想,系统实际控制输入与计算输入(由系统标称模型计算得到)的差值,来得到扰动和不确定性的估计
具体公式
图中的 $G_p ...
IMU滤波
前言向量叉乘二维
a=\begin{bmatrix}x_1\\y_1\end{bmatrix},b=\begin{bmatrix}x_2\\y_2\end{bmatrix}\\\Downarrow\\a\times b=x_1y_2-y_1x_2三维
a=\begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix},b=\begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix}\\\Downarrow\\a\times b=\begin{bmatrix}y_1z_2-z_1y_2\\z_1x_2-x_1z_2\\x_1y_2-y_1x_2\end{bmatrix}欧拉角是用三个角度表示物体的空间姿态,每个角度代表物体绕其一个固定轴的旋转量
pitch 俯仰角,一般来说向上转,也就是抬头为正
roll 翻滚角,一般是向右侧倾倒为正
yaw 航向角,一般是向右转为正
旋转矩阵对于三轴角度的旋转矩阵,如下
绕 x 轴旋转
R_x(\theta)=\begin{bmatrix}1&0&0\\0&\cos\theta&-\sin\th ...
stm32学习
stm32f4内部的flashstm32芯片内部有一个flash存储器,主要用于存储编译之后烧录进来的代码,由于flash存储器的内容在掉电之后不会丢失,芯片重新上电复位之后内核可以从内部flash中加载代码并运行。
除了使用外部的工具(如下载器)读写内部FLASH外,STM32F4芯片在运行的时候,也能对自身的内部FLASH进行读写,因此,若内部FLASH存储了应用程序后还有剩余空间,我们可以把它像外部SPI-FLASH那样利用起来,存储一些程序运行时产生的需要掉电保存的数据。
由于访问内部FLASH比外部SPI-FLASH的速度快的多,所以在紧急状态下常常会使用内部FLASH存储关键记录;为了防止应用程序被抄袭,有的应用会禁止读写内部FLASH中的内容,或者在第一次运行时计算机机密信息并记录到某些区域,然后删除自身的部分加密代码,这些都涉及到内部FLASH的操作。
芯片内部存储的分区
主存储器
介绍芯片时提到的flash的内存的大小都是指主存储器的大小,用于存放代码和数据常量(例如const类型的数据)。
主存储器分为256页,每页大小2KB,一共512KB。这个分页就是FLASH ...
轮式底盘解算
四舵轮底盘控制四舵轮底盘就是由四个舵轮来控制底盘运动的,一般在进行速度分析时,会将底盘的整体运动映射到四个轮子的单独运动上去
一般来说是将直角坐标的速度和角速度分别映射到轮子上,进行累加得到最终的结果
直角坐标速度分析直角坐标的速度分析相对来说比较简单,直接就是坐标平移,所以就是
v_{ixx}=V_x\\v_{ixy}=0\\v_{iyx}=0\\v_{iyy}=V_y\\其中 $v_{iyx}$ 就是机体的 $x$ 方向速度向轮子 $y$ 方向速度的映射
角速度分析角速度分析实际上就是把机体转动的角速度通过轮子的运动来实现,也就是
v_{iw}=L_iw再将其分解到直角坐标系中
v_{ixw}=wL_i\cos(\varphi-90)\\v_{iyw}=wL_i\sin(\varphi-90)其中 $v_{ixw}$ 就是机体角速度向轮子 $x$ 方向速度的映射
最终速度最终两部分速度相加就是该轮子的速度
v_{ix}=v_{ixx}+v_{ixy}+v_{ixw}\\v_{iy}=v_{iyx}+v_{iyy}+v_{iyw}舵角得到最终的直角坐标速度之后,还需要得到舵 ...
传感器
激光测距仪原理:距离大致是光速和往返时间的乘积的一半,就是测距仪和被测物体之间的距离测量方法:实际是测量光传播的时间,用于远距离测量
DT35
参数
数据
测量范围
50~12000mm
分辨率
0.1mm
光源
红外线光源
激光等级
1
接口
IO-Link
功能
过程数据,参数设置,诊断
模拟输出端分辨率
12 bit
开关量输出
1x/2x反向脉冲:PNP/NPN(100mA)
温宽
-30~55
电压
12V~30V
多功能输入
1x4
滞后
0~11950mm
响应时间
2.5/6.5/12.5/24.5/96.5 ms
开关频率
333/100/50/25/6 Hz
输出时间
1/2/4/8/32 ms
纹波
≤5 Vpp
功耗
≤1.7 W
初始化时间
≤500 ms
预热时间
≤20分钟
重量
55g
DT50
参数
数据
测量范围
15~10000mm
工作电压
0~10V
工作温度
-30~65
分辨率
1mm
响应时间
20/30 ms
...