当前位置: 首页 > news >正文

【matlab】机器人工具箱快速上手-动力学仿真(代码直接复制可用)

动力学代码,按需修改参数

 各关节力矩-关节变量的关系曲线:

%%%%%%%%SCARA机器人仿真模型
l=[0.457 0.325];
L(1)= Link('d',0,'a',l(1),'alpha',0,'standard','qlim',[-130 130]*pi/180);%连杆1
L(2)=Link('d',0,'a',l(2),'alpha',pi,'standard','qlim',[-145 145]*pi/180);%连杆2
L(3)=Link('theta',0,'a',0,'alpha',0,'standard','qlim',[0 0.3]);%连杆3
L(4)= Link('d',0,'a',0,'alpha',0,'standard','qlim',[-360 360]*pi/180);%连杆4
scara=SerialLink(L,'name','SCARA Robot');%建立 SCARA 机器人模型
q0=[0 0 0 0];%初始关节变量
scara.plot(q0);%绘制机器人结构
scara.teach(q0);%驱动机器人%%%%%%%%工作空间绘制
qL=scara.qlim;%关节运动范围
N=10000;%随机数数量
ws_q=zeros(N,4);%定义N个关节变量向量组成的关节变量矩阵q
a=rand(size(ws_q)); %生成元素数值在0~1之间的与q同维度的随机矩阵for j=1:Nfor i=1:4ws_q(j,i)=qL(i,1)+(qL(i,2)-qL(i,1))*a(j,i);%给矩阵q赋q范围内的随机值,以得到足够多的给定范围(矩阵ql)内的机器人的关节变量(矩阵q)值end
end
%求机器人位置坐标
ws_x=l(1)*cos(ws_q(:,1))+l(2)*cos(ws_q(:,1)+ ws_q(:,2));%机器人末端x坐标值
ws_y=l(1)*sin(ws_q(:,1))+l(2)*sin(ws_q(:,1)+ws_q(:,2));%机器人末端了坐标值
ws_z=- ws_q(:,3);%机器人末端z坐标值
figure('Name','Scara机器人工作空间')
plot3(ws_x,ws_y,ws_z,'r.')
grid;
xlabel('x');
ylabel('y');
zlabel('z');
%%%%%%%%轨迹规划
qA=[0 0 0 0];%起始点关节变量值
qB=[0.7 1.2 0.15 2];%终止点关节变量值
t=0:0.05:2;%产生时间向量
[q,qd,qdd]=jtraj(qA,qB,t);%jtraj()为构建轨迹命令,得到各关节的位移、速度和加速度
%%%%%%%%求解关节驱动力矩矢量M(t)
m1=15;m2=10;m3=2.5;m4=2.5;%连杆质量
l1=0.475;l2=0.325;r0=0.01; %连杆参数
g=9.8;%重力加速度[m/s^2]
for i=1:length(t)D11=(m1*l1^2)/3+m2*((l1^2)/3+l2^2+l1*l2*cos(q(i,2)))+(m3+m4)*(l1^2+l2^2+2*l1*l2*cos(q(i,2)))+(m4*r0^2)/2;D22=(m2*l2^2)/3+m3*l2^2+m4*l2^2+(m4*r0^2)/2;D33=m3+m4;D44=(m4*r0^2)/2;D12=(m2*l2^2)/3+(m2*l2*cos(q(i,2)))/2+m3*l2^2+m3*l1*l2*cos(q(i,2))+m4*l2^2+m4*l1*l2*cos(q(i,2))+(m4*r0^2)/2;D13=0; D14=-(m4*r0^2)/2;D21=D12;D23=0;D24=-(m4*r0^2)/2;D31=D13;D32=D23;D34=0;D41=D14;D42=D24;D43=D34;D112=-(m2/2+m3+m4)*l1*l2*sin(q(i,2));D121=D112;D122=-(m2/2+m3+m4)*l1*l2*cos(q(i,2));D211=-D122;tau(:,i)=[D11 D12 D13 D14;D21 D22 D23 D24;D31 D32 D33 D34;D41 D42 D43 D44]*qdd(i,:)'+[2*D112*qd(i,1)*qd(i,2)+D122*qd(i,2)^2;D211*qd(i,2)^2; -(m3+m4)*g;0];
end
figure('Name','SCARA机器人力(矩)-关节变量的关系曲线');
subplot(1,4,1);
plot(q(:,1),tau(1,:));
grid on
xlabel('theta-1(rad)');
ylabel('关节1力矩(N·m)');
subplot(1,4,2);
plot(q(:,2),tau(2,:));
grid on
xlabel('theta-2(rad)');
ylabel('关节2力矩(N·m)');
subplot(1,4,3);
plot(q(:,3),tau(3,:));
grid on
xlabel('d-3(m)');
ylabel('关节3力矩(N·m)');
subplot(1,4,4);
plot(q(:,4),tau(4,:));
grid on
xlabel('theta-4(rad)');
ylabel('关节4力矩(N·m)');

http://www.lryc.cn/news/100170.html

相关文章:

  • MySQL高级篇第2章(MySQL的数据目录)
  • 【通过改变压缩视频的分辨率实现高效的视频语义分割】CVPR2022论文精度
  • golang 时间工具类
  • 剑指 Offer 44.!! 数字序列中某一位的数字
  • 16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报
  • Docker Compose 容器编排 + Docker--harbor私有仓库部署与管理
  • 九五从零开始的运维之路(其二十六)
  • 29.Git版本控制工具
  • 【算法题】2790. 长度递增组的最大数目
  • Qt设置开机自启动无法读取配置文件
  • 解决Font family [‘sans-serif’] not found问题
  • C语言进阶-2
  • Zabbix监控之分布式部署
  • vue2企业级项目(七)
  • PDPS教程:导出带颜色的JT格式2D布局图文件的另一种方法
  • AI面试官:Asp.Net 中使用Log4Net (二)
  • C# Solidworks二次开发:向量相关的数学函数API的使用介绍
  • table 导出表格 Excel
  • 基于 Flink SQL CDC 数据处理的终极武器
  • uniapp使用HQChart的k线,用webSocket更新数据
  • idea的Plugins中搜索不到插件
  • flask 实现简单的登录系统demo
  • Spring Security安全配置
  • 2023Java后端开发之100道常见经典面试题
  • Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用
  • AI数字人:金融数字化转型的“关键先生”
  • mac关闭VPN之后,浏览器就不能够正常上网了(图解)
  • YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)
  • 基于WSL2、Ubuntu和VS Code的CUDA平台运行C语言程序
  • 构建外卖系统小程序,订单管理功能实现步骤详解