自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

原创 BehaviorTree之概念讲解(一)

BehaviorTree简介,即C语言实现一颗行为树

2022-08-18 01:16:56 1260 1

原创 什么是轮式里程计

何为轮式里程计

2022-08-01 13:51:18 2666

原创 什么是IMU?

简单介绍IMU,快速理解

2022-07-23 14:50:38 30903 4

原创 C语言基于void*实现泛型容器化代码编程

基于C的泛型容器化编程

2022-07-03 22:04:51 1035

原创 基于C语言实现泛型编程(抛砖引玉)

基于C语言实现泛型编程

2022-07-01 20:00:07 776

原创 EKF之雅克比矩阵(一)

EKF中,雅克比矩阵的含义以及推导方式,局部线性化实际工程中的非线性系统

2022-06-25 15:50:32 5576

原创 机器人避障之滑动窗口处理数据

机器人避障_传感器数据处理_滑动窗

2022-05-28 11:51:46 299

原创 机器人路径规划之迪杰斯特拉算法(二)

DFS和BFS说迪杰斯特拉算法之前,先为大家简单介绍两种常见的图论搜索算法,深度优先(DFS),广度优先(BFS)。深度优先深度优先就是从根节点开始,找到它的第一个子节点在找到第一个子节点的子节点,依次往下递推直到当前节点没有其他的子节点返回当前子节点的父节点,寻找有没有另外的子节点,若没有则一直重复这个步骤,直到找到目标点或者遍历完整个地图。学过二叉树的同学激动地拍了拍大腿,这不就是前序遍历嘛,那这个遍历的方式我们可以简单的写成:/* * describe : 前序便利 * pa

2021-06-03 22:46:06 1721 2

原创 机器人路径规划之栅格地图(一)

什么是栅格地图栅格地图:即以机器人出生点为中心,x轴和y轴的分辨率为单个格子大小,当x轴分辨率=y轴分辨率时,则每个格子为一个正方形,分辨率越小则表示地图精度越高,比如一个格子大小为1cm × 1cm,那么机器人定位精度就是1cm。可以想象成一个巨大的网把一个地面罩住,网面碰到东西则认为是障碍物/墙,没有碰到障碍物则可以认为是空地。那么每个格子如何区分自己的状态是障碍物/墙,还是空地呢?这里可以赋予每个格子不同的值,比如0代表空地,1代表墙。这个值的内容也可以扩展,比如2代表已经走过,3代表未被走过等等

2021-05-27 22:46:09 10028 4

原创 对一阶二阶低通滤波器推导,并用IMU数据验证算法效果

文章背景一直想学习一下数字信号处理算法,而不是每次遇到数据处理就求平均,求最值,看容差,做滑动窗。。。数字信号处理算法已经很成熟了,但网上大部分还是用matlab跑仿真,设计几个不同频率的sin信号相加,来验证算法的有效性。但是实际工程中该如何去使用这个算法,资料还是比较少的,这篇文章重心放在实际工程,对于工程中遇到的常见信号做处理。算法推导学习一个算法,掌握其思想和推导是必不可少的路。这里先以一阶低通滤波算法为例,在硬件电路中我们可以通过RC电路实现低通滤波功能,利用的便是电容原件的充放电特性。在

2021-05-18 23:09:17 6220 17

原创 查找算法之查找一维数组中的众数

算法场景项目中遇到一个场景,对一个长度为为20的滑动窗进行滤波操作,因为要保证数据平稳不突变,想选取这个滑动窗里的众数作为窗口输出,保证数据的最大平稳性。由于是基于单片机,只能用C实现,没有C++的map容器,还是比较麻烦的。算法实现自己造一个数据结构去装数据,第一个成员是数据大小,第二个成员是该大小出现的次数。算法的思想也比较简单,就是创建一个动态数组,数组长度为窗口大小。然后遍历窗口,将重复的数字装到一个pos上去,然后num++,没有重复就换个pos。做完这些就去找这个动态数组中,找到num最大

2021-05-06 15:44:26 943

原创 四元数与旋转矩阵之间的转换关系

/*计算旋转矩阵*/ /* 根据罗德里格旋转推导 U = C^Rb = rMat[3][3] = I + 2 * J * cos(θ/2) * 2 * K q = q0 + q1 * i + q2 * j + q3 * k q = cos(θ/2) + λ * sin(θ/2)*/void imuComputeRotationMatrix(void){ float q1q1 = q1 * q1; float q2q2 = q2 * q2;

2021-04-01 10:44:56 319

原创 还在用状态机搭架构吗?试试行为树吧

/********************************************************************************** * Filename : BehaviorTree.c * Author : WangXueCong * Version : v1.0 * Date : 2021.3.22 * Discription : 基于顺序表的排序算法,供不同场景下的使用情况**********************

2021-03-31 20:30:10 279

原创 两轮差速机器人运动学模型

两轮差速底盘1.1、底盘说明两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速度,通过给定不同速度实现底盘转向控制。一般会配有一到两个辅助支撑的万向轮。主要底盘有:1、Turtlebot;2、扫地机器人;3、无人仓AGV小车;4、轮椅;底盘主要特点:1、控制简单、里程计计算简单。2、只能给定X方向速度、Z轴方向角速度。1.2、底盘运动学分析1.2.1、底盘模型图1.2.1 常见的两轮差速底盘模型1.2.2、机器人本身约束方程(物理特性)图1.2.2 a 左侧是车的两个

2021-03-29 13:42:43 29761 4

原创 快速排序算法及其应用

常见的排序算法冒泡排序,简单排序,插入排序等算法时间复杂度为 n^2,在某些场景下如已知有序的数组中进行排序,调用这些算法可以有效地完成排序功能。其源码如下:/************************************************* title : 交换* 算法复杂度 : ************************************************/void swap(SqList *L,int i,int j){ int temp

2021-02-20 11:23:28 813

原创 stm32与linux通过protobuf打包数据并进行通信

一、利用protobuf通信原理最近项目中需要用到stm32与H6(移植了linux)进行数据交互,H6端是用C++编写的串口底层驱动,与stm32的串口连接并通信。-串口间的通信协议定为采用protobuf打包数据并通过串口发出的形式,即发送端编码数据并序列化成数组通过串口发出,接收端接收到一帧数据,进行解码并解析数据。二、...

2020-09-11 17:16:13 3771 4

原创 物联网实战之基于OneNET的智能农业系统

想玩物联网的时候物色了很多国内的云平台,最后选了中移云去实现。其实阿里云华为云机智云都不错,机智云网页界面不行但是带APP,阿里云也有个贝壳物联APP功能更强大,华为云不太了解不过好像也还行。中移云感觉更加的纯粹,没有那么多花里胡哨的功能(其实是我用不到而已)。这里记录一下基于4个stm32+lora建立组网,上传数据到云平台这个简单的项目。硬件环境硬件环境即一个主控板+三个采集板,基于LO...

2020-04-05 16:31:43 5821 5

原创 PID算法原理及模板讲解

很早都想写一栏关于PID算法的专栏,整个大学期间把谈女朋友的时间都拿来搞PID算法了(这样你们还不信我是真的搞PID的嘛。。)。为了学习PID算法买过平衡小车之家的平衡车(最后拆成玩具了),买过正点原子的minifly(卖掉了)。做过2015年电赛风力摆,研究过2017年电赛板球系统(机械结构太难搭了就写了写代码),准备了这么久就是为了在电赛上拿个国奖,结果2019年电赛把控制类和电源类结合到了一...

2020-04-02 21:16:27 6583 13

原创 keil5黑暗配色,仿VScode主题系列

# properties for all file typesindent.automatic=1virtual.space=0view.whitespace=0view.endofline=0code.page=936caretline.visible=0highlight.matchingbraces=1print.syntax.coloring=1use.tab.color...

2020-03-25 17:06:34 8053 7

原创 超屌的按键处理方式(类思想,状态机,高移植性)

怎么能把按键处理玩出花?按键处理作为一个基础入门实验,大部分人在刚接触单片机的时候都会自己写一份,开始我们利用延时消抖,后来发现在大的工程当中,延时消抖在没有加入操作系统来调度的情况下,无疑是一种很浪费资源的做法。再后来我们开了定时器去扫描,确实比较靠谱,但是一但设计到复杂的组合按键,长按短按双击等,就需要我们去费很大的功夫去进行逻辑判断。在网上看到了很多很棒的方法,即把底层寄存器的配置抽离出来...

2020-03-25 14:24:08 5110 5

转载 ADC时钟与采样周期的作用

ADC转换就是输入模拟的信号量,单片机转换成数字量。读取数字量必须等转换完成后,完成一个通道的读取叫做采样周期。采样周期一般来说=转换时间+读取时间。而转换时间=采样时间+12.5个时钟周期。采样时间是你通过寄存器告诉STM32采样模拟量的时间,设置越长越精确一 、STM32 ADC采样频率的确定先看一些资料,确定一下ADC的时钟:(1) 由时钟控制器提供的ADCCLK时钟和PCLK2(A...

2020-03-20 15:30:25 10085 2

原创 STM32输出一定个数占空比可调的单脉冲信号

软件环境:Keil5硬件环境:STM32F103C8T6最近有个项目需要用到STM32F0产生一定数量不同占空比的单脉冲信号,初步构思了一下。以前配置一些传感器即根据时序图写脉冲序列就是用简单的延时模拟单个脉冲信号,这种方法在工程项目中太浪费CPU资源。定时器产生的PWM波又是连续的,如果能让连续的PWM波变成单个的,那么就可以简单的通过写CCRx寄存器产生单脉冲信号,所以可以开一个定时器捕获...

2020-03-15 21:30:45 5319 5

原创 stm32+lcd显示汉字之DIY图形及导入字库

一、建立自己的点阵集上一篇博客,给大家介绍了在LCD上显示汉字/特殊图形需要知道对应的显示编码(GBK码/ASCII码),显示编码对应着每个图形的点阵集(数组),我们可以通过这个点阵集,将自己DIY的图形显示在LCD上面。现在先说一下怎么做一个自己的点阵集。一般情况下,用PCtoLCD2002这个软件,可以自动帮我们生成每个图形对应着的点阵集。​​​​​​​​​​​​​​​​​​​​​​打...

2020-02-25 23:42:22 20083 4

原创 stm32+lcd显示汉字之GBK编码

一、整体思路最近在搞LCD显示汉字、特殊图形的问题。以前玩1602的时候自己做过字模,就是通过1602自带的用户DIY的一个存储点阵区CGROM,把做好的字模转化成点阵的数据存储在CGROM中,最后把汉字显示在1602上面。但是当时是用51做的,而且字模地址是固定存储在1602中的,我们不用去管。在stm32+TFTLCD显示汉字这个实验上面,我的思路还是这个样子,就是做好字模,然后根据地址找到...

2020-02-24 13:11:33 9131

原创 SD卡的初始化及基本应用

SD卡的初始化上一篇文章我分享了一些关于SDIO接口的理解,通过SDIO接口,我们现在已经可以通过stm32与SD卡通信了。在通信之前,我们需要对SD卡进行初始化操作,对SD卡初始化需要通过我们前面说的CMD命令,SD卡接收到相应的CMD命令后,反馈相应的数据,我们便是通过这些反馈的数据对我们SD卡的类型,大小等进行判断,从而完成初始化。这里上一张与SD卡参数有关的5个会反馈的寄存器:其初...

2020-02-15 22:30:27 2336

原创 SDIO接口的理解

运用SD卡第一步,认识SDIO接口做毕业设计需要用到大量的音频文件,一般的存储器满足不了存储要求,故选择SD卡作为存储器件。在这里记录一下自己的学习经历,学习一个新的IC,无非是要么根据时序图写出Read和Write函数,要么是根据通信总线和IC相关操作指令去完成Read和Write函数。只有能与对应IC“说话”,我们才能去开发它更多地可能性。这里以原子探索者为例,为大家介绍一下SD卡相关知识。...

2020-02-14 22:57:12 7297

原创 Proteus仿真51单片机生日快乐音乐播放器

实验名称:基于51单片机音乐播放器实验目的:声音的音调不同是因为声音的频率不同造成的。那么,就可以通过单片机发送不同频率的脉冲信号给蜂鸣器,来达到让蜂鸣器发出不同音调声音的目的。不同频率的脉冲信号就意外着每个脉冲之间必须有着不一样的时差,这可以通过延时或者定时计数器定时的方式来实现。我们便是通过这个目的,去通过对于单片机的操作,蜂鸣器变调,使蜂鸣器完成对于歌曲乐谱的播放,再通过LCD1602...

2020-02-11 22:47:17 8738 4

原创 Proteus仿真51单片机路口交通灯

一、实验名称:十字路口交通灯实验二、实验目的:利用51单片机完成模拟正常路口交通灯的运行过程,过程中配备紧急调控按键(路口均为红灯,模拟突发情况禁止路口通行),南北调度按键(紧急调度南北或者东西方向的通行),每个事件结束后,均可以恢复原来的通行秩序,也就是涉及了保护现场和恢复现场。三、实验平台:Keil4编写代码,Proteus仿真程序四、Proteus仿真搭建:显示路口时间器件我们...

2020-02-11 17:28:37 10558 7

原创 __packed 关键字

__packed 关键字的作用我们在c语言中创建一个结构体时,编译器都会自动进行字节对齐操作,这样做是为了解决CPU读取数据的效率问题。比如我们随便申请一个结构体:Struct textStr{Char i;Int j;Float m;Double n;}编译器在编译这个结构体时,会自动对齐数据,我们这里用的是32位的单片机,所以每当我们的结构体变量的地址不满足 0x0000 0...

2020-02-10 22:28:47 1662 1

原创 stm32内存管理

stm32内存管理再讲stm32内存管理之前,我想先向大家介绍几个概念:自然对其对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。c语言中__align()关键字的作用与内存对齐的原理在32位CPU中,CPU访问内存一次访问32位,4个字节,一个字。哪怕只...

2020-02-10 17:56:09 1735

原创 stm32内存架构及堆栈管理

#stm32内存架构及管理##计算机内存管理学习stm32内存管理的时候有些云里雾里,网上也看了很多博客文档,但是大都没有很系统的去讲解stm32的内存架构。所以决定自己来做一个关于stm32内存架构的分析和自己的理解。在讨论单片机内存管理之前,我想先说一下关于计算机的内存是如何管理的。根据《C++ Primer Plus(第6版)》这本书中所讲,C++(就内存管理方式而言类似C)有3种管理...

2020-02-08 22:30:31 3324

nanopb-0.3.8-windows-x86.rar

包含编译脚本和protoc的所有API移植文件,可以在Windows下编译.proto文件。基于protobuf数据打包协议可以完成stm32与上层程序之间的通信!!

2020-09-11

keil 暗黑配色.txt

keil5 global.prop 文件暗黑配色

2020-03-25

工程1 路口红绿灯.rar

指路 https://blog.csdn.net/su_fei_ma_su/article/details/104266278 ,满意的话可以点个下载哦!

2020-02-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除