模糊(Fuzzy)控制算法
一、概念模糊控制是以模糊集理论、模糊语言变量和模糊逻辑推理为基础的一种智能控制方法,它是从行为上模仿人的模糊推理和决策过程的一种智能控制算法。模糊控制首先将操作人员或专家经验编成模糊规则,然后将来自传感器的实时信号模糊化,将模糊化后的信号作为模糊规则的输入,完成模糊推理,将推理后得到的输出量加到执行器上。 二、控制过程所谓模糊控制,一般是用模糊的概念来描述偏差,并通过模糊推测得到模糊的给定量。比如,对偏差的描述常用“正大”,“正小”,“零”,“负小”,“负大”等模糊概念。 精确的测量值经过输入模糊化过程变成模糊集; 利用控制规则进行推理,即模糊决策,得到控制作用的模糊集; 将控制作用的模糊集按照一定的规则转化成精确值,此为逆模糊化。 三、前置基础知识1. 模糊逻辑与传统逻辑的区别模糊逻辑是模糊控制的重要工具,它与传统逻辑的主要区别在于变量的真值。 传统逻辑:真值只能是 0 或 1(非黑即白)。 例:今天是否下雨?要么“是”,要么“否”。 模糊逻辑:真值可以是 [0, 1] 之间的任意值,表示某事的模糊程度。 例:今天是“有点下雨”(隶属度为...
VS Code + Github 开发
前置工作下载Git 和 VS Code VS Code 中 Git 的集成功能VS Code 默认启用了 Git 集成功能。打开项目当新打开一个 VS Code 窗口时,需要打开一个项目,可以在本地文件打开项目,也可以直接从远程仓库克隆项目:分支管理在 Git 中,允许同时处理代码库的多个版本。可以在源代码管理边栏的最下面看到当前所在的分支:如果该分支有修改,分支名的右上角会有一个 当你想切换分支,可以点击这个分支名称,就会出现所有分支的列表:可以看到,这里面有两类分支,上面一类是带分支图标的,下面另一类是带云图标的。前者表示本地分支,后者表示远程分支。点击本地分支,就会切换到对应的分支,点击远程分支,就会将远程分支同步到本地,并在本地创建一个同名的分支。重命名分支和删除分支合并分支,可以选择从哪个分支向当前分支进行合并,选择被合并的分分支即可。新创建的分支可以点击发布Branch按钮来发布到远程仓库。*发布管理如果想暂存所有文件,可以点击在“更改”那一行后面的加号即可这个暂存操作就相当于执行 git add 命令。对于暂存的文件,可以进行commit...
Git使用
Git 是一个分布式版本控制系统,由 Linus Torvalds 于 2005 年开发,用于高效管理和跟踪代码更改。 基本概念: 工作区 (Working Directory):你当前正在处理的项目目录。 暂存区 (Staging Area):用来暂存修改的地方,通常用 git add 将更改放入。 版本库 (Repository):存储项目历史版本的地方,用 git commit 提交更改。 远程仓库 (Remote Repository):托管在服务器上的版本库,比如 GitHub、GitLab。 安装Windows系统 访问 Git官网 下载适用于Windows的安装程序。 双击下载的安装程序,按照提示进行安装。 安装完成后,打开命令提示符,输入 git --version 验证安装是否成功。 Linux系统安装在Linux系统上安装Git可以使用包管理器,例如apt(适用于Debian/Ubuntu)或yum(适用于CentOS/RHEL)。 使用apt安装Git(Debian/Ubuntu)12sudo apt updatesudo apt install...
串级PID控制
...
PID控制算法C++实现
引言在前面的一篇文章PID控制算法简单说明了PID算法的原理。今天我们一起用C++实现一个简单的PID控制算法吧。目前实现的是离散位置式PID和增量式PID。 pid_controller.hpp文件12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#pragma oncenamespace control_algorithm {class PID { public: typedef struct { float k; /* 控制器增益 */ float p; /* 比例项增益 */ float i; /* 积分项增益 */ float d; /* 微分项增益 */ } pid_param; typedef struct { float i_limit; /* 积分项上限 */ float d_limit; /* 微分项限制 */ ...
前馈补偿的PID控制
...
Lambda表达式
前言auto关键字auto(C++11新特性)C++11赋予了auto新的定义,让其做自动类型推导,也就是说,编译器可以在编译期间自动推算出变量的类型,这样就可以更加方便的编写代码了。使用: auto 用法最常见的场景是声明变量时,让编译器根据初始化表达式自动推导出变量的类型。 在使用 STL 容器(如 std::vector、std::map 等)时,auto 能大大简化代码,尤其是在使用迭代器时。 123456789101112#include <vector>#include <iostream>int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 使用 auto 推导类型,避免手动指定迭代器类型 for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } return...
STL库
C++ 的标准模板库(STL,Standard Template Library)是 C++ 标准库的一部分,提供了大量有用的模板类和函数,用于高效的容器管理、算法操作和迭代器操作。它使开发者能够快速构建强大、灵活和高效的程序,而不必从头实现常见的数据结构和算法。对于STL,学习起来并不复杂,掌握几种常用的容器,如vector、list、map、set、queue、stack等,以及一些常用的算法,如sort、find等,了解迭代器的使用,就可以满足大部分开发需求。核心包括以下重要组件组件: 组件 描述 容器(Containers) 容器是 STL 中最基本的组件之一,提供了各种数据结构,包括向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)、映射(map)等。这些容器具有不同的特性和用途,可以根据实际需求选择合适的容器。 算法(Algorithms) STL...
C++关键字和修饰符总结
C++ 关键字和修饰符是构成语言核心的保留字和标识符,它们为程序员提供了强大的功能来控制程序的行为和结构。以下是它们的分类与总结: 1. 基本数据类型 int:整数类型 float:浮点数类型 double:双精度浮点数类型 char:字符类型 bool:布尔类型 void:无类型 wchar_t:宽字符类型 char8_t / char16_t / char32_t:C++11 和 C++20 引入的 UTF 字符类型 2. 类型修饰符 signed:有符号类型修饰符 unsigned:无符号类型修饰符 short:短整型修饰符 long:长整型修饰符(如 long long) 3. 存储类说明符 auto:自动推导类型(C++11 开始支持) register:寄存器变量(已被废弃) static:静态存储类 extern:外部链接 mutable:允许修改常量成员(仅在类中使用) 4. 访问控制 public:公有访问权限 private:私有访问权限 protected:受保护访问权限 ...
struct和enum
1. enum枚举1.1. C enumenum是C语言中的一个关键字,enum叫枚举数据类型,枚举类型可以让我们的程序使用一些固定长度和固定数值的变量值范围。枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。 格式 123456enum typename{ valuaname1, valuename2, valuename3, ...} typeName是枚举类型的名字,花括号里面的元素(枚举成员)是常量而不是变量,因为枚举成员的是常量,所以不能对它们赋值,只能将它们的值赋给其他的变量。 注意 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。在当前值没有赋值的情况下,枚举类型的当前值总是前一个值+1。 可以人为设定枚举成员的值,从而自定义某个范围内的整数。 类型定义以分号;结束。 枚举变量的定义 先定义枚举类型,再定义枚举变量 12345enum...