【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波——附3个算法源码

 效果:

MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波


目录

基础知识详解

欧拉角

加速度计(Accelerometer)与姿态测量

陀螺仪(Gyroscope)与姿态测量

姿态解算算法1-互补滤波

姿态解算算法2-四元数法

姿态解算算法3-卡尔曼滤波

组成

1.预测状态方程

2. 预测协方差方程 

3. 卡尔曼增益方程

4. 跟新最优值方程(卡尔曼滤波的输出)

5. 更新协方差方程

MPU6050简介

硬件连接

编程实现-源码下载


基础知识详解

欧拉角

欧拉角:以运动物体建立坐标系,通过绕轴旋转来表示运动物体当前的姿态( Roll - 翻滚角,Pitch - 俯仰角,Yaw - 偏航角)绕着Z轴旋转过的角度叫做yaw偏航角,绕着X轴旋转过的角度叫做roll翻滚角,绕着Y轴旋转过的角度叫做yaw俯仰角。接下来细致讲解去理解这三个角(欧拉角)

可以先考虑一个问题 :比如我们想要在空间中去表示任意一个点的位置,那这个时候我们首先需要建立一个坐标系,需要一个三轴的直角坐标系,就可以使用一个坐标xyz表示空间中任意一个点的位置。

今天所学习的欧拉角的坐标系与我们传统意义上的直角坐标系是有所区别的,对于传统直角坐标系的位置是固定不变的,而欧拉角的直角坐标系会随着物体的旋转和运动一起去运动,如下的一个球,以这个球建立一个坐标系,一开始球的三个轴与XYZ轴是重合的(图1)。首先沿Z轴旋转(图2),再沿X轴旋转(图3),再沿Y轴旋转(图4),经过这三次旋转之后就可以得到空间中的任意姿态,所以就可以使用这三次旋转的角度去表示球的运动姿态,这三个角度就是Roll - 翻滚角,Pitch - 俯仰角,Yaw - 偏航角,也就是所述的欧拉角。

图1

 图1 球的三个轴与XYZ轴重合

图2 球沿Z轴旋转

图3 球沿X轴旋转

图4.球沿Y轴旋转

形象理解:如下图,以飞机本身为参考系建立坐标系,这个坐标系会随着飞机的旋转和运动一起去运动。绕着Z轴旋转的角度叫做yaw偏航角,绕着X轴旋转的角度叫做roll翻滚角,绕着Y轴旋转的角度叫做yaw俯仰角。

绕着Z轴旋转的角度决定飞机在水平方向上的一个朝向,也就是决定了飞机的航向, 比如让机头绕着Z轴旋转一个角度,这个时候的夹角就是yaw偏航角,航向就发生了变化

翻滚角是绕着X轴旋转过的角度,当飞机绕着X轴旋转的时候,就像人在床上打滚的一个动作,所以很形象的把这个角叫做翻滚角

俯仰角就是绕着Y轴旋转过的角度,如果绕着y轴逆时针去旋转,飞机就在点头,绕着y轴顺时针旋转的时候,飞机就在抬头,那一点头一抬头就形象叫做俯仰。

在实际的编码过程中,就是使用欧拉角去表示物体的运动姿态

测量欧拉角的数值有两种方式:1.加速度计 2.陀螺仪。对于这两种方式来说测量欧拉角的结果互有优缺点,所以需要将这两种方式测得的欧拉角结果进行融合来得到更加精确的欧拉角的值

接下来理解一下加速度计和陀螺仪是如何测量欧拉角的

加速度计(Accelerometer)与姿态测量

加速度计就是用来测量加速度的一个传感器,对于mpu6050来说可以测量三个轴向的加速度,分别是沿X轴,y轴,z轴的加速度。有了这三个轴向的加速度后,就可以来计算欧拉角

举飞机例来形象理解三个轴向的加速度

