机械臂B样条插补+带源代码

该博客介绍了使用MATLAB进行机器人正逆运动学分析和B样条曲线轨迹规划的过程。通过DH参数设定关节限制,并利用RevoluteMDH函数建立连杆模型。接着,计算关节角度并绘制B样条末端运动轨迹和各关节随时间的变化曲线。同时,展示了如何生成三维动画和保存轨迹数据。
摘要由CSDN通过智能技术生成

Copyright © 2022AC今夜有雨. All rights reserved.

clear,clc,close all

format compact

DH=DH_Param(4);JointNum=length(DH);

ROCR6v2 关节2、3偏置

qlim=deg2rad([-179,179;-146,146;-146,146;-179,179;-179,179;-179,179]);

for i=1:JointNum

L(i)=RevoluteMDH(‘d’,DH(i,3),‘a’,DH(i,2),‘alpha’,deg2rad(DH(i,1)), …

‘offset’,deg2rad(DH(i,4)),‘qlim’,qlim(i,:));

end

robot=SerialLink(L,‘name’,‘robot’);

robot.display();

robot =

robot:: 6 axis, RRRRRR, modDH, fastRNE

±–±----------±----------±----------±----------±----------+

| j | theta | d | a | alpha | offset |

±–±----------±----------±----------±----------±----------+

| 1| q1| 0.1215| 0| 0| 0|

| 2| q2| 0.1225| 0| 1.5708| -1.5708|

| 3| q3| -0.102| -0.3| 0| 0|

| 4| q4| 0.09| -0.276| 0| -1.5708|

| 5| q5| 0.09| 0| 1.5708| 0|

| 6| q6| 0.082| 0| -1.5708| 0|

±–±----------±----------±----------±----------±----------+

%% 绘制三种类型的B样条曲线,需要前面所给的所有.m文件

%控制顶点

P=[150,50, -120, -223, -258, -303;

-480,-420, -460, -485, -306,-265;

340, 340,340,340,340,340]*0.001;

P(1:2,:)=P(1:2,:)*1;

[m,n]=size§;

k = 3;FixedStep=0.0001;StopTime=1;

flag = 2;% 绘制准均匀B样条曲线

% figure(‘Color’,[1,1,1],‘Position’,[485,180,684,330],‘Visible’,‘on’);

position=Switch_flag(P,n-1,k,flag,StopTime,FixedStep);

在这里插入图片描述

T=position’;

SimpleNum=(0:FixedStep:StopTime-FixedStep)*50;

Cunt=length(SimpleNum);q=zeros(6,Cunt)';

InitAngle=[-60.865,-12.697,-69.496,-7.8067,90,119.13]/180*pi*0;

RPY=deg2rad([180,0,-90]);

[X,Y,Z]=deal(zeros(1,Cunt));

for i=1:Cunt

% if i==1

% FK = Pos2Tr_XYZ([T(i,:),RPY]);

% %自己编写求逆解的函数,已判断是否在转动范围以内

% [~,Theta,~]=InverseMDH_ZY(DH,FK,InitAngle);

% else

FK = Pos2Tr_XYZ([T(i,:),RPY]);

%自己编写求逆解的函数,已判断是否在转动范围以内

[~,Theta,~]=InverseMDH_ZY(DH,FK,InitAngle);

InitAngle=Theta;

% end

q(i,:)=Theta*180/pi;

end

qT=q’;

% figure1=figure(‘Color’,[1,1,1],‘Position’,[485,180,536,325],‘Name’,‘B样条末端运动轨迹’);

W=[-700,+400,-500,+400,-0,+600]*0.001;

hold on

