初步认识ADRC(自抗扰控制)与应用

2023-05-16

这是一个目录

  • ADRC的基本原理
    • 一、参考资料推荐
    • 二、为什么PID好,以及,为什么PID不够好
      • 1.为什么PID好——不依赖于模型的控制器
      • 2.为什么PID不够好——PID的缺点
    • 三、ADRC给出的方案——如何保留PID的优点,同时弥补PID的缺点
      • 1. 误差的取法——安排过渡过程
      • 2. 由误差提取误差微分的方法——跟踪微分器
      • 3. 加权和的策略不一定最好——非线性反馈
      • 4. 积分反馈的副作用——扩张状态观测器
  • ADRC的公式以及参数整定
      • 一、跟踪微分器(TD)
      • 二、非线性反馈函数
      • 三、扩张状态观测器(ESO)
  • ADRC应用到二阶导弹模型
      • matlab脚本
      • simulink模型
  • 结语

ADRC的基本原理

一、参考资料推荐

想要初步了解ADRC,可以从韩京清教授的一篇文献和一本书看起
1.文献: 从PID技术到“自抗扰控制”技术(《控制工程》,2002)
2.书: 自抗扰控制技术——估计补偿不确定因素的控制技术

不过文章里讲的不是很细,是把之前多篇文章内容综合到一起提出了ADRC整体的控制框架。想要更深入学习当然还是看书更好一些。


二、为什么PID好,以及,为什么PID不够好

1.为什么PID好——不依赖于模型的控制器

经典的PID控制直到如今都还是应用最广泛的控制算法,大部分的控制系统里用的都还是这个。它的好处主要在于,不需要被控对象的模型。

什么是被控对象的模型?

举个例子,假设我们以小车的速度 V V V为被控量,但是推动小车的力 F F F才是我们的控制量。

考虑阻力并假设阻力和速度成正比的话,根据牛顿第二定律我们可以得到小车的动力学方程 F − k V = m a F-kV=ma FkV=ma,其中 k k k为阻力系数, m m m为小车质量。

根据质点运动学方程又有 V ˙ = a \dot{V}=a V˙=a

这样就可以得到利用外力 F F F控制小车速度 V V V的模型 V ˙ = − k m V + 1 m F \dot{V}=-\frac{k}{m}V+\frac{1}{m}F V˙=mkV+m1F
(也就是 x ˙ = − A x + B u \dot{x}=-Ax+Bu x˙=Ax+Bu的线性模型的结构)

OK,这个方程通常就是我们需要的,如果要应用现代控制理论(比如最优控制)设计一个控制器,那么我们就需要知道这个模型的全部信息东西,在这里就是模型的结构以及阻力系数 k k k和小车质量 m m m

获得这个模型存在两个问题:

  1. 实际工程的模型结构远比这复杂。比如阻力和速度的关系可能并不是成正比,我们只是这么假设的,实际的的关系可能是一个复杂的非线性函数。
  2. 模型的参数难以获得。这里的阻力系数 k k k和小车质量 m m m好像挺容易获得的,但是实际被控对象的模型参数可能要多的多,有些是很难获得的。

由于模型难获得,而现代控制理论又大多基于模型设计,虽然能够满足各种各样的性能条件,但大都不够实用,这也就导致了PID一直称霸各个控制领域。因为PID是只利用误差 e e e 来计算控制量的,不需要模型知识,只需要调一调 K P , K I , K D K_P,K_I,K_D KP,KI,KD 三个参数就能得到可以接受的效果。


2.为什么PID不够好——PID的缺点

注意到前面说 PID 能得到可以接受的效果,我们当然希望PID能够得到更好的控制效果,那么PID还有哪些不足呢?

以下摘自前面说的韩京清的那篇文章

  1. 误差的取法(直接由给定指令计算误差)
  2. 由误差提取误差微分的方法(使用传统的线性微分器)
  3. 加权和的策略不一定最好(比例,积分,微分项各乘上放大系数 K K K然后相加来计算控制量)
  4. 积分反馈有许多副作用(对误差进行积分并放大然后反馈到系统)


三、ADRC给出的方案——如何保留PID的优点,同时弥补PID的缺点

上一节写了PID的几个缺点,下面一条一条解释这些缺点的意思,并给出ADRC的解决方案:

1. 误差的取法——安排过渡过程

直接根据给定指令计算误差可能会导致控制效果变差,比如有些指令里包含了我们不希望的高频信号,这类信号的例子有:阶跃指令,方波指令。
为了将高频信号解决掉,ADRC提出了安排“过渡过程”的方法,类似于把给定指令进行低通滤波,得到一个更容易实现的指令,从而在牺牲一点快速性的同时大大降低超调。

这里给个例子,考虑两个系统,一个带有指令滤波,一个不带:
图1 带有指令滤波器

图1 带有指令滤波器👆

图2 不带指令滤波器

图2 不带指令滤波器👆

当指令为单位阶跃指令,只用一个增益 K = 2 K=2 K=2来控制二阶系统 1 s 2 + s \frac{1}{s^2+s} s2+s1的时候,有无指令滤波器的效果如下:
图3 带不带指令滤波器的控制效果对比

图3 带不带指令滤波器的控制效果对比👆

不难看到,加了指令滤波器之后,虽然上升速度变慢了,但是超调更小了,调节时间基本没变,甚至还缩短了。
安排过渡过程也是类似这样的道理。因为像阶跃这样变化太快的突变信号,当控制器增益高的话就很容易引起超调,如果提前安排过渡过程,让指令信号慢一点变化,就能得到更好一点的控制效果。


2. 由误差提取误差微分的方法——跟踪微分器

经典的线性微分器,如 W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s以及 W = s ∗ ω 2 s 2 + 2 ω s + ω 2 W=\frac{s*\omega^2}{{s}^2+2\omega{s}+\omega^2} W=s2+2ωs+ω2sω2都是在跟踪给定信号的同时输出微分量。
这部分在韩京清的那本书上也有介绍,但是用公式解释可能比较枯燥,在simulink上画图就比较直观:

对于一阶线性微分器: W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s,其实可以看成是一个惯性环节的微分:
图4 一阶线性微分器

图4 一阶线性微分器👆

我们知道惯性环节 G = 1 τ s + 1 G=\frac{1}{\tau{s}+1} G=τs+11 是可以无超调的跟踪到给定阶跃信号的。当 G = 1 τ s + 1 G=\frac{1}{\tau{s}+1} G=τs+11 跟踪原信号的同时,积分器 1 s \frac{1}{s} s1 前面的量也就是 W = G ∗ s = s τ s + 1 W=G*s=\frac{s}{\tau{s}+1} W=Gs=τs+1s 也在输出 G G G的微分量,那么我们就可以管这个叫做跟踪-微分器。它一边实现对原信号的跟踪,一边提供微分信号。

注意:当上图的Gain越大,也就是惯性环节的时间常数 τ \tau τ 越小的时候,惯性环节跟踪原信号就越快。对于输入信号为正弦波信号的情况就是相位滞后和幅值损失越小,这一点可以综合惯性环节的伯德图来思考。我们当然是希望相位滞后尽可能的小,但是 τ \tau τ 越大则 W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s 得到的微分信号对高频噪声的放大也越明显,这一点也可以综合微分环节 s s s 的伯德图来考虑。

类似的,二阶微分器 W = s ∗ ω 2 s 2 + 2 ω s + ω 2 W=\frac{s*\omega^2}{{s}^2+2\omega{s}+\omega^2} W=s2+2ωs+ω2sω2 也可以看成一个阻尼比为1的震荡环节 G = ω 2 s 2 + 2 ω s + ω 2 G=\frac{\omega^2}{{s}^2+2\omega{s}+\omega^2} G=s2+2ωs+ω2ω2 的微分,即 W = G ∗ s W=G*s W=Gs

二阶线性微分器

图5 二阶线性微分器($\omega=10$)👆