如下图,当前飞机的姿态是斜向上的,假设飞机当前是匀速直线运动或静止,那么对于飞机只受一个力也就是重力,重力产生的加速度就是重力加速度g(9.8米每秒方)方向是垂直于地面向下所以可以以它为参考来计算欧拉角。

计算欧拉角之前,首先沿着三个轴向对重力加速度g进行分解就会得到三个轴向的加速度也就是ax,ay,az(ax,ay,az就是加速度计在三个轴向上的一个读数)

图5 飞机模型图 

接着就可以使用这三个ax,ay,az数来计算欧拉角。

需要注意使用加速度计来计算欧拉角只能算出roll翻滚角和pitch俯仰角,当飞机的方向大体处于水平方向时是没有办法通过加速度计的方式去计算yaw偏航角

接下来形象理解roll翻滚角和pitch俯仰角的计算

形象理解roll翻滚角的计算

在计算之前,我们形象来逆着图5x轴方向看(飞机尾部向里看)如下所示的主视图。在主视图中粉红色的线是重力加速度g,右边红色箭头是az重力加速度g在z轴上的一个分量,左边红色箭头是ay就是重力加速度g在y轴上的一个分量。

在如下主视图中,飞机是在逆时针旋转了一个角度α也就是翻滚角roll,夹角α的对边就是ay,临边是az,所以可以通过三角关系来求出夹角α也就是翻滚角roll,通过来计算出翻滚角roll

形象理解pitch俯仰角的计算

接着看一下右视图(逆着图5y轴往左看),在右视图中粉红色箭头表示重力加速度g,角度β就是pitch俯仰角的相反数也就是-pitch(因为规定pitch是绕着图5y轴逆时针旋转过的角度,而β角是顺时针旋转的,所以要取一个负号)。

β角的对边是ax,领边是az,所以使用三角关系就得到了β角也就是俯仰角

加速度计测量方式的优缺点

缺点:外部震动会引入噪声(白噪声)。因为在实际的情况下,运动的物体可能处于变速运动,而且也可能受到周围各个方向上的力从而使物体产生震动,如果产生震动其实就是一种变速运动,变速运动就会有加速度所以会产生各个方向上随机的加速度,那反应在波形上如下所示是x轴上的加速度的实测的曲线,在曲线上就会看到各种各样的毛刺,这些毛刺就是周围震动产生的影响,毛刺的出现是随机的而且幅度大小也随机所以类似于一种白噪声,所以只使用重力加速度去计算欧拉角是不够的,需要引入其它的测量方法

接下来讲解理解一下陀螺仪的测量物体运动的姿态

陀螺仪(Gyroscope)与姿态测量

陀螺仪就是使用角动量守恒物理定律所制作的一种传感器用来测量角速度。陀螺仪能够测量绕轴旋转的角速度,单位°/s

对于mpu6050可以输出三个轴向的角速度,分别是gx,gy,gz。gx就是飞机绕着x轴逆时针旋转的角速度,gy就是绕着y轴逆时针旋转的角速度,gz就是绕着z轴旋转的角速度。例如从mpu6050传感器中读出gx的值是720,也就是意味着飞机模型每秒会绕着x轴旋转两周。

有了角速度后可以进行计算欧拉角, 接下来理解一下计算过程

以pitch俯仰角为例理解角速度计算欧拉角

我们知道pitch俯仰角是绕y轴旋转过的角度,gy是绕y轴逆时针旋转的角速度,所以gy就是pitch俯仰角的一个导数(角速度等于角度关于时间的导数,不理解的看下方灰色块补充处),对pitch俯仰角求导就得到了gy。如下图,假设灰色线是pitch俯仰角的一个曲线,gy就代表曲线上的切线也就是曲线的斜率

如下,在t0时刻开始经过∆t时间到t1新时刻的pitch俯仰角=t0时刻的pitch俯仰角+gy乘∆t(∆t时间很短所以在∆t时间内曲线的斜率保持不变,又角速度等于角度关于时间的导数,所以gy乘∆t就等于∆t时间的pitch俯仰角)

 综上,把这个规律总结为一个公式,新角度=上次角度+角速度x间隔时间 ,进而就求出了欧拉角

