草庐IT

汽车控制理论数学基础——状态方程

静候佳茵 2023-03-28 原文

1. 利用状态方程求传递函数公式


状态方程为\(G(s)=\dfrac{Y(s)}{U(s)} = C(sI-A)^{-1}B+D\)

例1:\(m-c-k\)系统,求\(m\overset{··}{x}+c\overset{·}{x}+kx=f\)传递函数。
解:
\(x_1 = x\)\(x_2=\overset{·}{x}\)则有:

\[\begin{cases} \overset{·}{x_1}=x_2\\ \overset{·}{x_2}=\dfrac{1}{m}[-c x_2-k x_1]+\dfrac{f}{m} \end{cases}\]

根据状态方程的向量表达式和输出方程的向量表达式

\[\begin{cases} \overset{·}{X} = AX+Bf \\ Y = CX+Df \end{cases}\]

可以得到:

\[A=\left[\begin{matrix} 0 & 1\\ -\dfrac{k}{m}& -\dfrac{c}{m} \end{matrix}\right]\qquad B = \left[\begin{matrix} 0\\ \dfrac{1}{m} \end{matrix}\right]\qquad C=\left[ \begin{matrix}1&0\end{matrix}\right]\qquad D = 0 \qquad X = \left[\begin{matrix}x_1\\x_2\end{matrix}\right] \]

所以

\[(sI-A)^{-1} = \left[\begin{matrix} s&-1\\ \dfrac{k}{m}&s+\dfrac{c}{m} \end{matrix}\right]^{-1}=\dfrac{1}{\left|\begin{matrix} s&-1\\ \dfrac{k}{m}&s+\dfrac{c}{m} \end{matrix}\right|}\left[\begin{matrix} s+\dfrac{c}{m}&1\\ -\dfrac{k}{m}&s \end{matrix}\right] \]

可以得到

\[G(s)=\dfrac{1}{s^2+\dfrac{c}{m}s+\dfrac{k}{m}}\left[\begin{matrix}1&0\end{matrix}\right]\left[\begin{matrix} s+\dfrac{c}{m}&1\\ -\dfrac{k}{m}&s \end{matrix}\right] \left[\begin{matrix} 0\\ \dfrac{1}{m} \end{matrix}\right]=\dfrac{1}{ms^2+cs+k} \]

2. 反馈控制

2.1 状态反馈控制器设计

控制律为\(u = -KX + v\)
将控制律带入状态方程可以得到,闭环系统\(\begin{cases} \overset{·}{X}=(A-BK)X+Bv\\ Y = CX \end{cases}\)
传递函数为\(G_K(s)=C(sI-A+BK)^{-1}B\)

例2:\(\overset{··}{x}=\overset{·}{x}+x+u\),如何设计\(u\),使得\(x \rarr x_d\quad(t\rarr\infty)\)\(x_d\)为常数。

解:
输入是\(u\),特征方程为\(s^2-s-1=0\)

可以看出该系统开环不稳定,因为有一个根在右半平面,可以设计\(u=-2\overset{·}{x}-2x+x_d\)

代入上述系统,可得\(\overset{··}{x}+\overset{·}{x}+x=x_d\)

对于此时的闭环系统,输入是\(x_d\),特征方程为\(s^2+s+1=0\),该方程两根为负,闭环稳定。

如果利用状态方程的方法,那么可以令\(x_1 = x\)\(x_2=\overset{·}{x}\),可以得到

\[\begin{cases} \overset{·}{x_1}=x_2\\ \overset{·}{x_2}=x_1+x_2+u \end{cases}\]

那么可以得到:

\[A=\left[\begin{matrix} 0 & 1\\ 1&1 \end{matrix}\right]\qquad B = \left[\begin{matrix} 0\\ 1 \end{matrix}\right]\qquad C=\left[ \begin{matrix}1&0\end{matrix}\right]\qquad D = 0 \qquad X = \left[\begin{matrix}x_1\\x_2\end{matrix}\right] \]

控制律为\(u = -KX + x_d\),其中\(K=[k_1, k_2]\),那么

