Está en la página 1de 17

Universidad Autnoma de Ciudad Jurez Instituto de Ingeniera y Tecnologa

Robtica Proyecto 1

Aarn Alan Orozco Grajeda 94479

introduccin Desarrollar el modelo cinemtica de un manipulador articulado de 5 grados de libertad, para de esta manera poder ubicar en el espacio de este sus eslabones, por medio de un programa en comunicacin con el controlador del manipulador, con el fin didctico de probar los modelos matemticos vistos en clase de una manera ms prctica. Desarrollo Parmetros de Denavit-Hartenverg Se determinaron los ejes del manipulador para poder determinar los parametros de Denavit-Hartenverg.

Una vez que se ubicaron los ejes se dispuso a determinar los parmetros de Denavit-Hartenverg. Articulacin 1 2 3 4 1 2 3 4 -90o 0o 0o 0o d L1 0 0 0 a 0 L2 L3 L4

Donde L1=3", L2=3.7", L3=4.2" y L4=2.7".

Para posicionar cada articulacin en su respectiva posicin es necesario caculear el Angulo de cada servomotor, por lo que se uso cinemtica inversa utilizando los parmetros encontrar el modelo matemtico que describe el Angulo de cada servomotor, con respecto a su efector final. utilizamos las transformaciones homogneas para representar las rotaciones y traslaciones relativas entre los distintos eslabones que componen el robot.

)(

)(

)(

En resumen sustituimos en la multiplicacin con los datos de cada articulacin. Cada matriz quedo de la siguiente manera.

Se le denomina T a todos los grados de libertad de 0A4. T=0A11A22A33A4 Para poder calcular los ngulos es necesario empezar por 1, por lo que se tiene que despejar 0A1 y que es donde se encuentra 1, la siguiente en

despejar es 0A11A2 , ya que en estas se encuentran 1 y 2 , de este despeje nos interesa 2 , al final despejamos 0A11A22A3 de aqu obtenemos 3 y 4. (0A1)-1T=1A22A33A4 (0A1)-1(1A2)-1T= 2A33A4 (0A1)-1(1A2)-1(2A3)-1T=3A4

Las operaciones se tornan un tanto complicadas por lo que se opto en utilizar programacin para resolverlas, se realizo un programa en matlab que contuviera las matrices donde t1=1, t2= 2, t3= 3 y t4= 4, coseno=c y seno=s. .
clc clear all %En esta parte de la programacin se limpian todas las operaciones hechas. syms t1 t2 t3 t4 PX PY % Se declaran las variables que se utilizaran. %A continuacin se introducen las matrices para trabajar con ellas. A1=[cos(t1) 0 -sin(t1) 0;sin(t1) 0 cos(t1) 0;0 -1 0 3;0 0 0 1]; A2=[cos(t2) -sin(t2) 0 3.7*cos(t2);sin(t2) cos(t2) 0 3.7*sin(t2);0 0 1 0;0 0 0 1]; A3=[cos(t3) -sin(t3) 0 4.2*cos(t3);sin(t3) cos(t3) 0 4.2*sin(t3);0 0 1 0;0 0 0 1]; A4=[cos(t4) -sin(t4) 0 2.7*cos(t4);sin(t4) cos(t4) 0 2.7*sin(t4);0 0 1 0;0 0 0 1];

Una vez que introducimos las matrices se calcula la inversa de estas, y se guardan con un nombre para un mejor manejo de los datos.
%Se saca la inversa de cada matriz y se guarda con un nombre, de esta manera se puede mandar a llamar % cuando se quiera apreciar el resultado. B1=inv(A1) B2=inv(A2) B3=inv(A3) B4=inv(A4)

Como siguiente paso caculeamos las operaciones involucradas por los despejes, a los productos de las inversas se les asigna los nombres de D1 y D2 y a los productos de las matrices que completan la igualdad se les llama C1 y C2. (0A1)-1T=1A22A33A4 (0A1)-1(1A2)-1T= 2A33A4 (0A1)-1(1A2)-1(2A3)-1T=3A4

%Se realizan los siguientes multiplicaciones para realizar igualdades con los despejes

%las D son los valores de las inversas obtenidas por los despejes y las C %son la parte que completan la igualdad C1=A2*A3*A4 D1=B*B2 C2=A3*A4 D2=B*B2*B3

de esta manera obtenemos los siguientes datos. B1 = [ c(t1), s(t1), 0, 0] [ 0, 0, -1, 3]

[ -s(t1), c(t1), 0, 0] [ 0, 0, 0, 1]

B2 = [ c(t2), s(t2), 0, -37/10] [ -s(t2), c(t2), 0, [ [ B3 = [ c(t3), s(t3), 0, -21/5] [ -s(t3), c(t3), 0, [ [ B4 = [ c(t4), s(t4), 0, -27/10] [ -s(t4), c(t4), 0, [ [ 0, 0, 0, 1, 0, 0, 0] 0] 1] 0, 0, 0, 1, 0, 0, 0] 0] 1] 0, 0, 0, 1, 0, 0, 0] 0] 1]

C=
[c(t4)*(c(t2)*c(t3)-s(t2)*s(t3))-s(t4)*(c(t2)*s(t3)+c(t3)*s(t2)),-c(t4)*(c(t2)*s(t3)+c(t3)*s(t2))-s(t4)*(c(t2)*c(t3)s(t2)*s(t3)),0,(37*c(t2))/10+(21*c(t2)*c(t3))/5-(21*s(t2)*s(t3))/5+(27*c(t4)*(c(t2)*c(t3)-s(t2)*s(t3)))/10(27*s(t4)*(c(t2)*s(t3)+c(t3)*s(t2)))/10] [c(t4)*(c(t2)*s(t3)+c(t3)*s(t2))+s(t4)*(c(t2)*c(t3)-s(t2)*s(t3)),c(t4)*(c(t2)*c(t3)-s(t2)*s(t3))-s(t4)*(c(t2)*s(t3)+c(t3)*s(t2)),0, (37*s(t2))/10+(21*c(t2)*s(t3))/5+(21*c(t3)*s(t2))/5+(27*c(t4)*(c(t2)*s(t3)+c(t3)*s(t2)))/10+(27*s(t4)*(c(t2)*c(t3)s(t2)*s(t3)))/10] [ 0, 0, 1,0] [ 0,0,0,1]

D1 = [c(t1)*c(t2)- s(t1)*s(t2),c(t1)*s(t2)+c(t2)*s(t1), 0, -(37*cos(t1))/10] [ 0, 0, -1, 3]

[-c(t1)*s(t2) - c(t2)*s(t1), c(t1)*c(t2) - s(t1)*s(t2), 0,(37*s(t1))/10] [ C2 =


[c(t3)*c(t4)-s(t3)*s(t4),-c(t3)*s(t4)-c(t4)*s(t3),0,(21*c(t3))/5+(27*c(t3)*c(t4))/10-(27*s(t3)*s(t4))/10] [c(t3)*s(t4)+c(t4)*s(t3),c(t3)*c(t4)-s(t3)*s(t4),0,(21*s(t3))/5+(27*c(t3)*s(t4))/10+(27*c(t4)*s(t3))/10] [ 0,0, 1,0] [0,0, 0,1]

0,

0, 0,

1]

D2 =
[c(t3)*(c(t1)*c(t2)-s(t1)*s(t2))-s(t3)*(c(t1)*s(t2)+c(t2)*s(t1)),c(t3)*(c(t1)*s(t2)+c(t2)*s(t1))+s(t3)*(c(t1)*c(t2)s(t1)*s(t2)),0,(21*s(t1)*s(t2))/5-(21*c(t1)*c(t2))/5- (37*c(t1))/10] [0,0, -1,3] [-c(t3)*(c(t1)*s(t2)+c(t2)*s(t1))-s(t3)*(c(t1)*c(t2)-s(t1)*s(t2)),c(t3)*(c(t1)*c(t2)-s(t1)*s(t2))-s(t3)*(c(t1)*s(t2)+c(t2)*s(t1)),0, (37*s(t1))/10+(21*c(t1)*s(t2))/5+(21*c(t2)*s(t1))/5] [0,0,0,1]

Utilisando los balores de matlab B1 y C1 y T donde T es se expresa de la siguiente manera:

formamos la siguiente igualdad B1*T=C1, donde utilizaremos el rengln donde t1 es una constante en este caso el tercero, por lo que tenemos la siguiente igualdad y despejamos 1:

Para encontrar 2 utilizamos los datos de D1*T=C2, buscamos donde 2 depende de 1 ya que 1 es conocido, de nuevo seleccionamos el tercer rengln y la igualdad queda de la siguiente manera: ( ) ( ) ( )

Por la expresin resulta muy dificil de despejar optamos nubemente por utilisar programacion en matlab intro duciendo las ecuaciones nesesarias para calcular los angulos. para 3 y 4 utilizamos la ultima igualdad con los datos de D2*T=A4, buscando el rengln donde 3 es independiente de 4, y para 4 donde aparezca este. Este es el cdigo utilizado en matlab para realizar los despejes:
%Se utilizan nombres para un mejor manejo de las operaciones matemticas, %las ecuaciones con las que se trabaja son nombrados con la letra f i1=atan(PY/PX); i2=3.7*(sin(t1)); R=i2/(cos(t2)); R1=tan(t2); R2=-(PY*cos(t1))-(PX*sin(t1)); f2=R1-R+R2 solve (f2,'t2')% este cdigo es el encargado de despejar t2 x=PX*(- cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2))); y=PY*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))); z=(37*sin(t1))/10 + (21*cos(t1)*sin(t2))/5 + (21*cos(t2)*sin(t1))/5; f3=x+y+z