所以就有了下面三个公式,其中t表示新角度的时间,新角度时间t减去∆t就是上次角度的时间

陀螺仪计算欧拉角的优缺点

 优点:准确、无干扰。因为陀螺仪是使用角动量守恒原理来制作的传感器,因此不会受到外部震动的影响,所以短期的测量结果是非常准确的

缺点:误差会累积。因为可以从公式中得知新角度是使用上一次的角度作为依据进行计算的,而新计算的角度在下一次的运算过程中又会被作为计算更新角度的计算依据,所以计算过程是一个迭代的过程,若在迭代的过程中某一次的运算产生了误差,那么这个误差就会被累积下去,当不断累积这个误差时我们计算的欧拉角的值就会跟实际的值产生偏移,这个就是误差累积。
如下图所示是实测的一个曲线,其中粉红色曲线是实测的gy值也就是绕y轴旋转的角速度,黄色线是实测pitch 俯仰角的值,红色线是我们通过上面公式所计算出的新角度pitch 俯仰角的值。可以看到刚开始时计算的俯仰角和实测 俯仰角是重合的,然后随着时间的延长,这个误差会逐渐累积,计算值和实测值之间的差距会越来越大,最终会完全偏离实际值

补充***理解角速度等于角度关于时间的导数***

角速度(ω)表示每单位时间角度的变化率,其单位是rad/s。

角度(θ)表示物体在转动过程中转过的角大小,其单位是rad(弧度)。

两者之间的关系为:ω = dθ/dt   其中,dθ是角度θ在时间dt内的变化量。这表示角速度ω等于角度θ关于时间t的导数。

通过这个关系式,可以推导出:θ = ∫ωdt   即角度等于角速度ω关于时间t的积分。

综上:

如果给出角度θ与时间t的函数,可以通过求导获得角速度ω与时间t的关系。

如果给定角速度ω随时间t的函数表达式,可以通过积分求出角度θ与时间t的关系。

总结: 

加速度计和陀螺仪的优缺点正好相反,是可以互相补足的,加速度计时使用反正切值直接推导出的欧拉角所以长期来看不存在漂移,陀螺仪是使用迭代的方式进行计算的所以误差会累积即长期会漂移严重

综上,接下来将加速度计和陀螺仪这两个测量结果结合起来从而得到一个更精确的欧拉角

姿态解算算法1-互补滤波

数据融合,首先计算陀螺仪和加速度计的欧拉角测量结果,然后将这两个结果前面都乘一个系数权重相加就得到了融合之后的最终结果。

陀螺仪前面权重是α,加速度计前面权重是1-α,例如α=0.98,加速度计的权重就是0.02。在实际的使用过程中可以微调α的值来让融合之后获得更好的性能。

数据融合具体计算过程如下: 

通过加速度计来计算出欧拉角中roll翻滚角和pitch俯仰角的值

 通过陀螺仪读出三轴的角速度gx,gy,gz,就可以使用原来的角度+角速度乘以∆t算出新的角度,这样就通过陀螺仪计算出了三个欧拉角Roll翻滚角,Pitch俯仰角,Yaw偏航角

然后对两组测量欧拉角的结果进行融合,通过陀螺仪和加速度计的欧拉角测量结果,将这两个结果前面都乘一个系数权重相加就得到了融合之后的欧拉角的最终结果。

权重α的取值问题

α的值越大就代表越信任陀螺仪的测量结果,反之则代表越信任加速度计的测量结果,α不易取太大也不易取太小,α的取值可以用下面这个公式,其中∆t代表读取传感器的时间间隔(例如以200Hz的频率去读数取mpu6050的测量结果,这时的读取的间隔就是5ms,这个不理解的可以看下面的灰色块补充处理解)

