网络控制系统之被控对象离散化

网络控制系统是引入网络的控制系统,即网络可能存在于控制系统的反馈通道和控制通道。在网络控制系统中,被控对象的数学模型当然是连续的(这个世界上还有离散的物理系统么?)但是,由于网络控制系统不可能使用连续的信号来控制被控对象,所以我们需要把被控对象的模型离散化。

  • 对于线性系统,可以参考现代控制理论的书籍的离散化方法,matlab的离散化方法是c2d.
  • 对于非线性系统,目前没有具有完整理论的离散化方法,但是不是说不可以离散,虽然我们没有理论基础,我们照样可以把非线性系统离散化。

例如:

  1. 欧拉法:
    给定小车的模型为:
    x ˙ = v c o s ( θ ) y ˙ = v s i n ( θ ) θ ˙ = ω (1) \dot{x}=vcos(\theta)\\ \dot{y} = vsin(\theta)\\ \dot{\theta} = \omega \tag{1} x˙=vcos(θ)y˙=vsin(θ)θ˙=ω(1)
    那么离散化为:
    x ( k + 1 ) = x ( k ) + h v ( k ) c o s ( θ ( k ) ) y ( k + 1 ) = y ( k ) + h v ( k ) s i n ( θ ( k ) ) θ ( k + 1 ) = θ ( k ) + h ω (2) x(k+1) = x(k)+hv(k)cos(\theta(k)) \\ y(k+1) = y(k)+hv(k)sin(\theta(k)) \\ \theta(k+1) = \theta(k)+h\omega \tag{2} x(k+1)=x(k)+hv(k)cos(θ(k))y(k+1)=y(k)+hv(k)sin(θ(k))θ(k+1)=θ(k)+hω(2)
    接下来编程验证一下使用欧拉法离散化好不好用:

matlab脚本:test_simpleDynamicCar

% test_simpleDynamicCar
v = ones(1,3000);
phi = ones(1,3000);
x = 0;
y = 0;
theta = 0;
axis equal
for i = 1:3000
	[x,y,theta] = simpleDynamicCar(x,y,theta,v(i),phi(i));
	plot(x,y,'.');
	hold on;
  	pause(0.01)
end

matlab代码:simpleDynamicCar函数

function [x,y,theta] = simpleDynamicCar(x,y,theta,v,phi_f)
h = 0.01;
lw = 0.25;
x = x + (v*( cos(theta) - tan(phi_f)*sin(theta)*0.5))*h;
y = y + (v*( sin(theta) + tan(phi_f)*cos(theta)*0.5))*h;
theta = theta + v*tan(phi_f)/lw*h;
end

使用simulink模块同样可以搭建一个小车的模型(作为基准),来和欧拉离散做一个对比。结果为下图,红色的为使用simulink的小车轨迹,蓝色为使用代码实现的小车轨迹。仿真时间为30秒。
在这里插入图片描述
可以看出,还是有偏差的,,,但是应该也够用吧。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值