文章目录

1. 概述2. 仿真搭建2.1 运动轨迹函数2.2 机器人的机械仿真模型2.3 机器人的电气仿真模型2.3.1 直流电机部分2.3.2 减速器与传动装置

2.4 PID 控制的仿真模型2.4.1 PID 控制器的仿真模型2.4.2 PID 输出量的上下限设定

2.5 构建整体仿真模型

3. 函数编写3.1 initial_patam.m函数的编写3.2 ch6_plot.m函数的编写

4. 运行仿真5. 资源下载

1. 概述

使用 simulink 搭建《用MATLAB玩转机器人》的第六章——单关节机器人的仿真,详细记录并积累 simulink 的使用技巧。

2. 仿真搭建

对于单关节机器人的位置控制,大致分为四个过程:

规划出单杆自由端的运动轨迹函数,分为加速、匀速、减速三个区间建立机器人的机械、电气模块的数学模型设计控制系统的数学模型根据上述过程建立的数学模型进行仿真搭建并仿真。

另外,单关节机器人位置控制的仿真总共分为四个模块另:      a. 运动轨迹函数生成模块      b. PID控制器及输出限幅模块      c. 减速器与传动装置模型      d. 单杆的运动模型

2.1 运动轨迹函数

运动轨迹函数分为三个部分 (1)加速区间 0≤t≤2Δ

(6-1)

η

(

t

)

=

π

4

Δ

2

t

3

π

16

Δ

3

t

4

η_{加速}(t)= \frac{π}{4Δ^2}t^3-\frac{π}{16Δ^3}t^4\tag{6-1}

η加速(t)=4Δ2πt3−16Δ3πt4(6-1) (2)匀速区间 2Δ≤t≤2.5-2Δ

(6-2)

η

(

t

)

=

(

t

Δ

)

×

π

η_{匀速}(t)=(t-Δ)×π\tag{6-2}

η匀速(t)=(t−Δ)×π(6-2) (3)减速区间 2.5-2Δ≤t≤2.5

η

(

t

)

=

2

π

Δ

π

+

π

(

t

2

)

π

4

Δ

2

(

t

2

)

3

+

π

16

Δ

3

(

t

2

)

4

η_{减速}(t)= 2π-Δπ+π(t-2)-\frac{π}{4Δ^2}(t-2)^3+\frac{π}{16Δ^3}(t-2)^4

η减速(t)=2π−Δπ+π(t−2)−4Δ2π(t−2)3+16Δ3π(t−2)4

Source 中拖入clock ,Commonly used blocks中拖入subsystem,将两者连线后,把Subsystem改为trajectory。 双击Subsystem,将In1改为t,Out1改为theta*(t)   观察在主系统中的改变 绘制 0≤t≤2Δ 的时间区间 拖入Enabled Subsystem,并连线 双击Enabled Subsystem,进入子系统输入公式(6-1) (1)加速区间 0≤t≤2Δ加速区间 0≤t≤2Δ

(6-1)

η

(

t

)

=

π

4

Δ

2

t

3

π

16

Δ

3

t

4

η_{加速}(t)= \frac{π}{4Δ^2}t^3-\frac{π}{16Δ^3}t^4\tag{6-1}

η加速(t)=4Δ2πt3−16Δ3πt4(6-1)

公式(6-1)中的 t 即为子系统的输入 t,也为图中 u[1]. 6. 采用同样的方法,分别绘制匀速区间、减速区间,公式如下: (2)匀速区间 2Δ≤t≤2.5-2Δ

(6-2)

η

(

t

)

=

(

t

Δ

)

×

π

η_{匀速}(t)=(t-Δ)×π\tag{6-2}

η匀速(t)=(t−Δ)×π(6-2) (3)减速区间 2.5-2Δ≤t≤2.5

η

(

t

)

=

2

π

Δ

π

+

π

(

t

2

)

π

4

Δ

2

(

t

2

)

3

+

π

16

Δ

3

(

t

2

)

4

η_{减速}(t)= 2π-Δπ+π(t-2)-\frac{π}{4Δ^2}(t-2)^3+\frac{π}{16Δ^3}(t-2)^4

η减速(t)=2π−Δπ+π(t−2)−4Δ2π(t−2)3+16Δ3π(t−2)4  图中,示波器是为了观察轨迹函数的输出,merge 模块则参考链接simulink模块使用记录2-EnabledSubsystem/merge

2.2 机器人的机械仿真模型

单杆的数学模型为:

(6-4)

τ

=

(

m

1

r

1

2

+

I

z

z

g

1

)

×

θ

¨

1

+

c

1

θ

˙

1

τ=(m_1r_1^2+I_{zzg1})×\ddotθ_1+c_1\dotθ_1 \tag{6-4}

τ=(m1r12+Izzg1)×θ¨1+c1θ˙1(6-4) 单杆运动时,输入时扭矩 τ、输出是转角

θ

1

θ_1

θ1、

m

1

m_1

m1、

r

1

r_1

r1、

I

z

z

g

1

I_{zzg1}

Izzg1、

c

1

c_1

c1是常量。 将公式(6-4)变形如下,按照下面的公式建立仿真模型:

(6-5)

θ

¨

1

=

1

m

1

r

1

2

+

I

z

z

g

1

(

τ

c

1

θ

˙

1

)

\ddotθ_1=\frac{1}{m_1r_1^2+I_{zzg1}}(τ-c_1\dotθ_1) \tag{6-5}

θ¨1=m1r12+Izzg11(τ−c1θ˙1)(6-5)

拖入subsystem,双击后,将上述公式建立仿真   子系统内部模块建立后,将子系统命名为Mecha,如下图

2.3 机器人的电气仿真模型

在simulink中新建ch6_sim模型文件,搭建如下系统。

2.3.1 直流电机部分

直流电机的电气结构数学模型为:

(6-6)

T

e

=

K

t

i

a

T_e=K_ti_a \tag{6-6}

Te=Ktia(6-6)

(6-7)

T

e

=

T

+

(

J

θ

¨

+

B

m

θ

˙

)

T_e=T+(J\ddotθ + B_m\dotθ) \tag{6-7}

Te=T+(Jθ¨+Bmθ˙)(6-7)

(6-8)

i

a

(

s

)

=

1

L

a

s

+

R

a

v

(

s

)

K

e

s

L

a

s

+

R

a

θ

(

s

)

i_a(s)= \frac{1}{L_as+R_a}v(s)- \frac{K_es}{L_as+R_a} θ(s) \tag{6-8}

ia(s)=Las+Ra1v(s)−Las+RaKesθ(s)(6-8) 式中,

T

e

T_e

Te是电机产生的转矩(N·m);

K

t

K_t

Kt是转矩常数(N·m/A);J是转子的惯性力矩(kg·

m

2

m^2

m2);

B

m

B_m

Bm是旋转运动的粘性摩擦系数;T是将要传递到负载侧(单杆)的力矩(N·m);θ表示旋转角度;

θ

˙

\dot θ

θ˙表示旋转角速度(rad/s);

θ

¨

\ddot θ

θ¨表示角加速度(rad/

s

2

s^2

s2);v为输入电压(V);

i

a

i_a

ia为转子电流(A);

R

a

R_a

Ra为转子电阻(Ω);

L

a

L_a

La是转子电感(H);

K

e

K_e

Ke是逆启动转矩系数[V/(rad/s)]。

拖入subsystem,双击进入 从Ports&& Subsystems中拖入In1 将直流电机电气部分的仿真模型构建出来,即公式(6-6)、(6-7)、(6-8)  图中,输入Voltage和theta分别是公式(6-8)中的 v(s) 和 θ(s)。输出Torque是将要传到负载侧(单杆)的力矩 T,由公式(6-7)变形得到

(6-9)

T

=

T

e

(

J

θ

¨

+

B

m

θ

˙

)

T=T_e-(J\ddotθ + B_m\dotθ) \tag{6-9}

T=Te−(Jθ¨+Bmθ˙)(6-9) 另外,图中的橘黄色部分原本是春微分环节 s ,但在一般情况下,淡村的微分环节容易受到高频噪声的干扰(实际上,表现为纯粹的微分特性的器件在现实生活中是很难纯在的),故采用了近似微分

s

0.01

s

+

1

\frac{s}{0.01s+1}

0.01s+1s。 近似微分是给纯微分环节串联一个影响较小的低通滤波器

1

a

s

+

1

\frac{1}{as+1}

as+11变成

s

a

s

+

1

\frac{s}{as+1}

as+1s的形式,这里a=0.01。

2.3.2 减速器与传动装置

由公式(6-9)得到的 T 是由电机将要传递到负载侧(单杆)的力矩。考虑到齿轮传动中滑动摩擦等因素,在直流电机侧的输出扭矩 T 传递到负载侧时还会损失一部分的能量。 摩擦损失与电机侧输出扭矩 T 成比例,摩擦损失比例系数为 c ,则传到单杆的转轴一侧的单杆扭矩