接下来讲一下关于上面公式中的τ的含义

 下图中紫色线表示使用陀螺仪计算的一个结果,红色线表示使用加速度计计算的结果,粉红色表示融合后的结果。

可以看到对于陀螺仪计算的结果的变化趋势是对的,但是和真实值(红色线)之间存在着较大的偏移,对于红色线来说大体的趋势是对的但是有一些毛刺噪声,对两组数据进行融合得到粉红色的曲线,粉红色线就比较好的反应了运动姿态

τ值就等于加速度计对陀螺仪纠偏移的一个时间,τ时间越短代表收敛的速度就越快,就越接近于加速度计的测量结果,τ的时间越长代表收敛的速度就越慢,就越接近于陀螺仪的测量结果,所以τ要取一个合适的值,一般τ取值为0.1s

补充***200Hz是5ms ***

每秒二百次,每次二百分之一秒,二百分之一秒就是0.005秒。一秒等于一千毫秒,所以一个周期就是五毫秒,五毫秒还等于五千微秒

姿态解算算法2-四元数法

四元数法 (又称四参数法) 。英国数学家W.R.Haminlton 在1843 年在数学中引入了四元数。但直到20 世纪60 年代末期这种方法还没有得到实际应用,随着空间技术、计算技术SINS 技术的发展,四元数才引起人们的重视。求解四元数微分方程要解四个微分方程。虽然要比解欧拉微分方程多一个方程,但其优越性在于计算量小、精度高、可避免奇异性,该方法是目前研究的重点之一。由于方向余弦法在对载体姿态动力学求解时会产生歪斜、刻度和漂移误差等,然而,SINS 中在进行姿态求解时估计出这些误差是很重要的。与方向余弦法相比,四元数法的优点在于不仅歪斜误差等于零;而且刻度误差的推导很简单,能得出便于进一步分析的解析表达式,而方向余弦法只有在特殊的情况下才能分析和检测到刻度误差,且不能得出通用的结论。通过从不同角度对欧拉角法、方向余弦法和四元数法进行对比。结果表明四元数法具有最佳的性能。

顾名思义,四元数是由四个元构成的数。

其中,q0、q1、q2、q3是实数,i、j、k即使互相正交的单位向量,又是虚单位向量

四元数详细推到余请看参考链接: 无人机四元数解算姿态角解析

姿态解算算法3-卡尔曼滤波

采用递归的方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能进行状态估计,需要的存储空间小,每一步的计算量小。

如下蓝色的波形是实际测得的数据,红色的波形是经 Kalman 滤波后的数据波形。

注:这里是实际应用激光测距传感器(TOF)vl53l0x 测得的距离数据。

组成

1.预测状态方程

由 系统状态变量k-1时刻的最优值 和 系统输入 计算出k时刻的 系统预测值

        ①. X k-1|k-1 为k-1时刻的输出。
  ②. 当X为一维数据时,Fk的值是1。
  ③. 一维数据下(uk=0时):系统预测值 = 系统状态变量k-1时刻的最优值。 


2. 预测协方差方程 

根据 k-1时刻的系统协方差 预测 k时刻系统协方差

①. 当X为一维数据时,Fk的值是1。

3. 卡尔曼增益方程

根据(k时刻) 协方差矩阵的预测值 计算 卡尔曼增益

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。

4. 跟新最优值方程(卡尔曼滤波的输出)

根据 状态变量的预测值 和 系统测量值 计算出 k时刻状态变量的最优值。 

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。 

5. 更新协方差方程

为了求 k时刻的协方差矩阵。(为得到k+1时刻的卡尔曼输出值做准备)

①. 当 Pk|k-1 为一个一维矩阵时,Hk 是1。 

参考链接:卡尔曼(Kalman)滤波算法原理、C语言实现及实际应用_卡尔曼滤波算法c语言-CSDN博客

MPU6050简介

