1、前言

文章将基于博客倒立摆自动控制学习笔记(二)的数学模型,设计LQR控制器,即
在这里插入图片描述

符号 含义 符号 含义
M M M 小车质量 m m m 摆杆质量
b 1 b_1 b1 小车移动阻尼 b 2 b_2 b2 摆杆转动阻尼
x x x 小车位置(水平向右为正) θ \theta θ 摆杆摆动的角度(逆时针转动为正)
F F F 作用到小车的外力(水平向右为正) l l l 转动关节到摆杆质心的长度
N 车 N_车 N 摆杆对小车的力水平分量 I I I 摆杆绕质心的转动惯量
N 杆 N_杆 N 小车对摆杆的力水平分量 P 杆 P_杆 P 小车对摆杆的力竖直分量
f f f 空气阻力 C d C_d Cd 阻力系数
ρ \rho ρ 空气密度 A A A 摆杆的特征面积

F − N 车 − b 1 x ˙ = M x ¨ N 杆 − f = m ( x ¨ − θ ¨ l c o s θ + θ ˙ 2 l s i n θ ) P 杆 − m g = − m ( θ ¨ l s i n θ + θ ˙ 2 l c o s θ ) P 杆 l s i n θ + N 杆 l c o s θ − b 2 θ ˙ = I θ ¨ N 车 = N 杆 f = 1 2 C d ρ x ˙ ∣ x ˙ ∣ A 直立 c o s θ (1-1) \begin{align*} &F-N_车-b_1\dot{x}=M\ddot{x}\\ &N_杆-f=m(\ddot{x}-\ddot{\theta}lcos\theta+\dot{\theta}^2lsin\theta)\\ &P_杆-mg=-m(\ddot{\theta}lsin\theta+\dot{\theta}^2lcos\theta)\\ &P_杆lsin\theta+N_杆lcos\theta-b_2\dot{\theta}=I\ddot{\theta}\\ &N_车=N_杆\\ &f=\frac{1}{2}C_d\rho \dot{x}|\dot{x}|A_{直立}cos\theta \end{align*} \tag{1-1} FNb1x˙=Mx¨Nf=m(x¨θ¨lcosθ+θ˙2lsinθ)Pmg=m(θ¨lsinθ+θ˙2lcosθ)Plsinθ+Nlcosθb2θ˙=Iθ¨N=Nf=21Cdρx˙x˙A直立cosθ(1-1)

2、系统模型

这里我们先把各个参数的值放上:

符号 数值 符号 数值
M M M 1kg m m m 0.5kg
b 1 b_1 b1 0.3 b 2 b_2 b2 0
l l l 0.5m g g g 9.8m/s^2

计算特征面积时,假设摆杆是0.032m×0.032m×1m的立方体木杆,密度为500kg/m3。
对于倒立摆系统而言,完全表征系统的最少状态变量1 X = [ θ , θ ˙ , x , x ˙ ] T \bm X=[\theta, \dot{\theta}, x, \dot{x}]^T X=[θ,θ˙,x,x˙]T,并由输入 F F F驱动该系统。