τ

2

\tau_2

τ2 为

τ

2

=

N

(

T

c

T

)

=

N

×

(

1

c

)

×

T

=

N

×

E

×

T

\tau_2 = N(T - cT) = N×(1-c)×T = N×E×T

τ2=N(T−cT)=N×(1−c)×T=N×E×T 为了描述方便,将电机侧输出力矩 T 改名为

τ

1

\tau_1

τ1,即

τ

1

\tau_1

τ1=T,则上式为:

(6-10)

τ

2

=

N

×

E

×

τ

1

\tau_2 = N×E×\tau_1 \tag{6-10}

τ2=N×E×τ1(6-10),式中,E = 1-c 被称为传导系数。 用公式(6-9)得到的结果再乘以系数 N 和 E 后,就是最终驱动单杆转动的力矩

τ

2

\tau_2

τ2。 在simulink中完成减速器与传动装置的仿真模型。

2.4 PID 控制的仿真模型

PID 控制器的仿真由两部分构成,一部分是 PID 控制子模块,一部分是输出限幅模块Saturation。

2.4.1 PID 控制器的仿真模型

PID 控制器的传递函数为:

(6-11)

D

(

s

)

=

U

(

s

)

E

(

s

)

=

K

p

[

1

+

1

s

T

I

+

s

T

D

]

D(s) =\frac{U(s)}{E(s)} = K_p[1+\frac{1}{sT_I}+sT_D] \tag{6-11}

D(s)=E(s)U(s)=Kp[1+sTI1+sTD](6-11),用近似微分代替微分:

(6-11)

D

(

s

)

=

K

p

[

1

+

1

s

T

I

+

s

T

D

a

s

T

D

+

1

]

D(s) = K_p[1+\frac{1}{sT_I}+\frac{sT_D}{asT_D+1}] \tag{6-11}

D(s)=Kp[1+sTI1+asTD+1sTD](6-11)

2.4.2 PID 输出量的上下限设定

PID控制器的输出量是直流电机的输入电压,因为直流电机的输入电压是有上下限的,如果超出限制则有可能造成电机的损坏。 上下限的设置通过Saturation Block(饱和模块)实现,将上下限分别设定为 +24 和 -24,即设定 PID 控制器输出的值将被限定在电压±24V 范围内再传递给直流电机。

2.5 构建整体仿真模型

因为 PID的输出是直流电机的电压,故Saturation后接Moter的Voltage 又系统的输出是角度θ,故偏差应该是期望角度与输出角度的差值,以此作为 PID 控制器的输入,故连线如下: 在直流电机的仿真模块,由于公式(6-8)中用到θ(s),故需要将输出引到Motor的输入中去。  这里需要解释下增益N,即

t

h

e

t

a

M

e

c

h

a

×

N

=

t

h

e

t

a

M

o

t

o

r

theta_{Mecha}×N=theta_{Motor}

thetaMecha×N=thetaMotor 这是由于在直流电机模块中,存在的减速器。假设减速器链接的齿轮1和齿轮2的齿数分别为

n

1

n_1

n1 和

n

2

n_2

n2,则变速比 N 为:

N

=

n

2

n

1

N=\frac{n_2}{n_1}

N=n1n2 当直流电机的旋转角度为

θ

1

\theta_1

θ1,单杆的旋转角度为

θ

2

\theta_2

θ2 时,

θ

1

=

N

×

θ

2

\theta_1 = N ×\theta_2

θ1=N×θ2 角度的变比正好与扭矩的变比相反。拖入goto和from,并将from接到示波器,便于观察图形

在trajectory的输出接goto,信号为设定的角度 θ在saturation的输出接goto,信号为 PID 输出的直流电机控制电压在Mecha输入处接goto,信号为电机输出到单杆侧的扭矩在Mecha的输出接goto,信号为系统输出的角度 θ将四路goto信号对应的from接到示波器,如图。  至此,单关节机器人的仿真搭建基本完成了。

3. 函数编写

3.1 initial_patam.m函数的编写

新建initial_patam.m函数,在此输入仿真所需要的初始化参数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% initialize_para.m

% 第6章 参数设置

% 轨迹函数,机械和电气系统,减速器和控制器的PID参数

%

% Version 1.0 by Hiroumi Mita, CYBERNET SYSTEMS CO.,LTD.

