Inverse_kinematica

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
AnkePost
Date:
Tue Oct 29 16:44:08 2019 +0000
Revision:
6:c550e499896f
Parent:
5:ac4b1c0366b3
Inverse kinematica

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobertoO 0:67c50348f842 1 #include "mbed.h"
AnkePost 3:710f993d5848 2 #define M_PI 3.14159265358979323846 /* pi */
WiesjeRoskamp 2:aee655d11b6d 3 #include <math.h>
RobertoO 0:67c50348f842 4
AnkePost 4:739136c479bd 5 double vx; //Gelijk aan variabele die snelheid aangeeft in EMG (in x-richting)
AnkePost 4:739136c479bd 6 double vy; //Gelijk aan variabele die snelheid aangeeft in EMG (in y-richting)
AnkePost 4:739136c479bd 7
AnkePost 5:ac4b1c0366b3 8 double Joint_1_position_x;
AnkePost 5:ac4b1c0366b3 9 double Joint_2_position_x;
AnkePost 5:ac4b1c0366b3 10
AnkePost 4:739136c479bd 11 double Joint_velocity_x[2][1];
AnkePost 4:739136c479bd 12 double Joint_velocity_y[2][1];
AnkePost 4:739136c479bd 13
AnkePost 5:ac4b1c0366b3 14
AnkePost 4:739136c479bd 15 // Defining motor angles
AnkePost 4:739136c479bd 16 double M1 = 20*M_PI/180; //Vervang 20 door encoder_value_motor_1 (deg), de naam die is gegeven aan hoek die uit encoder counts is gekomen, current encoder position
AnkePost 4:739136c479bd 17 double M2 = 30*M_PI/180; //Zelfde als hierboven, current encoder position
AnkePost 4:739136c479bd 18
AnkePost 4:739136c479bd 19 // Calculating joint angles based on motor angles (current encoder values)
AnkePost 4:739136c479bd 20 double q1 = M1; //Relative angle joint 1 (rad)
AnkePost 4:739136c479bd 21 double q2 = M2 - M1; //Relative angle joint 2 (rad)
WiesjeRoskamp 2:aee655d11b6d 22
AnkePost 3:710f993d5848 23 void Inverse_Kinematics()
WiesjeRoskamp 2:aee655d11b6d 24 {
AnkePost 4:739136c479bd 25 // Defining joint velocities based om calculations of matlab
WiesjeRoskamp 2:aee655d11b6d 26
AnkePost 4:739136c479bd 27 Joint_velocity_x[0][0] = (vx*(exp(q2*sqrt(-1.0))*(-1.798599718146044E18+6.546367607647411E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*(-1.798599718146044E18-6.546367607647411E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*(1.168095770314175E18+1.321169505615574E18*sqrt(-1.0))+exp(q1*sqrt(-1.0))*exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*3.828059683264922E18+1.168095770314175E18-1.321169505615574E18*sqrt(-1.0))*(2.0E1/1.7E1))/(cos(q1+3.141592653589793/9.0)*(6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))+sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17+6.605847528077872E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17-3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17+3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17-6.605847528077872E17*sqrt(-1.0)));
AnkePost 4:739136c479bd 28 Joint_velocity_x[1][0] = (vx*(exp(q2*sqrt(-1.0))*(1.798599718146044E18-6.546367607647411E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*(1.798599718146044E18+6.546367607647411E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*(-1.168095770314175E18-1.321169505615574E18*sqrt(-1.0))+-1.168095770314175E18+1.321169505615574E18*sqrt(-1.0))*(2.0E1/1.7E1))/(cos(q1+3.141592653589793/9.0)*(6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))+sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17+6.605847528077872E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17-3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17+3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17-6.605847528077872E17*sqrt(-1.0)));
RobertoO 0:67c50348f842 29
AnkePost 4:739136c479bd 30 Joint_velocity_y[0][0] = (vy*(exp(q2*sqrt(-1.0))*(-3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*(-3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*(6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))+exp(q1*sqrt(-1.0))*exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*1.914029841632461E18+6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))*(4.0E1/1.7E1))/(cos(q1+3.141592653589793/9.0)*(6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))+sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17+6.605847528077872E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17-3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17+3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17-6.605847528077872E17*sqrt(-1.0)));
AnkePost 4:739136c479bd 31 Joint_velocity_y[1][0] = (vy*(exp(q2*sqrt(-1.0))*(3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*(3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*(-6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))+-6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))*(4.0E1/1.7E1))/(cos(q1+3.141592653589793/9.0)*(6.605847528077872E17+5.840478851570874E17*sqrt(-1.0))+sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17+6.605847528077872E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17-8.992998590730221E17*sqrt(-1.0))+exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17-3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(-3.273183803823705E17+8.992998590730221E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*cos(q1+3.141592653589793/9.0)*(6.605847528077872E17-5.840478851570874E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(8.992998590730221E17+3.273183803823705E17*sqrt(-1.0))+exp(q1*2.0*sqrt(-1.0))*exp(q2*2.0*sqrt(-1.0))*sin(q1+3.141592653589793/9.0)*(-5.840478851570874E17-6.605847528077872E17*sqrt(-1.0)));
AnkePost 4:739136c479bd 32
AnkePost 4:739136c479bd 33 // Integratie
AnkePost 4:739136c479bd 34 Joint_1_position_x = Joint_1_position_x + Joint_velocity_x[0][0]*delta_t;
AnkePost 4:739136c479bd 35 Joint_2_position_x = Joint_2_position_x + Joint_velocity_x[1][0]*delta_t;
AnkePost 3:710f993d5848 36
AnkePost 4:739136c479bd 37 Joint1_position_y = Joint_1_position_y + Joint_velocity_y[0][0]*delta_t;
AnkePost 4:739136c479bd 38 Joint2_position_y = Joint_2_position_y + Joint_velocity_y[1][0]*delta_t;
AnkePost 3:710f993d5848 39
AnkePost 4:739136c479bd 40 double Motor_1_velocity_x = Joint_velocity_x[0][0];
AnkePost 4:739136c479bd 41 double Motor_2_velocity_x = Joint_velocity_x[0][0] + Joint_velocity_x[1][0];
AnkePost 3:710f993d5848 42
AnkePost 4:739136c479bd 43 double Motor_1_velocity_y = Joint_velocity_y[0][0];
AnkePost 4:739136c479bd 44 double Motor_2_velocity_y = Joint_velocity_y[0][0] + Joint_velocity_y[1][0];
AnkePost 4:739136c479bd 45
AnkePost 3:710f993d5848 46 }
RobertoO 0:67c50348f842 47
RobertoO 0:67c50348f842 48 int main()
RobertoO 0:67c50348f842 49 {
AnkePost 4:739136c479bd 50 Inverse_Kinematics ();
RobertoO 0:67c50348f842 51 }
WiesjeRoskamp 2:aee655d11b6d 52
WiesjeRoskamp 2:aee655d11b6d 53
WiesjeRoskamp 2:aee655d11b6d 54
WiesjeRoskamp 2:aee655d11b6d 55