STM32 算法库技术文档
STM32 算法库技术文档GitHub源码地址:suyelingfeng/stm32_kalman-pid: kalman and pid on stm32
1. 环形缓冲区(Ring Buffer)数学原理环形缓冲区通过模运算实现循环访问:
写入位置:head = (head + 1) % size
读取位置:tail = (tail + 1) % size
graph LR A[写入数据] --> B{缓冲区满?} B -->|否| C[存入head位置] C --> D[head++] B -->|是| E[丢弃数据] F[读取数据] --> G{缓冲区空?} G -->|否| H[取出tail位置] H --> I[tail++] G -->|是| J[返回空]
2. PID控制算法数学原理位置式PID:u(k) = Kp*e(k) + Ki*∑e(j) + Kd*(e(k)-e(k-1))
其中:
e(k): 当前 ...
yolo环境
yolo环境使用Conda虚拟环境来配置YOLO环境是
步骤 1: 安装 Anaconda 或 Miniconda首先,确保您的系统中已安装Anaconda或Miniconda。如果没有安装,可以从以下链接下载并安装:
Anaconda 下载页面
Miniconda 下载页面
步骤 2: 创建 Conda 虚拟环境打开终端或命令提示符,创建一个新的Conda虚拟环境。
conda create --name yolo_env python=3.8
激活虚拟环境:
Windows:
conda activate yolo_env
macOS/Linux:
conda activate yolo_env
步骤 3: 安装必要的依赖库在激活的虚拟环境中安装所需的库。
安装 OpenCVconda install -c conda-forge opencv
安装 PyTorch 和 torchvisionYOLO模型通常需要PyTorch和torchvision。您可以使用Conda来安装这些库:
conda install pytorch torchvision to ...
arm架构opencv环境搭建ubantu
arm架构opencv环境搭建(ubantu)1. 获取OpenCV源代码首先,我们需要从GitHub上克隆OpenCV的源代码仓库。使用以下命令:
git clone https://github.com/opencv/opencv.gitcd opencvgit checkout 4.x # 选择最新的4.x稳定版本
这将下载OpenCV的主仓库。如果你需要额外的模块,也可以克隆opencv_contrib仓库:
git clone https://github.com/opencv/opencv_contrib.git
3. 编译和安装注意:以下步骤假设你使用的是Python 3.8环境。
创建并进入构建目录:
mkdir build && cd build
配置CMake:
cmake -D CMAKE_INSTALL_PREFIX=/usr/local \ -D CMAKE_BUILD_TYPE=Release \ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ...
freertos在stm32上的应用-序章
freertos在stm32上的应用-序章最近弄了好几场比赛,又经过很多事以及一段时间的积累,我终于想起了我还有个博客,于是我准备结合最近我所学写一系列关于freertos个人理解的一些博客,也算是为了加深一下最近学习的印象,同时促进我使用它做一些小的项目,是我对其加深了解,我学识浅薄所以多有不足之处还望批评指正。
有关freertosFreeRTOS是一个热门的嵌入式设备用即时操作系统核心,它于2003年由Richard Barry设计,并已被经成功移植到35种不同的微控制器上。FreeRTOS采用MIT许可证许可。FreeRTOS提供许多方法以实现多线程(threads)、多作业(task)、互斥锁(mutex)、信号量(semaphore)和软件计时器(software timer),有个为低耗电应用程序提供的无嘀嗒(tick-less)模式。其极高的市场占有率和较多的开源资料吸引众多嵌入式领域的学生进行学习。
对此系列博客的构想本人是非计算机类专科出身(目前在读正在准备专升本),所以对内核的掌握并不是很理想,因此本系列文章仅以应用stm32f407为主要内容,利用clion和S ...
C语言的指针
c语言的指针(基础解释)一、前言 C语言可以说是变成重要的一个语言,本人机械专业,因为电子方面的学习(单片机)接触C语言。刚开始我只是通过学习51单片机的方式来学C语言,但是学的云里雾里。所以决定系统的全方位的重新学习,现在只能说略微理解,所以本篇文章多有不足之处,可以反馈到我个人微信公众号上(夙夜凌风碎碎念),进行交流学习。
二、基础篇1、指针的定义 在计算机编程中,尤其是像C、C++这样的语言中,指针是一种特殊的变量,它的值是另一个变量的内存地址。这个内存地址指向了存储在内存中的数据。更具体地说,一个指针变量能够存储并提供对其他变量或对象的间接访问。指针声明的一般形式如下:
datatype *pointer_name;
这里的 datatype 表示指针所指向的数据类型,* 是指针运算符,它表明这是一个指针变量,而不是普通变量,而 pointer_name 是你为指针变量指定的名称。
2、指针的用途2.1、动态内存分配通过使用指针和malloc(), calloc(), realloc()以及free()等函数,程序员可以在程序运行时动态地申请和释放内存空间。这对于创建不确 ...
C语言递归
在计算机科学中,递归是一种强大而精巧的编程技巧,它允许一个函数调用自身,通常用于解决问题可以被分解为更小、相似子问题的情况。在C语言中,递归是一个常见而重要的主题,它为程序员提供了一种优雅而灵活的方式来处理复杂的问题。
递归的基本原理 递归函数是一种特殊的函数,它在其定义中包含对自身的调用。要理解递归,首先需要了解两个关键概念:基本情况和递归调用。
基本情况每个递归函数都必须定义一个或多个基本情况,这些情况下递归停止。否则,函数将永远调用自身,导致无限循环。
递归调用在递归函数中,函数会调用自身,但是参数通常会有所改变,以便向基本情况逼近。这种调用自身的行为使得问题被分解为更小的子问题。
示例:计算阶乘 为了更好地理解递归,让我们看一个经典的例子:计算阶乘。阶乘是一个自然数与小于或等于它的所有正整数的乘积。在C语言中,可以使用递归来计算阶乘,如下所示:
#include <stdio.h>int factorial(int n) { if (n == 0 || n == 1) { return 1; // 基本情况 &# ...
hexo使用指南
Markdown文件类型的使用这个你自己随便去搜索一下,Typora的使用,然后如果你要新建一个文件,push到博客上,你就在D盘下博客根目录打开git bash 然后输入
hexo new "文件名"
它会默认在blog\source_post文件夹内生成一个.md文件,用这个编辑器可以直接打开编辑,文件顶部长得像代码框的东西是yml的配置文件,分别对应着网站上的标题,日期,标签,分类
注意:顶上的冒号后面有一个空格,config配置文件里面也是 没有空格会报错
我没有配置标签文件,所以没有显示标签,我给你一个图
如图对应即可
在编写md文件时我已经设置了图片自动上传图床,所以你直接ctrl v复制进来即可,阿里云的图床会自动更新,博客网站会自动化完成渲染,
编写完成后如何推送至网站hexo框架会把_POST文件下所有的md文件默认渲染成html,然后显示在页面上,具体流程是打开git窗口后
hexo clean #清除本地缓存hexo g #单词应该是generate,生成渲染界面hexo s #servicer #这一步可以选 主要是调试的时候看效果用 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post$ hexo new "My New Post"
More info: Writing
Run server$ hexo server
More info: Server
Generate static files$ hexo generate
More info: Generating
Deploy to remote sites$ hexo deploy
More info: Deployment