Robotics System Toolbox中的机器人运动 (3)

1、前记:在这篇博文之前,已经对RST中机器人的运动方式有了初步的尝试,,如 Robotics System Toolbox中的机器人运动(1)Robotics System Toolbox中的机器人运动(2)---圆的轨迹跟踪

  正运动方式--->单独控制各关节运动,被控对象--->各个单独关节,控制方式--->各关节变量驱动单轴;

  逆运动方式--->控制所有关节协调运动以实现末端姿态,被控对象--->所有关节,控制方式--->所有关节变量协调驱动各关节。

2、在正式开始使用工具箱逆解函数ik(robotics system toolbox)之前,回顾ikine(robotics toolbox 9.10函数)的直线运动。

代码和动图如下:

clc;
clear;
%建立机器人模型
%       theta    d        a        alpha     offset
L1=Link([0       0.4      0.025    pi/2      0     ]); %定义连杆的D-H参数
L2=Link([pi/2    0        0.56     0         0     ]);
L3=Link([0       0        0.035    pi/2      0     ]);
L4=Link([0       0.515    0        pi/2      0     ]);
L5=Link([pi      0        0        pi/2      0     ]);
L6=Link([0       0.08     0        0         0     ]);
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','Seize the day'); %连接连杆,机器人取名Seize the day
T1=transl(0.5,0,0);%根据给定起始点,得到起始点位姿
T2=transl(0,0.5,0.5);%根据给定终止点,得到终止点位姿
T=ctraj(T1,T2,50);%组成50个点构成笛卡尔轨迹
Tj=transl(T);%取50个位姿点的空间位置坐标x,y,z
plot3(Tj(:,1),Tj(:,2),Tj(:,3));%输出末端轨迹
grid on;
q=robot.ikine(T);%调用ikine得到各关节角度的配置以实现末端位置
hold on
robot.plot(q);%动画演示

3、利用IK和Curve Fitting Toolbox的直线轨迹运动。

%% Waypoint tracking demonstration using Robotics System Toolbox
% This demonstration performs inverse kinematics of a
% robot manipulator to follow a desired set of waypoints.
% Copyright 2017-2018 The MathWorks, Inc.
%% Load and display robot导入机器人
clear
clc
robot = importrobot('irb_140.urdf');
axes = show(robot);
axes.CameraPositionMode = 'auto';
%% Create a set of desired wayPoints设置点位
wayPoints = [0.5 -0.4 0.6;0.5 0.2 0.6]; % Alternate set of wayPoints
%wayPoints = [0.2 -0.2 0.02;0.15 0 0.28;0.15 0.05 0.2; 0.15 0.09 0.15;0.1 0.12 0.1; 0.04 0.1 0.2;0.25 0 0.15; 0.2 0.2 0.02];
exampleHelperPlotWaypoints(wayPoints);
%% Create a smooth curve from the waypoints to serve as trajectory
trajectory = cscvn(wayPoints');%在点之间创建轨迹
% Plot trajectory spline and waypoints
hold on
fnplt(trajectory,'r',2);

%% Perform Inverse Kinematics for a point in space
% Add end effector frame, offset from the grip link frame逆运动求解各关节配置
eeOffset = 0.01;
eeBody = robotics.RigidBody('end_effector');
setFixedTransform(eeBody.Joint,trvec2tform([eeOffset 0 0]));
addBody(robot,eeBody,'link_6');
ik = robotics.InverseKinematics('RigidBodyTree',robot);
weights = [0.1 0.1 0 1 1 1];
initialguess = robot.homeConfiguration;
% Calculate the inverse kinematic solution using the "ik" solver 
% Use desired weights for solution (First three are orientation, last three are translation)
% Since it is a 4-DOF robot with only one revolute joint in Z we do not
% put a weight on Z rotation; otherwise it limits the solution space
numTotalPoints =40;
% Evaluate trajectory to create a vector of end-effector positions
eePositions = ppval(trajectory,linspace(0,trajectory.breaks(end),numTotalPoints));
% Call inverse kinematics solver for every end-effector position using the
% previous configuration as initial guess
for idx = 1:size(eePositions,2)
    tform = trvec2tform(eePositions(:,idx)');
    configSoln(idx,:) = ik('end_effector',tform,weights,initialguess);
    initialguess = configSoln(idx,:);
end
%% Visualize robot configurations动画显示
title('Robot waypoint tracking visualization')
hold on
axis([-0.6 0.8 -0.6 0.65 0 1.3]);
for idx = 1:size(eePositions,2)
    show(robot,configSoln(idx,:), 'PreservePlot', false,'Frames','off');
    pause(0.1)
end

结果:用ABB机器人irb140验证其正确性!

猜你喜欢

转载自blog.csdn.net/weixin_39090239/article/details/82803213