solve(f3,'t3')% este cdigo es el encargado de despejar t3 x1=PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))); y1= PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2))); z1=(21*sin(t1)*sin(t2))/5 - (21*cos(t1)*cos(t2))/5 - (37*cos(t1))/10; w=-((27*cos(t4))/10); f4=x1+y1+z1+w solve(f4,'t4')% este cdigo es el encargado de despejar t4

Los resultados obtenidos no fueron los que esperbamos ya que son muy extensos, pero aun as fueron utilizados.

f2 = tan(t2) - (37*sin(t1))/(10*cos(t2)) - PY*cos(t1) - PX*sin(t1) ans = 2*atan((10*tan(t1/2)^2 - (400*PX^2*tan(1/2*t1)^2 - 400*PX*PY*tan(1/2*t1)^3 400*PX*PY*tan(1/2*t1) + 100*PY^2*tan(1/2*t1)^4 - 200*PY^2*tan(1/2*t1)^2 100*PY^2 1369*tan(1/2*t1)^4*sin(t1)^2 + 100*tan(1/2*t1)^4 2738*tan(1/2*t1)^2*sin(t1)^2 + 200*tan(1/2*t1)^2 - 1369*sin(t1)^2 + 100)^(1/2) 10)/(37*sin(t1) - 10*PY + 10*PY*tan(t1/2)^2 + 37*tan(t1/2)^2*sin(t1) 20*PX*tan(t1/2))) 2*atan(((400*PX^2*tan(t1/2)^2 400*PX*PY*tan(t1/2)^3 400*PX*PY*tan(t1/2) + 100*PY^2*tan(t1/2)^4 - 200*PY^2*tan(t1/2)^2 100*PY^2 1369*tan(t1/2)^4*sin(t1)^2 + 100*tan(t1/2)^4 2738*tan(t1/2)^2*sin(t1)^2 + 200*tan(t1/2)^2 - 1369*sin(t1)^2 + 100)^(1/2) 10*tan(t1/2)^2 + 10)/(37*sin(t1) - 10*PY + 10*PY*tan(t1/2)^2 37*tan(t1/2)^2*sin(t1) - 20*PX*tan(t1/2))) + + + -