plot3(position(1,:)‘,position(2,:)’,position(3,:)',‘b’);hold on;grid on;axis(W);

q=q’*pi/180;save(‘SimBSplineData.mat’,‘q’);

xlabel(‘x(m)’);ylabel(‘y(m)’);zlabel(‘z(m)’);

robot.model3d = ‘ROCR6/MDH_stl’;

qc=q(:,1:round(end/100):end);

light(‘Position’, [1 0.5 1]);

fileName= [‘CartesianSpace_’,datestr(datetime(‘now’),‘yyyy-mm-dd-HH-MM’),‘.gif’];

robot.plot3d(qc’,‘workspace’,W,‘movie’,fileName, …

‘view’,[40 31],‘delay’,0.001,‘trail’,{‘r’,‘LineWidth’,4},‘nowrist’) %显示三维动画

Animate: saving video --> CartesianSpace_2022-05-01-15-29.gif with profile ‘GIF’

Loading STL models from ARTE Robotics Toolbox for Education by Arturo Gil (http://arvc.umh.es/arte)…

axes=gca;

axes.CameraViewAngleMode=‘manual’;

axes.CameraViewAngle=7.5;

gf=gcf;

gf.Position=[400,300,720,420];

saveas(gf,‘B样条末端运动轨迹’,‘svg’)

在这里插入图片描述

figure(‘Color’,[1,1,1],‘Position’,[485,180,536,325]);

for i=1:6

plot(SimpleNum,qT(i,1:Cunt),‘LineWidth’,2);hold on;

end

string=‘关节角度(deg)’;

xlabel(‘t(s)’),ylabel(string,‘Interpreter’,‘tex’,‘FontSize’,10);grid on;

legend('joint1 ',‘joint2’,‘joint3’,‘joint4’,‘joint5’,‘joint6’);

figure2 = figure(‘Color’,[1,1,1],‘Position’,[485,180,684,330],‘Name’,‘关节角度’);

% 创建 subplot

for i=1:6

string=[‘theta’,num2str(i),’ (deg)'];

subplot1 = subplot(3,2,i,‘Parent’,figure2);

plot(SimpleNum,qT(i,1:Cunt),‘Parent’,subplot1,‘LineWidth’,2,‘Color’,[1 0 0]);grid on;

% 创建 ylabel

ylabel(string,‘Interpreter’,‘tex’,‘FontSize’,10);

% 创建 xlabel

xlabel(‘t(s)’,‘Interpreter’,‘tex’,‘FontSize’,10);

end

saveas(figure2,figure2.Name,‘svg’)

在这里插入图片描述

g,‘Interpreter’,‘tex’,‘FontSize’,10);

% 创建 xlabel

xlabel(‘t(s)’,‘Interpreter’,‘tex’,‘FontSize’,10);

end

saveas(figure2,figure2.Name,‘svg’)

源文件下载链接
咨询链接:matlab正逆运动学分析与轨迹规划

MATLAB中实现机械臂的圆弧插补,可以使用Robotics System Toolbox提供的函数和工具。以下是一个简单的示例代码,用于在MATLAB中实现机械臂的圆弧插补: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 定义机械臂的关节和链接 L1 = robotics.RigidBody('L1'); J1 = robotics.Joint('J1', 'revolute'); L1.Joint = J1; L2 = robotics.RigidBody('L2'); J2 = robotics.Joint('J2', 'revolute'); L2.Joint = J2; % 将关节和链接添加到机械臂模型中 robot.addBody(L1, 'base'); robot.addBody(L2, 'L1'); % 设置机械臂的初始姿态 q0 = [0 0]; % 关节角度 % 设置圆弧插补的参数 centerPoint = [0.1 0.1]; % 圆心坐标 radius = 0.05; % 半径 startAngle = 0; % 起始角度 endAngle = pi/2; % 终止角度 % 计算圆弧上的路径点 numPoints = 100; % 路径点数量 theta = linspace(startAngle, endAngle, numPoints); x = centerPoint(1) + radius*cos(theta); y = centerPoint(2) + radius*sin(theta); % 执行圆弧插补运动 for i = 1:numPoints q = inverseKinematics(robot, robot.BodyNames, trvec2tform([x(i) y(i) 0])); qMatrix(i,:) = q; end % 控制机械臂运动 for i = 1:numPoints show(robot, qMatrix(i,:), 'PreservePlot', false); drawnow; end ``` 这段代码首先创建了一个机械臂模型,并定义了机械臂的关节和链接。然后设置了机械臂的初始姿态和圆弧插补的参数。接下来,通过计算圆弧上的路径点,并使用逆运动学求解每个路径点对应的关节角度。最后,通过控制机械臂的运动,将机械臂沿着圆弧插补路径进行运动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAE工作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值