注意:这个二阶惯性环节,也可以看成一个闭环二阶系统跟踪指定的指令(这句话比较有意思)。公式如下:
{ x ˙ 1 = x 2 x ˙ 2 = u = − ω n 2 ( x 1 − x r e f ) − 2 ω n x 2 \left\{ \begin{array}{rcl} \dot{x}_1 &=& x_2 \\ \dot{x}_2 &=& u =-\omega_n^2(x_1-x_{ref})-2\omega_nx_2\\ \end{array} \right. {x˙1x˙2==x2u=ωn2(x1xref)2ωnx2

其中 x r e f x_{ref} xref 为指定的指令。这个公式的形式和上面那个图虽然不是很像,但是实际上二者是等效的。

参考这个思想,可不可以用最速控制来实现这个二阶系统的指令跟踪,从而构造出一个新的跟踪-微分器?

ADRC的跟踪-微分器就是这么来的。
考虑一个二阶系统:
{ x ˙ 1 = x 2 x ˙ 2 = u ( ∣ u ∣ ≤ r ) \left\{ \begin{array}{rcl} \dot{x}_1 &=& x_2 \\ \dot{x}_2 &=& u &(|u|≤r)\\ \end{array} \right. {x˙1x˙2==x2u(ur)
则以原点为收敛点的最速控制函数为:
u = − r s i g n ( x 1 + x 1 ∣ x 2 ∣ 2 r ) u=-rsign(x_1+\frac{x_1|x_2|}{2r}) u=rsign(x1+2rx1x2)

可以设计跟踪器为:
u = − r s i g n ( x 1 − x r e f + x 1 ∣ x 2 ∣ 2 r ) u=-rsign(x_1-x_{ref}+\frac{x_1|x_2|}{2r}) u=rsign(x1xref+2rx1x2)

这就是ADRC的跟踪-微分器的连续形式,但是这个东西在进入稳态后算出来的微分量会一直高频振荡。主要原因就是 u u u 中符号函数 s i g n ( x ) sign(x) sign(x)的存在,即使经过积分一次后得到的 x 2 x_2 x2 依然避免不了震荡。因为数值积分嘛,你懂的。

所以为了能够实现离散系统的最速控制,消除跟踪-微分器的稳态颤振,韩教授又搞了一个离散最速控制函数,这个比较复杂一点。这里我们只负责介绍跟踪-微分器的思想,关于离散最速控制函数放到下一部分(ADRC的公式以及参数整定)再讲。

总之,这里的跟踪-微分器是为了解决1、2两个问题:安排过渡过程以及提供微分信号。

注意:其实第二个问题在ADRC里被拆成两部分了,由误差提取误差微分包括了两部分:指令的微分和输出量的微分(因为误差等于指令减去输出量)。指令的微分是由跟踪-微分器搞定的,而输出量的微分是由后面的扩张状态观测器搞定的。


3. 加权和的策略不一定最好——非线性反馈

传统的线性反馈方式(就是误差直接乘上一个增益)在收敛速度以及抗扰动能力上存在不足。
ADRC的方案是 用非线性函数代替传统的增益(用非线性反馈代替线性反馈)。
这里也可以举个例子,比较两个系统,分别使用线性反馈和非线性反馈:(1) x ˙ = − K x \dot{x}=-Kx x˙=Kx
以及 (2) x ˙ = − K ∗ s i g n ( x ) ∗ ∣ x ∣ α ( α < 1 ) \dot{x}=-K*sign(x)*|x|^\alpha(\alpha<1) x˙=Ksign(x)xα(α<1)
假设 x 0 ≠ 0 x_0≠0 x0=0,则可以证明系统(2)能在有限时间内收敛到0,而系统(1)是指数收敛的,意思是永远收敛不到0。

这里也给一个仿真例子:
图6 使用线性反馈

图6 使用线性反馈👆

图7 使用非线性反馈,

图7 使用非线性反馈👆

初始值为1时,仿真结果:
图8 仿真对比

图8 使用线性反馈和非线性反馈仿真对比👆

可以看到非线性反馈更快地收敛到0了,不过需要注意的是非线性反馈相对于线性反馈的快速性的优势只在 x < 1 x<1 x<1的时候才有,而且在靠近 x = 0 x=0 x=0的附近容易引起颤振。


4. 积分反馈的副作用——扩张状态观测器

积分的主要作用之一就是消除扰动(可以认为它是简单的扰动观测器),但是积分起作用比较慢,而且还会引起超调。
所以ADRC直接把积分舍弃了,使用扩张状态观测器来观测总扰动,将系统补偿成纯积分链(不知道这个学名是啥)的形式。这样控起来就容易多了,可以说,扩张状态观测器是ADRC的灵魂和精髓所在,在它面前,前面几个都是次要的。

用一个例子说明一下上面所说的几点:

假设某系统 x ˙ = u + w \dot{x}=u+w x˙=u+w,其中 x x x为状态量(也是被控量), u u u为控制量, w w w为未知的总扰动(包括模型偏差或者外部扰动等等)。

比较两种情况,一种是 w w w没有被补偿,在线性反馈的基础上加上积分反馈去抵消,以达到无静差的目的。另一种是把 w w w补偿掉,只剩一个积分环节,采用普通的线性反馈。

第一种情况: u = − K P ∗ x − K I ∗ ∫ x d τ u=-K_P*x-K_I*\int{x}d\tau u=KPxKIxdτ

图9 采用PI控制的方式

图9 采用PI控制的方式👆

w = 0.2 , x 0 = 1 w=0.2,x_0=1 w=0.2,x0=1,取 K P = 2 K_P=2 KP=2

先看一下没有积分反馈(也就是 K I = 0 K_I=0 KI=0)时 x x x最后能控成什么样子
得到的 x x x 的仿真结果为:

图10 无积分反馈时,最后  无法回到0,有静差

图10 无积分反馈时,最后 $x$ 无法回到0,有静差👆

接着给出有积分反馈(如上上图,也就是 K I = 0.8 K_I=0.8 KI=0.8)时 x x x最后能控成什么样子
得到的 x x x 的仿真结果为:

图11 有积分反馈时,虽然收敛过程坎坷了点,但最后无静差

图11 有积分反馈时,虽然收敛过程坎坷了点,但最后无静差👆

再看一下 K I ∗ ∫ x d τ K_I*\int{x}d\tau KIxdτ w w w的对比情况

图12 积分器对扰动的观测效果

图12 积分器对扰动的观测效果👆

这里说的是积分器对扰动的观测效果,其实应该是补偿效果。可以看到积分环节产生的超调现象比较明显,并且如果积分增益取大了则超调就大,如果取的小则收敛就慢,没辙。

第二种情况我们把扰动去掉(假设被观测出来然后补偿掉了),只用一个 K P K_P KP来控,那么结果的就很容易想到了:闭环之后这是一个单纯的惯性环节,没有超调,收敛的快慢只和增益有关,增益越大,收敛越快。

和前面的图6一样:
图13 补偿之后的一阶系统

图13 补偿之后的一阶系统👆

对于一阶系统来说,就是把模型补偿成一个积分环节( n n n阶系统补偿之后就是 n n n个积分串在一起)。

x x x 的仿真结果:
图14 (假设)补偿之后的控制效果

图14 (假设)补偿之后的控制效果👆

通过对比可以发现,还是把扰动补偿掉更好。

利用扩张状态观测器,ADRC理论上可以把一个任意阶的系统补偿成任意阶的积分链,然后就可以用简单的线性控制方法去实现控制了,而且也能得到较好的控制效果。所以说扩张状态观测器是ADRC的精髓,把前面的跟踪微分器换成一个别的什么的线性滤波器没问题,把非线性反馈换回线性反馈没问题,但是这个观测扰动并补偿的思想不能丢。


ADRC的公式以及参数整定

前面一直是一些简单的例子解释说明ADRC的各个组成部分,只是对概念的理解。接下来要给出ADRC的公式以及我对其参数的理解,理解参数的含义能够大大提升参数整定的能力。

下次再写。

一、跟踪微分器(TD)

二、非线性反馈函数

三、扩张状态观测器(ESO)

ADRC应用到二阶导弹模型

这部分的饼也先画上,其实模型和脚本我都已经弄好了。

matlab脚本

simulink模型

结语

发现这个ADRC还真挺好用的,而且里面的一些思想其实和一些非线性控制都是相通的。

比如指令滤波和指令微分器,这个在反步法里也是标配的,不过反步法里的指令微分直接拿来做前馈补偿的,不是用来计算误差微分的。
再比如非线性反馈,这是(终端)滑模控制里的嘛,不过滑模控制证明稳定性更容易一些。
最后是这个扩张状态观测器,本来是在龙伯格观测器基础上扩张了一个误差状态,然后把里面的线性项换成了非线性项,使其收敛更加快速,但是改造完之后这个ESO就跟高阶滑模观测器很像了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初步认识ADRC(自抗扰控制)与应用 的相关文章

  • 【学习总结】Kalibr标定相机与IMU

    本文仅用于记录自己学习过程 使用方法 Kalibr包括 xff1a 相机内参 xff0c 多相机外参 xff0c 已知IMU和相机内参的 相机与IMU标定 xff0c 以及扩展Kalibr支持IMU内参标定 当已知IMU内参和相机内参后 x
  • 【学习记录】Kalibr标定相机与IMU的一点记录

    一周更多的时间在搞这个Kalibr的相机与IMU的标定 xff0c 记录一些问题 xff1a 相机重投影误差 相机一定要好好标定 xff0c 如果重投影误差太大 xff0c 是优化不出来外参的 好在相机内参 xff0c 与IMU外参标定 x
  • 【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU

    最近看了一篇论文 xff0c 很是头大 xff0c 大概看懂了个所以然 记录一下 论文 xff1a Monocular Visual Inertial State Estimation With Online Initialization
  • PYTHON用法第一篇:print的用法。

    hello大家好 xff0c 我是会编程的杜子腾 xff0c 今天我们来学习一下python实例 xff1a print用法 使用材料 xff1a 一台电脑 python各版本 随便一个 xff0c 尽量选python3 python文本编
  • 那些女程序员们的故事

    点击上方蓝字 关注我们 xff0c 和小伙伴一起聊技术 xff01 程序媛是程序员大军中一道美丽的风景线 xff0c 今天的这篇文章就选取了一些女程序员们的故事 xff0c 希望当所有人了解了他们的经历后 xff0c 能让这个 重男轻女 的
  • shell中脚本变量和函数变量的作用域

    原文地址 xff1a http blog csdn net ltx19860420 article details 5570902 1 shell脚本中定义的变量是global的 xff0c 其作用域从被定义的地方开始 xff0c 到she
  • 最简单易懂的10堂算法入门课——算法是什么

    算法太重要了 人工智能 xff0c 机器学习 xff0c 大数据 xff0c 这些越来越常听到的字眼 xff0c 背后其实都是一个个 算法 诸多高新科技 xff0c 似乎都离不开 算法 的 加持 科学家 工程师 技术人员 xff0c 现在如
  • Opencv之Aruco码的检测和姿态估计

    1 介绍 Aruco码是由宽黑色边框和确定其标识符 id 的内部二进制矩阵组成的正方形标记 它的黑色边框有助于其在图像中的快速检测 xff0c 内部二进制编码用于识别标记和提供错误检测和纠正 单个aruco 标记就可以提供足够的对应关系 x
  • linux与window文件通过串口传输方法(zmod传输方法)

    我们在调试linux产品时 xff0c 有的产品没有网口 xff0c 只有串口 这时nfs tfp都用不了 只能用串口来传输文件 把windows上文件通过串口传输到开发板上 开发板和电脑通过串口连接 2 使用MobaXterm工具 xff
  • CentOS 7 需要安装的常用工具,及centos安装fcitx 搜狗输入法的坑旅

    Centos常用设置 1 当最大化时隐藏标题栏 或者使用tweak tool 在字体中将标题栏字体设置为0 建议这个方法 2 添加epel源 yum y nogpgcheck install http download fedoraproj
  • 小学数学公式大全

    小学数学公式大全 第一部分 xff1a 概念 1 加法交换律 xff1a 两数相加交换加数的位置 xff0c 和不变 2 加法结合律 xff1a 三个数相加 xff0c 先把前两个数相加 xff0c 或先把后两个数相加 xff0c 再同第三
  • c++中的点号(.),冒号(:)和双冒号(::)运算符

    1 冒号 xff08 xff09 用法 xff08 1 xff09 表示机构内位域的定义 xff08 即该变量占几个bit空间 xff09 typedef struct XXX unsigned char a 4 char型的字符a占4位
  • C++ 对象和实例的区别,以及用new和不用new创建类对象区别

    起初刚学C 43 43 时 xff0c 很不习惯用new xff0c 后来看老外的程序 xff0c 发现几乎都是使用new xff0c 想一想区别也不是太大 xff0c 但是在大一点的项目设计中 xff0c 有时候不使用new的确会带来很多
  • 巫泽俊...《挑战程序设计竞赛》算法及相关书籍论点

    为什么要参加程序设计竞赛 能提高程序设计能力 xff0c 掌握技巧 减少错误 xff1b 能结识更多的同好 xff0c 交流切磋 xff1b 能更好地推销自己 xff08 大赛的前几名往往受到世界知名公司的青睐 xff09 秋叶拓哉认为 x
  • (struct)结构体变量作为函数参数调用的方法小结

    结构体变量 结构指针变量 结构数组作为函数的参数应用实例分析 struct stud long int num float score 结构体变量作为函数的参数 xff0c 修改之后的成员值不能返回到主调函数 void funvr stru
  • 搭建nginx反向代理用做内网域名转发

    基于域名的7层转发的实现 xff08 NAT 43 反向代理 xff09 在实际办公网中 xff0c 因为出口IP只有一个 xff0c 要实现对外提供服务的话就必须得做端口映射 xff0c 如果有多个服务要对外开放的话 xff0c 这只能通
  • 从平面上最近的点对,谈谈分治算法

    首先介绍一下分治 xff08 Divide and Conquer xff09 算法 xff1a 设计过程分为三个阶段 Divide xff1a 整个问题划分为多个子问题 Conquer xff1a 求解各子问题 递归调用正设计的算法 Co
  • NOIP2017 国庆郑州集训知识梳理汇总

    第一天 基础算法及数学 基本算法 递推 递归 分治 二分 倍增 贪心 递推 指通过观察 归纳 xff0c 发现较大规模问题和较小规模问题之间的关系 xff0c 用一些数学公式表达出来 在一些题解中 xff0c 和 计数DP 是指同一个概念
  • 挑战程序设计竞赛 — 知识总结

    准备篇 1 5 运行时间 概述编写的目的是面向ACM程序设计竞赛 xff0c 不可避免的要涉及复杂度和运行时间的问题 xff0c 本节给出了解决问题算法选择的依据 假设题目描述中给出的限制条件为n lt 61 1000 xff0c 针对O
  • 阿里巴巴笔试题选解

    阿里巴巴笔试题选解 9月22日 xff0c 阿里巴巴北邮站 小题 xff1a 1 有三个结点 xff0c 可以构成多少种二叉树形结构 xff1f 2 一副牌52 张 去掉大小王 xff0c 从中抽取两张牌 xff0c 一红一黑的概率是多少

随机推荐

  • 腾讯2014软件开发笔试题目

    腾讯2014软件开发笔试题目 9月21日 xff0c 腾讯2014软件开发校招 简答题 广州 简答题 xff1a 1 请设计一个排队系统 xff0c 能够让每个进入队伍的用户都能看到自己在 中所处的位置和变化 队伍可能随时有人加入和退出 x
  • MAVLink简介

    MAVLink简介 Mavlink协议最早由 苏黎世联邦理工学院 计算机视觉与几何实验组 的 Lorenz Meier于2009年发布 xff0c 并遵循LGPL开源协议 Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议 xf
  • C/C++ 服务器程序(从入门到精通)

    Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务 为了学习这种控制台应用程序的基础知识 xff0c C xff08 不是C 43 43 xff09 是最佳选择 本文将建立并实现一个简单的服务程序 xff0c
  • 图像处理常用算法(C++/OPENCV)

    添加椒盐噪声 void salt Mat amp src int number for int i 61 0 i lt number i 43 43 int r 61 static cast lt int gt rng uniform 0
  • 【解决linux下连接向日葵失败或连接之后断开的解决方案】

    解决linux下连接向日葵失败或连接之后断开的解决方案 linux在软件中搜索lightdm桌面管理器并安装即可 xff01
  • 机器学习推荐系统评价指标之AUC

    机器学习推荐系统评价指标之AUC 综述AUC的计算过程AUC的优势 综述 AUC是机器学习模型中常见评价指标 xff0c 在推荐系统中也十分常见 和常见的评价指标Acc xff0c P xff0c R相比 xff0c AUC具备一定的优势
  • 多线程访问同步方法情况

    文章目录 1 多线程访问同步方法1 1 两个线程同时访问一个对象的同步方法1 1 1 代码演示1 1 2 运行结果 1 2 两个线程访问的是两个对象的同步方法1 2 1 代码演示1 2 2 运行结果 1 3 两个线程访问的是synchron
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列

    题目描述 xff1a 输入一个整数数组 xff0c 判断该数组是不是某二叉搜索树的后序遍历结果 如果是则返回 true xff0c 否则返回 false 假设输入的数组的任意两个数字都互不相同 参考以下这颗二叉搜索树 xff1a 5 2 6
  • 求解空间两个三维坐标系之间的变换矩阵

    三维刚体变换模型 即旋转 平移矩阵 RT矩阵 的估计方法 原理简单阐述 只要算出变换矩阵 就可以算出A坐标系的一个点P在坐标系B里的对应点坐标 即 T为3x3的转换矩阵 t 为3x1的位移变换向量 这里点坐标均为3x1的列向量 非齐次形式
  • Ubuntu下网络调试助手 NetAssist

    近期在ubuntu下开发一个网络相关的程序 之前在windows上开发时 xff0c 一直使用NetAssist这个小工具 xff0c 简洁实用 所以就安装了一个对应版本的网络调试助手 NetAssist 下载地址 xff1a 链接 xff
  • 程序员裸辞三个月,终于拿到大厂offer!网友:不应该!

    一个行业发展成熟 xff0c 必定会重新洗牌 xff0c 就像朝代的更替一样 xff0c 现在互联网发展就是遇到了这样的瓶颈期 xff0c 出现了衰退 xff0c 就形成大家口中所说的 互联网寒冬 但是有技术的人哪里怕过寒冬 xff0c 所
  • HttpUtils 用于进行网络请求的工具类

    用于进行网络请求的工具类 xff0c 可进行get xff0c post两种请求 xff0c 值得一提的是这个utils给大家提供了一个回调接口 xff0c 方便获取下载文件的进度 span class hljs keyword impor
  • deepin系统

    https www uc23 net xinwen 76259 html 据介绍 xff0c 深度操作系统 xff08 deepin xff09 自 2015 年开始 xff0c 就放弃基于 Ubuntu 作为上游 xff0c 选择 Ubu
  • 学习日志2

    这几天一直在思考如何解决摄像头与vins与fast planner如何相结合再应用的问题 因为摄像头是因特尔的D435i xff0c 于是决定在gazebo上实现D435i的仿真 由于D435I版本较新 xff0c 因此github上基本没
  • 学习日志3

    这几天准备用分别用ego planner与fast planner进行飞行仿真 本来准备在双系统的ubuntu上安装ego planner xff08 之前ubuntu上已经安装过vins fusion vins mono与fast pla
  • 学习日志5

    最近老师让我阅读了一篇新文章 xff0c 文章标题如下图 文章通过解决时间分配问题以及通过模型预测轮廓同时控制问题控制 xff08 MPCC xff09 优化能够使四旋翼无人机找到最优轨迹 xff0c 可以快速地避障 xff0c 速度甚至可
  • 万字长文 | 阿里大佬 ssp offer 的后台服务器开发学习路线

    前言 小北去年经历春秋招 xff0c 拿到了不少大厂 offer xff0c 其中包括 sp ssp 等 xff0c 感觉在复习准备校招上还是有一定方法的 xff0c 因为我自己是 Linux C C 43 43 路线 所以这一篇的主题是
  • 看完谷歌大佬的刷题笔记, 我直接手撕了200道 Leetcode 算法题

    如果你刷leetcode觉得吃力 那么一定需要这份谷歌大佬的leetcode刷题笔记 在这里推荐一个谷歌大佬的刷题笔记 每一道题的题解都写得非常清楚 作者在美国卡内基梅隆大学攻读硕士学位时 xff0c 为了准备实习秋招 xff0c 他从夏天
  • JVM中的栈区域

    一 栈 xff1a 在JVM中也叫栈内存 xff0c 主要负责java程序的运行 xff0c 栈在线程创建时被创建 xff0c 栈时线程私有的 xff0c 也即每一个线程都有自己的栈空间 xff0c 线程之间的运行不受影响 相互独立 二 栈
  • 初步认识ADRC(自抗扰控制)与应用

    这是一个目录 ADRC的基本原理一 参考资料推荐二 为什么PID好 xff0c 以及 xff0c 为什么PID不够好1 为什么PID好 不依赖于模型的控制器2 为什么PID不够好 PID的缺点 三 ADRC给出的方案 如何保留PID的优点