+ + + +

f3 = (37*sin(t1))/10 + (21*cos(t1)*sin(t2))/5 + (21*cos(t2)*sin(t1))/5 PX*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) sin(t1)*sin(t2))) + PY*(cos(t3)*(cos(t1)*cos(t2) sin(t1)*sin(t2)) sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))) -

ans = 2*atan((10*PX + (100*PX^2 + 100*PY^2 - 1764*cos(t1)^2*sin(t2)^2 3528*cos(t1)*cos(t2)*sin(t1)*sin(t2) 3108*cos(t1)*sin(t1)*sin(t2) -

1764*cos(t2)^2*sin(t1)^2 1369*sin(t1)^2)^(1/2))/(37*sin(t1) 42*cos(t2)*sin(t1))) - t2 - t1

3108*cos(t2)*sin(t1)^2 10*PY + 42*cos(t1)*sin(t2)

2*atan((10*PX - (100*PX^2 + 100*PY^2 - 1764*cos(t1)^2*sin(t2)^2 3528*cos(t1)*cos(t2)*sin(t1)*sin(t2) 3108*cos(t1)*sin(t1)*sin(t2) 1764*cos(t2)^2*sin(t1)^2 3108*cos(t2)*sin(t1)^2 1369*sin(t1)^2)^(1/2))/(37*sin(t1) 10*PY + 42*cos(t1)*sin(t2) + 42*cos(t2)*sin(t1))) - t2 - t1 f4 = (21*sin(t1)*sin(t2))/5 - (27*cos(t4))/10 - (21*cos(t1)*cos(t2))/5 - (37*cos(t1))/10 + PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) - sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))) + PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2))) ans = -acos(14/9*sin(t1)*sin(t2) - 14/9*cos(t1)*cos(t2) - 37/27*cos(t1) + 10/27*PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) - sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))) + 10/27*PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)))) acos((14*sin(t1)*sin(t2))/9 - (14*cos(t1)*cos(t2))/9 - (37*cos(t1))/27 + (10*PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) - sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))))/27 + (10*PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2))))/27) Interfaz Una vez que obtuvimos un modelo matemtico trabajamos con la interfaz nuevamente se eligi por matlab aunque no tuvimos xito por lo que el modelo matemtico no fue probado en la prctica con el manipulador, el cdigo desarrollado fue el siguiente:
clear all; close all; clc; %se introducen as coordenadas del efector final PX=input('px= '); PY=input('py= '); PZ=input('pz= '); %se calculan los ngulos t1=atan(PY/PX) t2=(2*atan((10*tan(t1/2)^2 - (400*PX^2*tan(1/2*t1)^2 400*PX*PY*tan(1/2*t1)^3 + 400*PX*PY*tan(1/2*t1) + 100*PY^2*tan(1/2*t1)^4 - 200*PY^2*tan(1/2*t1)^2 + 100*PY^2 1369*tan(1/2*t1)^4*sin(t1)^2 + 100*tan(1/2*t1)^4 2738*tan(1/2*t1)^2*sin(t1)^2 + 200*tan(1/2*t1)^2 - 1369*sin(t1)^2 +

100)^(1/2) + 10)/(37*sin(t1) - 10*PY + 10*PY*tan(t1/2)^2 + 37*tan(t1/2)^2*sin(t1) - 20*PX*tan(t1/2))))+... (2*atan(((400*PX^2*tan(t1/2)^2 - 400*PX*PY*tan(t1/2)^3 + 400*PX*PY*tan(t1/2) + 100*PY^2*tan(t1/2)^4 - 200*PY^2*tan(t1/2)^2 + 100*PY^2 - 1369*tan(t1/2)^4*sin(t1)^2 + 100*tan(t1/2)^4 2738*tan(t1/2)^2*sin(t1)^2 + 200*tan(t1/2)^2 - 1369*sin(t1)^2 + 100)^(1/2) + 10*tan(t1/2)^2 + 10)/(37*sin(t1) - 10*PY + 10*PY*tan(t1/2)^2 + 37*tan(t1/2)^2*sin(t1) - 20*PX*tan(t1/2)))) t3=(2*atan((10*PX + (100*PX^2 + 100*PY^2 - 1764*cos(t1)^2*sin(t2)^2 3528*cos(t1)*cos(t2)*sin(t1)*sin(t2) - 3108*cos(t1)*sin(t1)*sin(t2) 1764*cos(t2)^2*sin(t1)^2 - 3108*cos(t2)*sin(t1)^2 1369*sin(t1)^2)^(1/2))/(37*sin(t1) - 10*PY + 42*cos(t1)*sin(t2) + 42*cos(t2)*sin(t1))) - t2 - t1)+... (2*atan((10*PX - (100*PX^2 + 100*PY^2 - 1764*cos(t1)^2*sin(t2)^2 - 3528*cos(t1)*cos(t2)*sin(t1)*sin(t2) - 3108*cos(t1)*sin(t1)*sin(t2) - 1764*cos(t2)^2*sin(t1)^2 - 3108*cos(t2)*sin(t1)^2 1369*sin(t1)^2)^(1/2))/(37*sin(t1) - 10*PY + 42*cos(t1)*sin(t2) + 42*cos(t2)*sin(t1))) - t2 - t1) t4= (-acos(14/9*sin(t1)*sin(t2) - 14/9*cos(t1)*cos(t2) - 37/27*cos(t1) + 10/27*PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))) + 10/27*PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)))))+... (acos((14*sin(t1)*sin(t2))/9 - (14*cos(t1)*cos(t2))/9 (37*cos(t1))/27 + (10*PX*(cos(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2)) - sin(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1))))/27 + (10*PY*(cos(t3)*(cos(t1)*sin(t2) + cos(t2)*sin(t1)) + sin(t3)*(cos(t1)*cos(t2) - sin(t1)*sin(t2))))/27)) p_serial=input('ingresar el numero del puerto COM');%en esta parte seleccionamos el puerto por donde nos vamos a conectar s=serial('COM12');% toma el valor de la variable un numero que indicara el puerto %se guarda el valor de los ngulos calculados dato1=num2str(t1'); dato2=num2str(t2'); dato3=num2str(t3'); dato4=num2str(t4'); %se preparan los valores que sern transmitidos en una variable trama=[dato1,dato2,dato3,dato4]; %se guarda el tamao de los datos a transmitir t=whos('trama'); %se especifica el tamao de la salida de l set(s,'outputBufferSize',t.bytes); set(s,'BaudRate',9600);% se especifica la vellosidad de transmisin en baudios fopen(s);%se abre el puerto fprintf(s,'%s',trama);%se transmite la informacin fclose(s);%se cierra el puerto %un cambio que podemos hacer trabajar este programa con un for %pidiendo nuevos valores px, py y pz no mas lo hice para entender como %transmitir valores por el puerto serial msgbox('transmitida la trama');%se muestra un mensaje que nos avisa que los datos han sido transmitidos