mpu6050会测量角速度、加速度、温度三种不同的物理量,芯片内部有陀螺仪、加速度计、温度计,这三个传感器测量的模拟量经过AD转换成数字信号,得到gx,gy,gz,ax,ay,az,t温度,这些物理量会进入DMP进行运算,DMP是可编程的器件,可以将程序下载到DMP里对传入的数据进行处理(一般情况下不用),然后通过I2C接口去配置芯片的一些参数和读出测量结果。

阅读产品说明书和寄存器手册可参考进行编程,会放在资料包,后面会讲编程

需要注意,MPU6050没有磁力计,所以偏航角会有漂移。建议使用四元数法的程序

硬件连接

接五个引脚到主控芯片,分别是VCC、GND、SCL(主i2c时钟)、SDA(主i2c数据)和AD0(使用软件I2C可以不接此引脚)。

其中VCC接3.3v。SCL和SDA可查阅主控芯片的数据手册了解引脚。同时SCL和SDA需要外接上拉电阻4.7k(因为I2c接口使用的是开漏输出模式)。GND接电源地。AD0是地址选择引脚(mpu6050为从机),接电源地GND。

MPU6050剩余的XDA、XCL和INT引脚悬空,不接线。XDA和XCL引脚用于将6轴传感器拓展到9轴(接磁力计)INT是中断引脚,每当一个Sample的数据采集完成后发送脉冲

在数据手册中可查找到I2C的SCL和SDA引脚 。

编程实现-源码下载

包含完整3个算法源码+工程文件+上位机软件+模块参考资料

源码下载地址:https://download.csdn.net/download/m0_61712829/89087094?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89087094?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isValid(String s) {int n s.length();if (n % 2 1) {return false;}Map<Character, Character> pairs new HashMap<Character, Character>() {{put(), ();put(], [);put(}, {);}};Deque<…

蓝桥 python笔记15——矩阵运算、基础数论、GCD和LCM、质数、唯一分解定理、快速幂

目录 矩阵运算 基础数论 GCD和LCM 质数 唯一分解定理 快速幂 矩阵运算 矩阵加减法&#xff1a; 矩阵和数相乘&#xff1a; 矩阵转置&#xff1a; 矩阵乘法&#xff1a; # 矩阵乘法 def mul(A,B):N,Mlen(A),len(A[0])#行数&#xff0c;列数_M,Klen(B),len(B[0])if M!_M:re…

rsync 远程同步----------安全高效的异地备份方案

目录 一、rsync介绍 rsync和cp的区别 rsync和scp的区别 二、rsync同步方式 rsync备份的方式 三、配置rsync源服务器 ①本地复制 ②下行同步 ③上行同步 四、常用Rsync命令 五、配置源的两种表达方法 六、部署rsync下行同步 ①环境准备 ②配置rsync源服务器------…

Linux 函数学习 poll

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

基于SSM+Jsp+Mysql的网络视频播放器

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

使用 Python 的 LSTM 进行股市预测

目录 一、说明 二、为什么需要时间序列模型&#xff1f; 三、下载数据 3.1 从 Alphavantage 获取数据 3.1 从 Kaggle 获取数据 3.3 数据探索 3.4 数据可视化 四、将数据拆分为训练集和测试集 五、数据标准化 六、通过平均进行一步预测 6.1 标准平均值 6.2 指数移动平均线 6.3 如…

全光谱台灯哪个牌子好,2024全光谱护眼台灯推荐

近年来&#xff0c;全光谱台灯悄然跻身于家庭必备品之列&#xff0c;赢得了众多消费者的好评。它们以减轻眼睛疲劳的功效而受到推崇&#xff0c;尽管也有声音质疑其实际效用&#xff0c;认为所谓的益处不过是一种心理安慰。面对这些相互矛盾的观点&#xff0c;许多消费者感到困…

WebGIS实现各地区COVID-19数据一览