% Version 1.5 by Hongtao Zhang, 2016/08/12

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;              % 清屏

close all;        % 关闭所有

clear;        % 清除所有变量

% 轨迹函数的参数

delta = 0.25;     % 轨迹函数中的 delta变量

% 机械参数

l1 = 0.2;         %杆长 单位:[m]

w1 = 0.01;        %杆宽[m]

h1 = 0.004;       %杆高[m]

r1 = 0.1;         %从杆端点到重心位置的长度[m],r1=0.5*l1

ro = 2690;         %杆的材料密度 单位:[Kg*m^3]

m1 = l1*w1*h1*ro;  %杆的质量[Kg]

Izzg1 = (1/12)*m1*(w1^2+l1^2); %杆的转动惯量,zz[kg*m^2]

Ixxg1 = (1/12)*m1*(w1^2+h1^2); %杆的转动惯量,xx[kg*m^2]

Iyyg1 = (1/12)*m1*(l1^2+h1^2); %杆的转动惯量,yy[kg*m^2]

c1 = 0.001;       %杆的粘性系数[N*s/rad]

% 电气参数

Ra = 10;     %电机电阻值[OM]

La = 4.4e-3; %电机电感值[H]

Kt = 0.05;   %扭矩常数[N*m/A]

Ke = Kt;     %反电力常数[V*s/rad]

J = 1e-5;    %电机的转动惯量[kg*m^2]

Bm = 1e-6;   %电机的粘性扭矩系数[N*s/rad]

% 减速器参数

N = 100; %齿轮数比

E = 0.7; %传递效率

% PID控制参数

Kp =100; %比例增益

Ti =0.1; %积分时间常数

Td =3;   %微分时间常数

eta=0.1; %近似微分参数

3.2 ch6_plot.m函数的编写

新建ch6_plot.m函数,在此函数中绘制单杆的运动轨迹。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% ch6_plot.m

% 第6章 显示结果

%

% Version 1.0 by Hiroumi Mita, CYBERNET SYSTEMS CO.,LTD.

% Version 1.5 by Hongtao Zhang, 2016/08/12

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

close all;

xt=l1*cos(theta);  % x轴上随时间的变化值

yt=l1*sin(theta);  % y轴上随时间的变化值

figure(1)

axis square

for ii=1:length(t)   % 循环,从 ii=1,一直到 ii = length(t)

x1=[0 xt(ii)];

y1=[0 yt(ii)];

h1= line(x1,y1);

if 0<=t(ii)&&t(ii)<=0.5  %加速期间

set(h1,'color','r');

set(h1,'lineWidth',2);

end

if 0.5

set(h1,'color','g');

set(h1,'lineWidth',2);

end

if 2.0

set(h1,'color','b');

set(h1,'lineWidth',2);

end

end

for ii=1:length(t)-1

x2=[xt(ii) xt(ii+1)];

y2=[yt(ii) yt(ii+1)];

h2= line(x2,y2);

set(h2,'color','k');

set(h2,'lineWidth',1);

end

% 绘制x轴

h3=line([-0.3 0.3],[0 0]); %给出x轴的数值范围

set(h3,'color','k');

set(h3,'lineWidth',1);

% 绘制y轴

h4=line([0 0],[-0.3 0.3]); %给出y轴的数值范围

set(h4,'color','k');

set(h4,'lineWidth',1);

xlim([-0.3 0.3])

ylim([-0.3 0.3])

4. 运行仿真

首先运行initialize_para.m函数,给仿真系统提供初始化参数双击仿真系统中的示波器,并运行ch6_sim的仿真观察到示波器输出如下 第一幅是运动轨迹函数;第二幅是电机的输入电压,第三幅是单杆侧力矩。运行ch6_plot.m函数,得到单杆运动轨迹

5. 资源下载

感谢《用MATLAB玩转机器人》的作者将此仿真模型提供了完整的资源下载。下载地址即下载教程如下:http://cip.com.cn