Al final utilizamos un archivo de ex el que realiza el clculo de los agudos, optamos por usar este archivo para los clculos ya que la fuente es mas viable y el modelo matemtico es mas sencillo. Optamos por utilizar Visual Basic para realizar la interfaz.

Dentro de lo que es la interfas tubimos que considerar los pulsos de cada servomotor, por lo que tubimos que medir los angulos en los que puede girar cada serbomotor, para de esta manera, la instruccion no afectara el movimiento del manipulador, de esta manera podemos trabajar con las limitaciones del manipulador.

Los pulsos representan los grado al puede girar el servomotor, al conocer este rango hicimos una regla de tres, en este caso el rango es de 100 a 2500 pulsaciones, por lo que nuestra regla de tres es la siguiente:

donde i es el ngulo que limita al servomotor.

Bibliografa

La interfaz utilizada en el proyecto termino siendo una comunicacin en visual Basic, exel y el manipulador, en si el funcionamiento bsico fue el siguiente, en la interfas se ingresaba la coordenada, exel realiza los caculos, la regla de tres y regresa los datos a visual Basic la manda al manipulador.
Imports System Imports System.ComponentModel Imports System.Threading Imports System.IO.Ports Public Class frmMain Dim myPort As Array 'COM Ports detected on the system will be stored here Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box. myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available cmbBaud.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used cmbBaud.Items.Add(19200) cmbBaud.Items.Add(38400) cmbBaud.Items.Add(57600) cmbBaud.Items.Add(115200) For i = 0 To UBound(myPort) cmbPort.Items.Add(myPort(i)) Next cmbPort.Text = cmbPort.Items.Item(0) COM port detected cmbBaud.Text = cmbBaud.Items.Item(0) Baud rate on the list btnDisconnect.Enabled = False Disabled End Sub Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click SerialPort1.PortName = cmbPort.Text 'Set SerialPort1 to the selected COM port at startup SerialPort1.BaudRate = cmbBaud.Text 'Set Baud rate to the selected value on 'Other Serial Port Property SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 'Open our serial port SerialPort1.Open() btnConnect.Enabled = False btnDisconnect.Enabled = True End Sub Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click SerialPort1.Close() 'Close our Serial Port 'Disable Connect button 'and Enable Disconnect button