1.项目地址 GISpjd/WebGIS-Show-Covid19 (github.com)&#xff0c;具体每个文件的职能可以参考README文档。 2.前言 预览 >> 所用技术栈&#xff1a; 项目需求本身不是过于复杂&#xff0c;所以没有在相应前端框架下完成&#xff0c;但转入框架也是比较容易的 &#…

2024最新最简单的安卓底部菜单栏教程

2024最新最简单的安卓底部菜单栏教程 大界面跳转 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);BottomNavigationView b…

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…

STM32 H7系列学习笔记

必备的API知识 第 1 步&#xff1a;系统上电复位&#xff0c;进入启动文件 startup_stm32h743xx.s&#xff0c;在这个文件里面执行复位中断服务程序。 在复位中断服务程序里面执行函数 SystemInit&#xff0c;在system_stm32h7xx.c 里面。*之后是调用编译器封装好的函数&…

Socket 通信机制详解

Socket 是网络编程中一种重要的通信机制&#xff0c;它允许不同的计算机通过网络进行数据交换。 一、 Socket 的概念 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;它提供了在网络上进行通信的接口。 Socket 本质上是一种通信的端点&#…

Vue3 ts环境下的PropType

简介 在Typscript中&#xff0c;我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景&#xff1a; 我们通过request请求从服务端获取了一条数据&#xff0c;数据是个Array的格式&#xff0c;Array中的每个元素又是一个对象&#xff0c;像下…

坚持十天做完Python入门编程100题第三天加班

坚持十天做完Python入门编程100题第三天加班 第24题 扫描文件列表第25题 如何将字典转换成JSON并写入json文件&#xff1f;第26题 JSON转换成字典 第24题 扫描文件列表 如何扫描当前目录下的文件列表&#xff1f;解析&#xff1a;可以使用python内置的glob模块&#xff0c;用法…

Golang | Leetcode Golang题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; func mergeTwoLists(list1, list2 *ListNode) *ListNode {if list1 nil {return list2 // 注&#xff1a;如果都为空则返回空}if list2 nil {return list1}if list1.Val < list2.Val {list1.Next mergeTwoLists(list1.Next, list2)re…

项目管理工具——使用甘特图制定项目计划的详细步骤

甘特图是一种直观的项目管理工具&#xff0c;它有助于我们清晰地展示任务安排、时间管理和项目的进度。以下是使用甘特图制定项目计划的详细步骤&#xff1a; 1、创建项目&#xff1a;首先&#xff0c;在进度猫中创建新的项目&#xff0c;并设置项目的时间、工作日等参数。根据…

44-技术演进(下):软件架构和应用生命周期技术演进之路

应用、系统资源、应用生命周期管理这 3 个维度&#xff0c;构成了我们对云的所有诉求。 我会介绍下应用维度和应用生命周期管理维度的技术演进。 我们就先来看下软件架构的演进之路。 软件架构的演进 软件架构技术演进如下图所示&#xff1a; 单体架构 在单体架构中&#xff…

乐得瑞LDR6020 Type-C 一拖二/一拖三快充线方案介绍

随着移动设备的普及和功能的日益增强&#xff0c;电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求&#xff0c;各大厂商纷纷推出了各种快充技术和产品。在这个背景下&#xff0c;乐得瑞公司推出了一款名为LDR6020的一分二PD快充线方案&#xff0c;该方案采用…

Unity 九宫格

1. 把图片拖拽进资源文件夹 2.选中图片&#xff0c;然后设置图片 3.设置九宫格 4.使用图片&#xff0c;在界面上创建2个相同的Image,然后使用图片&#xff0c;修改Image Type 为Sliced

Nodejs 第六十二章(短链接)

短链接介绍 短链接是一种缩短长网址的方法&#xff0c;将原始的长网址转换为更短的形式。它通常由一系列的字母、数字和特殊字符组成&#xff0c;比起原始的长网址&#xff0c;短链接更加简洁、易于记忆和分享。 短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些…