用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
文章目录
- 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Δ2t3−π16Δ3t4η_{加速}(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Δ2t3−π16Δ3t4η_{加速}(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)τ=(m1r12+Izzg1)×θ¨1+c1θ˙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、m1m_1m1、r1r_1r1、Izzg1I_{zzg1}Izzg1、c1c_1c1是常量。
将公式(6-4)变形如下,按照下面的公式建立仿真模型:
(6-5)θ¨1=1m1r12+Izzg1(τ−c1θ˙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)Te=KtiaT_e=K_ti_a \tag{6-6}Te=Ktia(6-6)
(6-7)Te=T+(Jθ¨+Bmθ˙)T_e=T+(J\ddotθ + B_m\dotθ) \tag{6-7}Te=T+(Jθ¨+Bmθ˙)(6-7)
(6-8)ia(s)=1Las+Rav(s)−KesLas+Raθ(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)
式中,TeT_eTe是电机产生的转矩(N·m);KtK_tKt是转矩常数(N·m/A);J是转子的惯性力矩(kg·m2m^2m2);BmB_mBm是旋转运动的粘性摩擦系数;T是将要传递到负载侧(单杆)的力矩(N·m);θ表示旋转角度;θ˙\dot θθ˙表示旋转角速度(rad/s);θ¨\ddot θθ¨表示角加速度(rad/s2s^2s2);v为输入电压(V);iai_aia为转子电流(A);RaR_aRa为转子电阻(Ω);LaL_aLa是转子电感(H);KeK_eKe是逆启动转矩系数[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=Te−(Jθ¨+Bmθ˙)T=T_e-(J\ddotθ + B_m\dotθ) \tag{6-9}T=Te−(Jθ¨+Bmθ˙)(6-9)
另外,图中的橘黄色部分原本是春微分环节 s ,但在一般情况下,淡村的微分环节容易受到高频噪声的干扰(实际上,表现为纯粹的微分特性的器件在现实生活中是很难纯在的),故采用了近似微分s0.01s+1\frac{s}{0.01s+1}0.01s+1s。
近似微分是给纯微分环节串联一个影响较小的低通滤波器1as+1\frac{1}{as+1}as+11变成sas+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−cT)=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)=Kp[1+1sTI+sTD]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)=Kp[1+1sTI+sTDasTD+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,即
thetaMecha×N=thetaMotortheta_{Mecha}×N=theta_{Motor}thetaMecha×N=thetaMotor
这是由于在直流电机模块中,存在的减速器。假设减速器链接的齿轮1和齿轮2的齿数分别为 n1n_1n1 和n2n_2n2,则变速比 N 为:
N=n2n1N=\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 squarefor 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);endif 0.5<t(ii)&&t(ii)<=2.0 %匀速期间set(h1,'color','g');set(h1,'lineWidth',2);endif 2.0<t(ii)&&t(ii)<=2.5 %减速期间set(h1,'color','b');set(h1,'lineWidth',2);end
endfor ii=1:length(t)-1x2=[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仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
文章目录 1. 概述2. 仿真搭建2.1 运动轨迹函数2.2 机器人的机械仿真模型2.3 机器人的电气仿真模型2.3.1 直流电机部分2.3.2 减速器与传动装置 2.4 PID 控制的仿真模型2.4 ...
- matlab 储能,第六章电路matlab储能元件的仿真.doc
第六章电路matlab储能元件的仿真 储能元件的仿真 制作人: 一.基本内容 (1)电容元件:一种能够储存电场能量或者说储存电荷的二端元件 特性:任何时刻其储存的电荷 q 与其两端的电压 u能用q-u ...
- 机器人测钢卷直径_一种基于关节机器人的冷轧钢卷卷芯焊接方法与流程
本发明涉及冶金技术领域,特别涉及一种基于关节机器人的冷轧钢卷卷芯焊接方法. 背景技术: 在冷轧罩式退火工序,钢卷采用立式吊具吊运,为防止钢卷卷芯松动导致卷芯钢带损坏和抽芯故障,必须将钢卷卷芯内圈焊接固 ...
- 用MATLAB玩转机器人-第1章 认识MATLAB
文章目录 1.1 MATLAB简单介绍 1.2 机器人的简单介绍 1.3 机器人组成 1.3.1 机械部分 1.3.2 控制和传感部分 1.4 建模与仿真 1.4.1 简单的电路系统建模与仿真 1.4 ...
- 国产单片机GD32系列开坑,带你零死角玩转GD32 第六章
[开坑国产单片机GD32系列,带你零死角玩转GD32] 第六章 GD32F103C8T6串口开发板设计指南(二) 目录 [开坑国产单片机GD32系列,带你零死角玩转GD32] 第六章 GD32F103 ...
- 第六章:MATLAB:二维绘图(plot绘图命令 fplot命令 ezplot命令 不同的坐标系)
第六章:二维绘图 6.1. 二维绘图 6.1.1. plot绘图命令: 6.1.2. fplot绘图命令: 6.1.3. ezplot绘图命令: 6.2. 不同坐标系下的绘图命令: 6.2.1. 极坐 ...
- 最优控制问题matlab编程实例,第十二章用matlab解最优控制问题及应用实例.ppt
第十二章用matlab解最优控制问题及应用实例 第十二章 用MATLAB解最优控制问题及应用实例 第十二章 用MATLAB解最优控制问题及应用实例 12.1 MATLAB工具简介 12.2 用MATL ...
- MATLAB 图像处理函数(第六章)(获取图像矩形像素的运用)
1.impixel 获取图像的像素值 作用获取图像的像素值,函数返回指定图像的虹路蓝值. p=impixel(I) 用鼠标在图像上选取所点击图像处的像素值 p=impixel(I,c,r); ...
- matlab 回归分析t检验,第三章 利用Matlab和SPSS进行线性回归分析
§3.利用Matlab和SPSS进行线性回归分析 回归分析是处理两个及两个以上变量间线性依存关系的统计方法.可以通过软件Matlab和SPSS实现. 1.利用Matlab软件实现 在Matlab中,可 ...
最新文章
- Java 中的 XML:Java 文档模型的用法
- Protocol Buffer基本语法
- 【深度学习】深度学习手写代码汇总(建议收藏,面试用)
- 各层作用_土工布有什么作用呢?
- 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (3)
- VC6获取硬盘序列号、型号、修订版本号
- 明明的随机数冒泡排序c 语言,NOIP复赛 c++-明明的随机数(算法和原码参考)
- IIS搭建网站遇到的问题
- 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists
- 新手安装Ubuntu操作系统
- 特斯拉全自动驾驶硬件发布!马斯克明年推RoboTaxi:傻瓜才用激光雷达
- java 静态方法 异常_java – 如何模拟一个void静态方法来抛出与Powermock的异常?...
- 如何清空Python的List
- 本人账户登录计算机黑屏,电脑开机输入系统密码后就黑屏了,怎么办
- “不用着急,慢慢来”,英语怎么说?
- 视频直播app源码,css预加载旋转动画与流光字体
- 应用之星VS AppCan——对比两大移动开发平台
- DEDECMS留言薄全站调用方法
- A1059. 求解二元整数不定方程
- 中继器做表格--普通表格
热门文章
- python-布尔数据
- centos-安装python3-pip3
- linux-mv移动更名-硬链接
- Mysql count 的多种使用方式性能比较
- 效率,互联网生态模式的本质!——保险科技生态建设...
- springboot2.0 fastjson 日期格式化不生效解决
- 【2018.05.04学习笔记】【linux基础知识10.1-10.5】
- iOS大型项目之模块化管理
- jQuery Mobile中jQuery.mobile.changePage方法使用详解
- 在RH6.5上安装sublime3 build3103步骤