Code covered by the BSD License  

Highlights from
Kinematics Toolbox

image thumbnail
from Kinematics Toolbox by Brad Kratochvil
The kinematics toolbox is intended for prototyping robotics and computer vision related tasks.

example_robotlinks.m
% A simple set of tests for the forward and inverse kinematics using the
% toolbox.

clear;
close all;

fprintf('starting robotlinks test\n');

% debuglevel
% 'none'     0
% 'low'      1
% 'normal'   2
% 'high'     3

global DebugLevel;
DebugLevel = 1;

% % scara example from Murray
% l1 = createtwist([0;0;1], [0;0;0]);
% l2 = createtwist([0;0;1], [0;1;0]);
% l3 = createtwist([0;0;1], [0;2;0]);
% l4 = createtwist([0;0;0], [0;0;1]);
% M  = eye(4);

l1 = [0;0;0;0;0;1];
l2 = [0;10;-10;1;0;0];
l3 = [0;1;0;0;0;0];
M  = eye(4);
M(2,4) = 2;

% % random
% l1 = randtwist();
% l2 = randtwist();
% l3 = randtwist();
% M = randhom();

rn = robot({l1, l2, l3},M);

%% draw a robot

fprintf('starting draw kinematics test...\n');

% trajectory
tn = [-pi/2:pi/16:pi/2];
tz = zeros(size(tn));
tn = [tn;tz;tz];

% draw simple trajectory
hn = fkine(rn,tn);

named_figure('simple trajectory moving all joints');
clf;
drawframetraj(hn);
nice3d();

fprintf('draw kinematics test finished!\n');
%% test the inverse kinematics

fprintf('starting inverse kinematics test...\n');

for i=1:20,
  tic;
  fprintf('  calculating inverse...');
  theta = pi/2*rand(3,1) - pi/4;
  pose = twistcoords(logm(fkine(rn, theta)));
  guess = zeros(3,1) + 0.1*rand(3,1);

%   theta_hat = ikine(rn, pose, guess);
  theta_hat = ikine2(rn, pose, guess);
  fprintf(' completed in %0.3f seconds\n', toc);
  
  if ~isequalf(theta, theta_hat, 1e-3),
    fprintf(' correct solution not found\n');
    display([theta theta_hat]);
    error(' problem with inverse kinematics');
  end  
end

fprintf('inverse kinematics test finished!\n');
%% more inverse kinematics

fprintf('starting bulk inverse kinematics test...\n');

ha = fkine(rn, tn);

fprintf('  calculating %i inverses...', size(tn,2));
tic;
% ii = ikine(rn, ha);
ii = ikine2(rn, ha);
fprintf(' completed in %0.3f seconds\n', toc);

if ~isequalf(ii, tn, 1e-3),
  error(' problem with inverse kinematics');
end   

fprintf('bulk inverse kinematics test finished!\n');

%%
fprintf('test robotlinks success!!\n\n');







Contact us at files@mathworks.com