matlab仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人相关推荐

  1. matlab 储能,第六章电路matlab储能元件的仿真.doc

    第六章电路matlab储能元件的仿真 储能元件的仿真 制作人: 一.基本内容 (1)电容元件:一种能够储存电场能量或者说储存电荷的二端元件 特性:任何时刻其储存的电荷 q 与其两端的电压 u能用q-u ...

  2. 用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人

    文章目录 1. 概述 2. 仿真搭建 2.1 运动轨迹函数 2.2 机器人的机械仿真模型 2.3 机器人的电气仿真模型 2.3.1 直流电机部分 2.3.2 减速器与传动装置 2.4 PID 控制的仿 ...

  3. 单相全控桥有源逆变电路matlab仿真,单相桥式全控整流及有源逆变电路的MATLAB仿真详解.doc...

    单相桥式全控整流及有源逆变电路的MATLAB仿真详解.doc 学 号 天津城建大学 控制系统仿真 大作业 单相整流-逆变电路仿真模型 学生姓名班级成绩学院 年 月 日 一.仿真电路原理图:2 二.单相 ...

  4. 第六章:MATLAB:二维绘图(plot绘图命令 fplot命令 ezplot命令 不同的坐标系)

    第六章:二维绘图 6.1. 二维绘图 6.1.1. plot绘图命令: 6.1.2. fplot绘图命令: 6.1.3. ezplot绘图命令: 6.2. 不同坐标系下的绘图命令: 6.2.1. 极坐 ...

  5. 国产单片机GD32系列开坑,带你零死角玩转GD32 第六章

    [开坑国产单片机GD32系列,带你零死角玩转GD32] 第六章 GD32F103C8T6串口开发板设计指南(二) 目录 [开坑国产单片机GD32系列,带你零死角玩转GD32] 第六章 GD32F103 ...

  6. c语言单字符输入和输出函数分别为,c语言第六章字符数据

    <c语言第六章字符数据>由会员分享,可在线阅读,更多相关<c语言第六章字符数据(18页珍藏版)>请在人人文库网上搜索. 1.第6章字符数据,6.1字符常数,6.2字符变量,6. ...

  7. 协作通信-af df的matlab仿真,协作通信三种协作方式(AF+DF+CC)的matlab仿真程序

    [实例简介] 协作通信三种协作方式(AF+DF+CC)的matlab仿真程序 [实例截图] [核心代码] AFDFCC)的matlab仿真程序 ├── www.pudn.com.txt ├── 三种基 ...

  8. 双隐藏层BP网络的matlab仿真,求遗传算法优化含有两个隐含层的BP神经网络的matlab程序...

    怎样用遗传算法优化含有两个隐含层的BP神经网络的matlab程序啊,这个代码是错的,可不知道错在哪,求高手帮忙解答,非常感谢! FieldD=[repmat(PRECI,1,N);repmat([-0 ...

  9. 【第六章】使用jQuery操作表单和表格2

    使用jQuery操作表单元素 操作文本框 1.获取文本框的值 var textCon =$("#id").val(); 或者: var textCon=$("#id&qu ...

最新文章

  1. linux+任务默认优先级,uclinux内核的任务优先级及其load_weight
  2. Corrigendum: A window into third generation sequencing
  3. 《软件设计精要与模式》第二版源代码
  4. 【Android】Service几个重要的方法运行在哪个线程
  5. MongoDB 访问控制
  6. IN和EXISTS的性能对比结论
  7. SpringCloud Netflix Ribbon
  8. java 中violate_Java中的volatile关键字及Cache更新
  9. 移动端调起数字键盘的问题
  10. (77)FPGA面试题-Verilog实现二分频
  11. 从2个命令简单聊聊CentOS账户锁定原理
  12. L3-016 二叉搜索树的结构 (30 分)-PAT 团体程序设计天梯赛 GPLT
  13. Flutter之Dialog 简单使用
  14. 人脸识别相关数据集介绍
  15. SAP License:ERP系统操作详解
  16. c语言程序漏洞分析,C语言源程序的缓冲区溢出漏洞分析及解决方案.pdf
  17. 手机抓包 fiddler magicwifi
  18. Numpy读取csv文件
  19. [渝粤教育] 重庆工商职业学院 生活中的大数据 参考 资料
  20. 前端的工程化、模块化和组件化

热门文章

  1. html怎么给背景图固定位置,css实现固定背景图像的方法
  2. 回答华为公司面试题一头牛重800公斤一座桥承重700公斤问牛怎么过桥?
  3. 互联网公司的监控运维
  4. SEGMENT_VARIABLE什么意思?
  5. C# Task不执行的一种情况
  6. 海康存储服务器虚拟机,unraid 安装虚拟机攻略
  7. 企业官网中的“农家老宅”和“精品房”区别在哪?
  8. Win11机械硬盘磁盘碎片整理方法
  9. 【论文精度】AutoBERT-Zero (使用NAS搜索预训练语言模型)
  10. HCNP RoutingSwitching之MAC地址防漂移