En este ejemplo se muestra un vector en el plano posicionado desde el marco de referencia (0,0) al punto p1(10,10), dicho vector rotará respecto a un eje de rotación el cual nosotros podemos elegir al invocar el comando principal de nuestro programa, al ser en el plano consideramos que la rotación es en el eje Z, por lo que se utiliza una matriz de rotación-Z que se multiplica por el vector de posición inicial. Adicionalmente se agrego un objeto tipo slide en matlab para que el usuario lo desplace a lo largo de el desde la posición -pi a pi. En el espacio de trabajo de Matlab se muestra el angulo en grados y la coordenada del punto X y Y respectivamente.
Este es un ejemplo muy básico de una matriz de rotación
utilizadas en mecanismos y cinematica de robot. Tambien se muestra de
manera mas clara que es el espacio de trabajo diestro y alcanzable en
base al pivote de rotación que el usuario puede modificar al inicio del
programa.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Funcion: rotacion_en_el _plano
%%% Programa que realiza rotaciones en el plano utilizando matrices de
%%% rotacion para un vector.
%%% Materia = Robotica
%%% Instituto Tecnologico de Atitalaquia
%%% Jonathan Israel Hernández Hernandez @ dic 2016
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function rotacion_en_el_plano(pr) % pr= nodo de rotacion en el plano
% Limpiar espacio de trabajo
clc;close all
% definir la pocicion inicial del punto x e y
x = 0:10;
y = 0:10;
% Punto de rotacion del vector
nd=pr;
% Definir en forma matricial el vector P
p = [x;y];
% Obtener el centro de rotación del vector P
x_cent = x(nd);
y_cent = y(nd);
% Re mapear el centro de rotacion en el vector P
cent = repmat([x_cent; y_cent], 1, length(x));
% Deinir la condicion inicial del angulo en el vector P
theta = 0;
% Calcular la matriz de rotacion para el vector P
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
% Obtener el centro del vector P
vo = R*(p - cent) + cent;
% Se obtinene el vector para la posición en Px y Py
x_rotatacion = vo(1,:);
y_rotatacion = vo(2,:);
% Se define el objeto figura
f = figure;
set(f,'name','Matriz de rotación - Robotica - ITAt','numbertitle',...
'off','color', 'w','menubar','none') ;
% Se obtiene el espacio de trabajo
mag=sqrt(10^2+10^2);
ang=0:0.01:2*pi;
xp=mag*cos(ang);
yp=mag*sin(ang);
% Graficar Vectores
plot(x, y, 'm-', x_rotatacion, y_rotatacion, 'g-',...
x_cent, y_cent, 'ro', xp, yp, 'b');
% Parametros de diseño en el plot
axis([-20 20 -20 20]);
grid on
xlabel('Eje x')
ylabel('Eje y')
title('Rotacion en el plano - Robotica')
legend('Vector original','Vector con rotación',...
'Nodo de rotación','Espacio de trabajo')
% Definir controles en el objeto figura
b = uicontrol('Parent',f,'Style','slider','Position',[85,57,419,23],...
'value',0, 'min',-3.1416, 'max',3.1416,'Callback', @sliderCallback);
bgcolor = f.Color;
bl1 = uicontrol('Parent',f,'Style','text','Position',[85,85,23,23],...
'String','-pi','BackgroundColor',bgcolor);
bl2 = uicontrol('Parent',f,'Style','text','Position',[480,85,23,23],...
'String','pi','BackgroundColor',bgcolor);
bl3 = uicontrol('Parent',f,'Style','text','Position',[240,85,100,23],...
'String','Theta','BackgroundColor',bgcolor);
% Obtención de información en el objeto slide
function sliderCallback(hObj,~)
% Se obtiene la posición actúal del slide
theta2 = get(hObj,'Value');
% Se calcula la matriz de rotación
R = [cos(theta2) -sin(theta2); sin(theta2) cos(theta2)];
% Re mapear el centro de rtación en el vector P
vo = R*(p - cent) + cent;
% Obtener los vectores Px y Py
x_rotatacion = vo(1,:);
y_rotatacion = vo(2,:);
% Se obtiene el espacio de trabajo
mag=sqrt(10^2+10^2);
ang=0:0.01:2*pi;
xp=mag*cos(ang);
yp=mag*sin(ang);
% Nuevo espacio de trabajo
mag2=sqrt((10-(nd-1))^2+(10-(nd-1))^2);
ang2=0:0.01:2*pi;
xp2=mag2*cos(ang2);
yp2=mag2*sin(ang2);
% Graficar los vectores
plot(x, y, 'm-', x_rotatacion, y_rotatacion, 'g-', x_cent, y_cent,...
'ro', xp, yp, 'b',x(nd)+xp2,y(nd)+yp2,'y');
% Paramatros de diseño en el plot
axis([-20 20 -20 20]);
grid on
xlabel('Eje x')
ylabel('Eje y')
title('Rotacion en el plano - Robotica')
legend('Location','northeastoutside','Vector original',...
'Vector con rotación','Nodo de rotación','Espacio de trabajo Diestro',...
'Espacio de trabajo alcanzable')
% Obtener en consola los valores del angulo y las posiciones en x e y
fprintf(strcat('Theta= ',num2str(theta2*180/pi), '\t', 'Px= ',...
num2str(x_rotatacion(11)),'\t','Py= ',num2str(y_rotatacion(11)),'\n'))
end
% Fin del programa
end
%%% Funcion: rotacion_en_el _plano
%%% Programa que realiza rotaciones en el plano utilizando matrices de
%%% rotacion para un vector.
%%% Materia = Robotica
%%% Instituto Tecnologico de Atitalaquia
%%% Jonathan Israel Hernández Hernandez @ dic 2016
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function rotacion_en_el_plano(pr) % pr= nodo de rotacion en el plano
% Limpiar espacio de trabajo
clc;close all
% definir la pocicion inicial del punto x e y
x = 0:10;
y = 0:10;
% Punto de rotacion del vector
nd=pr;
% Definir en forma matricial el vector P
p = [x;y];
% Obtener el centro de rotación del vector P
x_cent = x(nd);
y_cent = y(nd);
% Re mapear el centro de rotacion en el vector P
cent = repmat([x_cent; y_cent], 1, length(x));
% Deinir la condicion inicial del angulo en el vector P
theta = 0;
% Calcular la matriz de rotacion para el vector P
R = [cos(theta) -sin(theta); sin(theta) cos(theta)];
% Obtener el centro del vector P
vo = R*(p - cent) + cent;
% Se obtinene el vector para la posición en Px y Py
x_rotatacion = vo(1,:);
y_rotatacion = vo(2,:);
% Se define el objeto figura
f = figure;
set(f,'name','Matriz de rotación - Robotica - ITAt','numbertitle',...
'off','color', 'w','menubar','none') ;
% Se obtiene el espacio de trabajo
mag=sqrt(10^2+10^2);
ang=0:0.01:2*pi;
xp=mag*cos(ang);
yp=mag*sin(ang);
% Graficar Vectores
plot(x, y, 'm-', x_rotatacion, y_rotatacion, 'g-',...
x_cent, y_cent, 'ro', xp, yp, 'b');
% Parametros de diseño en el plot
axis([-20 20 -20 20]);
grid on
xlabel('Eje x')
ylabel('Eje y')
title('Rotacion en el plano - Robotica')
legend('Vector original','Vector con rotación',...
'Nodo de rotación','Espacio de trabajo')
% Definir controles en el objeto figura
b = uicontrol('Parent',f,'Style','slider','Position',[85,57,419,23],...
'value',0, 'min',-3.1416, 'max',3.1416,'Callback', @sliderCallback);
bgcolor = f.Color;
bl1 = uicontrol('Parent',f,'Style','text','Position',[85,85,23,23],...
'String','-pi','BackgroundColor',bgcolor);
bl2 = uicontrol('Parent',f,'Style','text','Position',[480,85,23,23],...
'String','pi','BackgroundColor',bgcolor);
bl3 = uicontrol('Parent',f,'Style','text','Position',[240,85,100,23],...
'String','Theta','BackgroundColor',bgcolor);
% Obtención de información en el objeto slide
function sliderCallback(hObj,~)
% Se obtiene la posición actúal del slide
theta2 = get(hObj,'Value');
% Se calcula la matriz de rotación
R = [cos(theta2) -sin(theta2); sin(theta2) cos(theta2)];
% Re mapear el centro de rtación en el vector P
vo = R*(p - cent) + cent;
% Obtener los vectores Px y Py
x_rotatacion = vo(1,:);
y_rotatacion = vo(2,:);
% Se obtiene el espacio de trabajo
mag=sqrt(10^2+10^2);
ang=0:0.01:2*pi;
xp=mag*cos(ang);
yp=mag*sin(ang);
% Nuevo espacio de trabajo
mag2=sqrt((10-(nd-1))^2+(10-(nd-1))^2);
ang2=0:0.01:2*pi;
xp2=mag2*cos(ang2);
yp2=mag2*sin(ang2);
% Graficar los vectores
plot(x, y, 'm-', x_rotatacion, y_rotatacion, 'g-', x_cent, y_cent,...
'ro', xp, yp, 'b',x(nd)+xp2,y(nd)+yp2,'y');
% Paramatros de diseño en el plot
axis([-20 20 -20 20]);
grid on
xlabel('Eje x')
ylabel('Eje y')
title('Rotacion en el plano - Robotica')
legend('Location','northeastoutside','Vector original',...
'Vector con rotación','Nodo de rotación','Espacio de trabajo Diestro',...
'Espacio de trabajo alcanzable')
% Obtener en consola los valores del angulo y las posiciones en x e y
fprintf(strcat('Theta= ',num2str(theta2*180/pi), '\t', 'Px= ',...
num2str(x_rotatacion(11)),'\t','Py= ',num2str(y_rotatacion(11)),'\n'))
end
% Fin del programa
end