控制目标是将倒立摆控制到 [ θ , θ ˙ , x , x ˙ ] T = [ 0 , 0 , 0 , 0 ] T [\theta, \dot{\theta}, x, \dot{x}]^T=[0, 0, 0, 0]^T [θ,θ˙,x,x˙]T=[0,0,0,0]T的状态。参考周彬的《线性系统理论》,忽略掉泰勒展开的高阶项,可以在工作点 [ θ , θ ˙ , x , x ˙ ] T = [ 0 , 0 , 0 , 0 ] T [\theta, \dot{\theta}, x, \dot{x}]^T=[0, 0, 0, 0]^T [θ,θ˙,x,x˙]T=[0,0,0,0]T附近的小范围区域近似线性化:
{ s i n θ ≈ θ c o s θ ≈ 1 θ ˙ 2 ≈ 0 x ˙ ∣ x ˙ ∣ ≈ 0 s i n 2 θ ≈ 0 c o s 2 θ ≈ 1 (2-1) \begin{cases} sin\theta\approx\theta\\ cos\theta\approx1\\ \dot{\theta}^2\approx0\\ \dot{x}|\dot{x}|\approx0\\ sin^2\theta\approx0\\ cos^2\theta\approx1 \end{cases} \tag{2-1} sinθθcosθ1θ˙20x˙x˙0sin2θ0cos2θ1(2-1)
式(1-1)利用以下代码化简:(equation.mlx)

% 解出状态方程表达式(字母表达式)
clear; clc;
syms x x_dot x_ddot F N f theta theta_dot theta_ddot P  % 参数
% 初始化参数
M = 1;  % 小车质量(kg)
m = 0.5;  % 摆杆质量(kg)
l = 0.5;   % 转动关节到摆杆质心的长度(m)
b_1 = 0.3;  % 小车移动阻尼
b_2 = 0;   % 摆杆转动阻尼
I = (m*l^2) / 3;   % 摆杆转动惯量
g = 9.8;  % 重力加速度
C_d = 1.2;   % 阻力系数
rho = 1.293;   % 空气密度(kg/m3)
A0 = 0.032;    % 直立状态的特征面积,假设摆杆是0.032m*0.032m*1m的立方体木杆,密度为500kg/m3
theta0 = 30 * pi/180;   % 摆杆初始角度(rad)
theta_d = 0 * pi/180;   % 摆杆目标角度(rad)
x_d = 0;    % 目标位置

eq1 = F-N-b_1*x_dot == M*x_ddot;
eq2 = N-f == m * (x_ddot - theta_ddot*l*cos(theta)+theta_dot^2*l*sin(theta));
eq3 = P-m*g == -m*(theta_ddot*l*sin(theta)+theta_dot^2*l*cos(theta));
eq4 = P*l*sin(theta)+N*l*cos(theta)-b_2*theta_dot == I*theta_ddot;
eq5 = f == C_d*rho*x_dot*abs(x_dot)*A0*cos(theta);

eqns = [eq1, eq2, eq3, eq4, eq5];

vars = [x_ddot, theta_ddot, N, P, f];

[x_ddot, theta_ddot, N, P, f] = solve(eqns, vars)

并近似线性化,得到:
θ ¨ = 19.6 θ − 0.4 x ˙ + 1.33 F x ¨ = 3.27 θ − 0.27 x ˙ + 0.89 F (2-2) \begin{align*} &\ddot{\theta}=19.6\theta-0.4\dot{x}+1.33F\\ &\ddot{x}=3.27\theta-0.27\dot{x}+0.89F \end{align*} \tag{2-2} θ¨=19.6θ0.4x˙+1.33Fx¨=3.27θ0.27x˙+0.89F(2-2)
转换成状态空间方程:
X ˙ = A X + B F (2-3) \dot{\bm X}= \bm A \bm X+\bm B F \tag{2-3} X˙=AX+BF(2-3)
其中
A = [ 0 1 0 0 19.6 0 0 − 0.4 0 0 0 1 3.27 0 0 − 0.27 ] B = [ 0 1.33 0 0.89 ] (2-4) \begin{align*} &\bm A= \left[ \begin{matrix} 0 & 1 & 0 & 0 \\ 19.6 & 0 & 0 & -0.4 \\ 0 & 0 & 0 & 1 \\ 3.27 & 0 & 0 & -0.27 \end{matrix} \right]\\ & \bm B= \left[ \begin{matrix} 0 \\ 1.33 \\ 0 \\ 0.89 \end{matrix} \right] \end{align*} \tag{2-4} A= 019.603.271000000000.410.27 B= 01.3300.89 (2-4)

3、连续时间LQR控制介绍

内容参考文章推导倒立摆模型并使用LQR进行位置跟踪控制、文章【控制理论】离散及连续的LQR控制算法原理推导以及笔者在学校鲁棒控制课的课程资料。本节内容主要讨论无限时间调节器(Infinite Time Regulator)的情况。
考虑线性系统:
x ˙ = A x + B u , x ( 0 ) = x 0 , t ∈ [ 0 , ∞ ] J ( u ( ⋅ ) ) = ∫ 0 ∞ ( x T Q x + u T R u ) d t (3-1) \begin{align*} &\dot{\bm x}=\bm A \bm x+\bm B \bm u, \bm x(0)=\bm x_0, t\in[0,\infty]\\ &J(\bm u(\cdot))=\int_0^{\infty}(\bm x^T\bm Q\bm x+\bm u^T\bm R\bm u)dt \end{align*} \tag{3-1} x˙=Ax+Bu,x(0)=x0,t[0,]J(u())=0(xTQx+uTRu)dt(3-1)
其中 Q = D T D ≥ 0 \bm Q=\bm D^T\bm D\geq0 Q=DTD0 R > 0 \bm R>0 R>0。(注:这里是默认了目标状态为 x = 0 \bm x=\bm 0 x=0
假设 ( A , B ) (\bm A, \bm B) (A,B)是可控的且 ( A , D ) (\bm A, \bm D) (A,D)是可观测的,需要找到一个最优矩阵 K \bm K K和最优的控制输入 u ∗ ( t ) = − K x ( t ) u^{\ast}(t)=-\bm K\bm x(t) u(t)=Kx(t),使得代价函数 J ( u ( ⋅ ) ) J(\bm u(\cdot)) J(u())最小化。
u ∗ ( t ) = − K x ( t ) u^{\ast}(t)=-\bm K\bm x(t) u(t)=Kx(t)带入代价函数,有
J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x d t (3-2) J=\frac{1}{2}\int_0^{\infty}\bm x^T (\bm Q+\bm K^T\bm R\bm K)\bm xdt\tag{3-2} J=210xT(Q+KTRK)xdt(3-2)
可以看到,等号右边积分号内为二次型。为了去掉积分号,假设存在一个常量对称矩阵 P \bm P P使得
d d t ( x T P x ) = − x T ( Q + K T R K ) x J = 1 2 x T ( 0 ) P x ( 0 ) (3-3) \begin{align*} &\frac{d}{dt}(\bm x^T\bm P\bm x)=-\bm x^T(\bm Q+\bm K^T\bm R\bm K)\bm x\\ &J=\frac{1}{2}\bm x^T(0)\bm P\bm x(0) \end{align*}\tag{3-3} dtd(xTPx)=xT(Q+KTRK)xJ=21xT(0)Px(0)(3-3)
对一个二次型进行求导,并代入 x ˙ = A c x , A c = A − B K \dot{\bm x}=\bm A_c\bm x, \bm A_c=\bm A-\bm B\bm K x˙=Acx,Ac=ABK,有以下推导
d d t ( x T P x ) = [ ∂ ∂ x ( x T P x ) ] T d x d t = [ ( P + P T ) x ] T x ˙ = x T P x ˙ + x ˙ T P x = x T ( A c T P + P A c ) x (3-4) \begin{align*} \frac{d}{dt}(\bm x^T\bm P\bm x)&= [\frac{\partial}{\partial \bm x}(\bm x^T\bm P\bm x)]^T\frac{d\bm x}{dt}\\ &=[(\bm P+\bm P^T)\bm x]^T\dot{\bm x}\\ &={\bm x}^T\bm P\dot{\bm x}+\dot{\bm x}^T\bm P\bm x\\ &={\bm x}^T(\bm A_c^T\bm P+\bm P\bm A_c)\bm x \end{align*}\tag{3-4} dtd(xTPx)=[x(xTPx)]Tdtdx=[(P+PT)x]Tx˙=xTPx˙+x˙TPx=xT(AcTP+PAc)x(3-4)
结合式(3-3)和式(3-4)有
x T ( A c T P + P A c + Q + K T R K ) x = 0 (3-5) \begin{align*} {\bm x}^T(\bm A_c^T\bm P+\bm P\bm A_c+\bm Q+\bm K^T\bm R\bm K)\bm x=0 \end{align*}\tag{3-5} xT(AcTP+PAc+Q+KTRK)x=0(3-5)
由于状态向量 x \bm x x不可能恒为0,因此有
A c T P + P A c + Q + K T R K = 0 A T P + P A + Q + K T R K − K T B T P − P B K = 0 (3-6) \begin{align*} &\bm A_c^T\bm P+\bm P\bm A_c+\bm Q+\bm K^T\bm R\bm K=\bm 0\\ &\bm A^T\bm P+\bm P\bm A+\bm Q+\bm K^T\bm R\bm K-\bm K^T\bm B^T\bm P-\bm P\bm B\bm K=\bm 0 \end{align*}\tag{3-6} AcTP+PAc+Q+KTRK=0ATP+PA+Q+KTRKKTBTPPBK=0(3-6)
式(3-6)第二个式子可转换为
A T P + P A + Q − P B R − 1 B T P = − ( K − R − 1 B T P ) R ( K − R − 1 B T P ) T (3-7) \begin{align*} &\bm A^T\bm P+\bm P\bm A+\bm Q-\bm P\bm B\bm R^{-1}\bm B^T\bm P=-(\bm K-\bm R^{-1}\bm B^T\bm P)\bm R(\bm K-\bm R^{-1}\bm B^T\bm P)^T \end{align*}\tag{3-7} ATP+PA+QPBR1BTP=(KR1BTP)R(KR1BTP)T(3-7)
K = R − 1 B T P \bm K=\bm R^{-1}\bm B^T\bm P K=R1BTP,即等号右边=0时,左边的 P \bm P P可以取到“最小”,从而使得代价函数 J = 1 2 x T ( 0 ) P x ( 0 ) J=\frac{1}{2}\bm x^T(0)\bm P\bm x(0) J=21xT(0)Px(0)最小。(注:这里笔者暂时没有找到严格证明,为便于记忆,可以把等号左边看作是 P \bm P P的“二次多项式”)
此时
A T P + P A + Q − P B R − 1 B T P = 0 (3-8) \begin{align*} &\bm A^T\bm P+\bm P\bm A+\bm Q-\bm P\bm B\bm R^{-1}\bm B^T\bm P=\bm 0 \end{align*}\tag{3-8} ATP+PA+QPBR1BTP=0(3-8)
式(3-8)就是著名的连续时间代数Riccati方程。根据方程解出 P \bm P P ,就能得到 K \bm K K
注:文章【数理知识】Riccati 黎卡提 system里面有讲Riccati方程的解法,连续的和离散的都有,不过实际做控制设计的时候调现成的库即可。

4、LQR控制器设计

式(2-3)和式(2-4)已经给出了系统的状态空间方程。考虑到状态空间中每个状态以及输入的量纲都不一样,为了方便设计,尽可能将状态量限制在[-1, 1]的范围内,先将状态转换成无量纲的状态量。
{ θ N = θ / ( 0.26 r a d ) θ ˙ N = θ ˙ / ( 3 r a d / s ) x N = x / ( 1 m ) x ˙ N = x ˙ / ( 3 m / s ) F N = F / ( 50 N ) (4-1) \begin{cases} \theta_N=\theta/(0.26rad)\\ \dot{\theta}_N=\dot{\theta}/(3rad/s)\\ x_N=x/(1m)\\ \dot{x}_N=\dot{x}/(3m/s)\\ F_N=F/(50N) \end{cases} \tag{4-1} θN=θ/(0.26rad)θ˙N=θ˙/(3rad/s)xN=x/(1m)x˙N=x˙/(3m/s)FN=F/(50N)(4-1)

X N = T N X T N = [ 3.85 0 0 0 0 0.33 0 0 0 0 1 0 0 0 0 0.33 ] (4-2) \begin{align*} &\bm X_N=\bm T_N \bm X\\ &\bm T_N= \left[ \begin{matrix} 3.85 & 0 & 0 & 0 \\ 0 & 0.33 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0.33 \end{matrix} \right] \end{align*} \tag{4-2} XN=TNXTN= 3.8500000.330000100000.33 (4-2)
X ˙ N = A N X N + B N F N A N = A T N − 1 = [ 0 3 0 0 5.96 0 0 − 1.2 0 0 0 3 0.85 0 0 − 0.81 ] B N = 50 B = [ 0 66.5 0 44.5 ] (4-3) \begin{align*} &\dot{\bm X}_N=\bm A_N \bm X_N+\bm B_N F_N\\ &\bm A_N=\bm A \bm T_N^{-1}= \left[ \begin{matrix} 0 & 3 & 0 & 0 \\ 5.96 & 0 & 0 & -1.2 \\ 0 & 0 & 0 & 3 \\ 0.85 & 0 & 0 & -0.81 \end{matrix} \right]\\ &\bm B_N=50\bm B= \left[ \begin{matrix} 0 \\ 66.5 \\ 0 \\ 44.5 \end{matrix} \right] \end{align*} \tag{4-3} X˙N=ANXN+BNFNAN=ATN1= 05.9600.853000000001.230.81 BN=50B= 066.5044.5 (4-3)
设置 Q \bm Q Q R R R如下
Q = [ 4 0 0 0 0 1 0 0 0 0 4 0 0 0 0 1 ] R = 0.25 (4-4) \begin{align*} &\bm Q= \left[ \begin{matrix} 4 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 4 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right]\\ &R=0.25 \end{align*} \tag{4-4} Q= 4000010000400001 R=0.25(4-4)
在matlab中可使用函数lqr函数直接得出 K \bm K K
去matlab试一下效果:
在这里插入图片描述
角度变化情况:(蓝线是目标,黄线是实际)
在这里插入图片描述
位置变化情况:(蓝线是目标,黄线是实际)
在这里插入图片描述
不得不说在模型已知的情况下,LQR还是很吊的,随手设的 Q \bm Q Q R R R就能调出来收敛的效果。
未完待续。

5、(番外)关于级联PID控制器的踩坑记录

先把式(2-2)贴过来
θ ¨ = 19.6 θ − 0.4 x ˙ + 1.33 F x ¨ = 3.27 θ − 0.27 x ˙ + 0.89 F (2-2) \begin{align*} &\ddot{\theta}=19.6\theta-0.4\dot{x}+1.33F\\ &\ddot{x}=3.27\theta-0.27\dot{x}+0.89F \end{align*} \tag{2-2} θ¨=19.6θ0.4x˙+1.33Fx¨=3.27θ0.27x˙+0.89F(2-2)
用下面的代码

% 解出从推力到摆角/位移的传递函数(字母表达式)
clear; clc;
syms s x F theta % 参数

eq1 = s^2*theta == 19.6*theta-0.4*s*x+1.33*F;
eq2 = s^2*x == 3.27*theta-0.27*s*x+0.89*F;

eqns = [eq1, eq2];

vars = [theta, x];

% 解方程
sol = solve(eqns, vars);

% 提取theta和x的解x
theta_sol = sol.theta;
x_sol = sol.x;

% 整理传递函数
G_theta_F = theta_sol / F;
G_x_F = x_sol / F;

% 使用collect函数按s的幂次合并同类项
[G_theta_F_num, G_theta_F_den] = numden(G_theta_F);  % 提取分子分母
G_theta_F_num_collected = collect(G_theta_F_num, s);  % 按s合并分子
G_theta_F_den_collected = collect(G_theta_F_den, s);  % 按s合并分母
G_theta_F = G_theta_F_num_collected / G_theta_F_den_collected

[G_x_F_num, G_x_F_den] = numden(G_x_F);  % 提取分子分母
G_x_F_num_collected = collect(G_x_F_num, s);  % 按s合并分子
G_x_F_den_collected = collect(G_x_F_den, s);  % 按s合并分母
G_x_F = G_x_F_num_collected / G_x_F_den_collected

可以解出传递函数的表达式:
G θ ( s ) = Θ ( s ) F ( s ) = 1.33   s + 0.0031 s 3 + 0.27   s 2 − 19.6   s − 3.984 G x ( s ) = X ( s ) F ( s ) = 0.89   s 2 − 13.0949 s ( s 3 + 0.27   s 2 − 19.6   s − 3.984 ) (5-1) \begin{align*} &G_\theta(s)=\frac{\Theta(s)}{F(s)}=\frac{1.33\,s+0.0031}{s^3 +0.27\,s^2 -19.6\,s-3.984}\\ &G_x(s)=\frac{X(s)}{F(s)}=\frac{0.89\,s^2 -13.0949}{s(s^3 +0.27\,s^2 -19.6\,s-3.984)} \end{align*} \tag{5-1} Gθ(s)=F(s)Θ(s)=s3+0.27s219.6s3.9841.33s+0.0031Gx(s)=F(s)X(s)=s(s3+0.27s219.6s3.984)0.89s213.0949(5-1)
特征方程出现负系数,很明显系统不稳定。
以级联PID控制方案进行设计,级联PID控制流程图如下:
在这里插入图片描述
G x − θ ( s ) = Θ ( s ) X ( s ) = 1.33   s 2 + 0.0031 s 0.89   s 2 − 13.0949 (5-2) G_{x-\theta}(s)=\frac{\Theta(s)}{X(s)}= \frac{1.33\,s^2+0.0031s}{0.89\,s^2-13.0949} \tag{5-2} Gxθ(s)=X(s)Θ(s)=0.89s213.09491.33s2+0.0031s(5-2)
其中带下标 d d d 的是给定量。
先看内环,加入第一篇笔记随手调的控制器( K p = 100 K_p=100 Kp=100 K i = 0.5 K_i=0.5 Ki=0.5 K d = 10 K_d=10 Kd=10)。
开环传递函数:
G 1 ( s ) = ( 0.5 s + 100 + 10 s ) 1.33   s + 0.0031 s 3 + 0.27   s 2 − 19.6   s − 3.984 = ( 10 s 2 + 100 s + 0.5 ) ( 1.33   s + 0.0031 ) s ( s 3 + 0.27   s 2 − 19.6   s − 3.984 ) (5-3) \begin{align*} G_1(s)&= (\frac{0.5}{s}+100+10s)\frac{1.33\,s+0.0031}{s^3 +0.27\,s^2 -19.6\,s-3.984}\\ &=\frac{(10s^2+100s+0.5)(1.33\,s+0.0031)}{s(s^3 +0.27\,s^2 -19.6\,s-3.984)} \end{align*} \tag{5-3} G1(s)=(s0.5+100+10s)s3+0.27s219.6s3.9841.33s+0.0031=s(s3+0.27s219.6s3.984)(10s2+100s+0.5)(1.33s+0.0031)(5-3)
特征方程:
D ( s ) = s ( s 3 + 0.27   s 2 − 19.6   s − 3.984 ) (5-4) D(s)=s(s^3 +0.27\,s^2 -19.6\,s-3.984)\tag{5-4} D(s)=s(s3+0.27s219.6s3.984)(5-4)
为简单起见,我们直接看括号里那一部分即可,画劳斯表:

第1列 第2列
s 3 s^3 s3 1 -19.6
s 2 s^2 s2 0.27 -3.984
s 1 s^1 s1 -4.84 0
s 0 s^0 s0 -3.99

第一列有一次变号,表明有一个正实部特征根( P = 1 P=1 P=1)。
画出奈奎斯特图:
在这里插入图片描述
注意matlab画的图频率范围是 ( − ∞ , ∞ ) (-\infty,\infty) (,)。要使用奈奎斯特判据,还要画一条增补线(红色)。曲线(-1, j0)的圈数和开环正实部特征根个数相等时系统稳定,容易看出,图线绕了(-1, j0)负1圈,所以系统不稳定。(尴尬)
后来想了一下,也问了一下AI,仿真摆角能收敛的原因是摆角的初始状态不为零(传递函数无法体现初始状态的信息),由于系统不稳定零输入响应也发散,所以闭环PID造就了一个同样发散的零状态响应“压制”住了零输入响应,使得输出信号看起来不发散,但内部状态是发散的(比如小车位置 x x x )。
注意观察 G 1 ( s ) = ( 10 s 2 + 100 s + 0.5 ) ( 1.33   s + 0.0031 ) s ( s 3 + 0.27   s 2 − 19.6   s − 3.984 ) G_1(s)=\frac{(10s^2+100s+0.5)(1.33\,s+0.0031)}{s(s^3 +0.27\,s^2 -19.6\,s-3.984)} G1(s)=s(s3+0.27s219.6s3.984)(10s2+100s+0.5)(1.33s+0.0031)每个括号中的常数项,当 s → j 0 + s \rightarrow j0_+ sj0+时,由于积分环节的存在, G 1 ( s ) G_1(s) G1(s)总会位于实轴上方无穷远处,因此奈奎斯特曲线的增补线一定会顺时针包围(-1, j0)点。
考虑将积分环节去除,改用比例控制试试,比例系数=100:
在这里插入图片描述
看起来还是有点难绷,图线绕了(-1, j0)点0圈,尝试了下增加微分环节或者增加串联滞后校正,也没搞出来让图线绕(-1, j0)点1圈,实现系统稳定。

代码地址:https://github.com/ouClassmate/Pendulum-Control-LQR.git


  1. 裴润, 宋申民. 《自动控制原理(下册)》, p434. ↩︎

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