\[\begin{aligned} (sI-A+BK)^{-1} &= \left( \left[ \begin{matrix} s&0\\ 0&s \end{matrix}\right]-\left[\begin{matrix} 0 & 1\\ 1&1 \end{matrix}\right]+\left[\begin{matrix} 0\\ 1 \end{matrix}\right][k_1, k_2]\right)^{-1}\\ &=\left[ \begin{matrix} s&-1\\ -1+k_1&s-1+k_2 \end{matrix}\right]^{-1}\\ &=\dfrac{1}{s^2+(k_2-1)s+k_1-1}\left[\begin{matrix} s-1+k_2&1\\ 1-k_1&s \end{matrix}\right] \end{aligned} \]

传递函数为

\[\begin{aligned} G_k(s)&=C(sI-A+BK)^{-1}B\\ &=\dfrac{1}{s^2+(k_2-1)s+k_1-1}\left[ \begin{matrix}1&0\end{matrix}\right]\left[\begin{matrix} s-1+k_2&1\\ 1-k_1&s \end{matrix}\right]\left[\begin{matrix} 0\\ 1 \end{matrix}\right]\\ &=\dfrac{1}{s^2+(k_2-1)s+k_1-1} \end{aligned} \]

如果令\(k_1=k_2=2\),那么得到的特征方程为\(s^2+s+1=0\),与上面开始做的一样。

下图为状态反馈系统结构图

2.2 输出反馈控制器设计

控制律为\(u = -HY + v\)
将控制律带入状态方程可以得到,闭环系统\(\begin{cases} \overset{·}{X}=(A-BHC)X+Bv\\ Y = CX \end{cases}\)
传递函数为\(G_H(s)=C(sI-A+BHC)^{-1}B\)

输出反馈可看作状态反馈的特例,比如当y=x时,C=1。

下面是输出反馈系统结构图

该控制器就是PID控制器的设计原理。

3. 反馈线性化

例3:\(\overset{··}{x}=\overset{·}{x}\ ^2+x+u\),如何设计\(u\),使得\(x\rarr x_d\quad(t\rarr \infty)\),其中\(x_d\)为常数。

设计 \(u=-\overset{·}{x}\ ^2-x+v\)

代入系统 \(\overset{··}{x}=\overset{·}{x}\ ^2+x+u\)

可以去掉非线性项,得到\(\overset{··}{x}=v\)

上面的方程已经完成线性化,但是开环不稳定。利用反馈控制的方法,设计:\(v=-\overset{·}{x}-x+x_d\)

得到闭环稳定的系统:\(\overset{··}{x}+\overset{·}{x}+x=x_d\)

我们可以写出闭环系统的跟踪误差方程。令\(\epsilon=x-x_d\),则系统可以转化为

\[\overset{··}{\epsilon}+\overset{·}{\epsilon}+\epsilon=0 \]

该方程有两个复根,可以描述成\(s_{1,2}=\alpha\plusmn\beta i\)的形式,其中\(\alpha<0\)

解可以表示为:\(\epsilon_{1,2}=e^{\alpha t}(c_1cos\beta t\plusmn c_2isin\beta t)\)

可以得出分析出\(\epsilon_{1,2}\rarr0\),说明该系统稳定。

反馈线性化方法归纳:输入-状态线性化输入-输出线性化

  • 对于前者,本例中可以令\(z=z(x)=\overset{·}{x}\quad \overset{··}{x}=v\),则可以解得\(u=u(x, v)=-\overset{·}{x}\ ^2-x+v\),此时的线性系统就是\(\overset{··}{x}=v\)
  • 对于后者,本例中可以令\(y=h(x)=x\),故\(\overset{··}{y}=g(x,u)=\overset{··}{x}=\overset{·}{x}\ ^2+x+u\),这样就得到了输出\(y\)与输入\(u\)的关系,令\(\overset{··}{y}=v\),同样得到\(u=-\overset{·}{x}\ ^2-x+v\)

可以看出,本例两种方法解的过程是一致的。

有关汽车控制理论数学基础——状态方程的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  3. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  4. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  5. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  6. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  7. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  8. ruby-on-rails - ruby 日期方程不返回预期的真值 - 2

    为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998

  9. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  10. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

随机推荐