'Set cmbPort text to the first 'Set cmbBaud text to the first

'Initially Disconnect Button is

btnConnect.Enabled = True btnDisconnect.Enabled = False End Sub Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click SerialPort1.Write(txtTransmit.Text & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii 'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort End Sub Private Sub ReceivedText(ByVal [text] As String) 'compares the ID of the creating Thread to the ID of the calling Thread If Me.rtbReceived.InvokeRequired Then Dim x As New SetTextCallback(AddressOf ReceivedText) Me.Invoke(x, New Object() {(text)}) Else Me.rtbReceived.Text &= [text] End If End Sub Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged If SerialPort1.IsOpen = False Then SerialPort1.PortName = cmbPort.Text 'pop a message box to user if he is changing ports Else 'without disconnecting first. MsgBox("Valid only if port is Closed", vbCritical) End If End Sub Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBaud.SelectedIndexChanged If SerialPort1.IsOpen = False Then SerialPort1.BaudRate = cmbBaud.Text 'pop a message box to user if he is changing baud rate Else 'without disconnecting first. MsgBox("Valid only if port is Closed", vbCritical) End If End Sub Private Sub rtbReceived_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbReceived.TextChanged End Sub Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enviar.Click Dim oExcel As Object

Dim oBook As Object Dim oSheet As Object 'Abrir archivo de Excel oExcel = CreateObject("Excel.Application") oBook = oExcel.Workbooks.Open("C:\Users\Aaron\Desktop\Robotica Verano\Proyecto\ProyectoVB\SerialPortInterface\SerialPortInterface\inversek.xls")

'Mandar datos a Excel oSheet = oBook.Worksheets(1) oSheet.Range("K5").Value = Dato1.Text oSheet.Range("L5").Value = Dato2.Text oSheet.Range("U41").Value = Dato3.Text 'Leer datos de Excel Excel1.Text = oSheet.Range("V24").Value Excel2.Text = oSheet.Range("V25").Value Excel3.Text = oSheet.Range("V26").Value Excel4.Text = oSheet.Range("V41").Value txtEcuacion.Text = oSheet.Range("T36").Value 'Guardar/cerrar archivo oBook.Save() oExcel.Quit() End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Excel1.TextChanged End Sub Private Sub Limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Limpiar.Click Dato1.Text = " " Dato2.Text = " " Dato3.Text = " " Excel1.Text = " " Excel2.Text = " " Excel3.Text = " " Excel4.Text = " " End Sub Private Sub txtTransmit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTransmit.TextChanged End Sub Private Sub Abrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Abrir.Click SerialPort1.Write("#4P2500") End Sub Private Sub Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cerrar.Click

SerialPort1.Write("#4P100") End Sub Private Sub Label9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click End Sub Private Sub Excel5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SerialPort1.Write(txtEcuacion.Text) End Sub Private Sub Excel5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub End Class

Conclusin Se puede observar que los modelos matemticos utilizados en este proyecto no sean los mas ptimos ya que dejan ciertas dudas, como por ejemplo por que el eje z no influye dentro del modelo matemtico, por lo que es recomendable utilizar otros modelos matemticos, para respaldar los datos obtenidos. El modelo matemtico se torna un tanto complicado debido a que esta basado en movimientos rotacionales y no de movimientos prismticos. Al tener ausencia de movimientos prismticos se vuelve muy complicado calcular la posicin de z debido a que los servomotores giran en el eje z como centro, mientras que el prismtico se extiende por el eje z, por lo que este mtodo no resulta apto para este tipo de manipulador o no es el mas adecuado. Bibliografa http://www.lynxmotion.com/images/html/proj058.htm http://toyscaos.tripod.com/serial.html FRYE Jim, Manual de SSC-32, 18 de febrero del 2012 http://es.scribd.com/doc/41414292/S310185-Esp

También podría gustarte