Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope MODSERIAL
main.cpp@8:297208ebcfa6, 2018-11-01 (annotated)
- Committer:
- LennartvanHoorne
- Date:
- Thu Nov 01 08:47:02 2018 +0000
- Revision:
- 8:297208ebcfa6
- Parent:
- 7:9a389585a9e9
- Child:
- 9:24c0d83dec3c
ALLES WERKT :)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| LennartvanHoorne | 7:9a389585a9e9 | 1 | # define M_PI 3.14159265358979323846 /* pi */ |
| LennartvanHoorne | 7:9a389585a9e9 | 2 | |
| LennartvanHoorne | 0:4fc925102d99 | 3 | #include "math.h" |
| LennartvanHoorne | 7:9a389585a9e9 | 4 | #include "stdio.h" |
| LennartvanHoorne | 7:9a389585a9e9 | 5 | #include "iostream" |
| LennartvanHoorne | 0:4fc925102d99 | 6 | |
| LennartvanHoorne | 0:4fc925102d99 | 7 | // Constantes |
| LennartvanHoorne | 8:297208ebcfa6 | 8 | //L1 = 0.35; |
| LennartvanHoorne | 8:297208ebcfa6 | 9 | //L2 = 0.30; |
| LennartvanHoorne | 7:9a389585a9e9 | 10 | |
| LennartvanHoorne | 7:9a389585a9e9 | 11 | // Variables |
| LennartvanHoorne | 7:9a389585a9e9 | 12 | double V_q1; |
| LennartvanHoorne | 0:4fc925102d99 | 13 | |
| LennartvanHoorne | 7:9a389585a9e9 | 14 | double invj00; |
| LennartvanHoorne | 7:9a389585a9e9 | 15 | double invj01; |
| LennartvanHoorne | 7:9a389585a9e9 | 16 | double invj10; |
| LennartvanHoorne | 7:9a389585a9e9 | 17 | double invj11; |
| LennartvanHoorne | 5:205f1de452de | 18 | |
| LennartvanHoorne | 8:297208ebcfa6 | 19 | double vx; |
| LennartvanHoorne | 8:297208ebcfa6 | 20 | double vy; |
| LennartvanHoorne | 8:297208ebcfa6 | 21 | |
| LennartvanHoorne | 8:297208ebcfa6 | 22 | double T; |
| LennartvanHoorne | 8:297208ebcfa6 | 23 | |
| LennartvanHoorne | 7:9a389585a9e9 | 24 | double q1_new; |
| LennartvanHoorne | 1:f3afd35a7188 | 25 | |
| LennartvanHoorne | 0:4fc925102d99 | 26 | //Hoe werken de variabls? |
| LennartvanHoorne | 0:4fc925102d99 | 27 | // q1 en q2 komen uit de Encoder dus die worden geleverd |
| LennartvanHoorne | 0:4fc925102d99 | 28 | // This is the function for the Inverse Kinematics We start with a inverse Jacobian so we can determine q_dot (rotation speed of the motors) |
| LennartvanHoorne | 0:4fc925102d99 | 29 | |
| LennartvanHoorne | 7:9a389585a9e9 | 30 | void IK(double &q1, double &q2, double vx, double vy, double T) { |
| LennartvanHoorne | 0:4fc925102d99 | 31 | |
| LennartvanHoorne | 7:9a389585a9e9 | 32 | double Q2; |
| LennartvanHoorne | 7:9a389585a9e9 | 33 | double Q2_new; |
| LennartvanHoorne | 7:9a389585a9e9 | 34 | double V_Q2; |
| LennartvanHoorne | 7:9a389585a9e9 | 35 | |
| LennartvanHoorne | 7:9a389585a9e9 | 36 | Q2 = q2 + 90*(M_PI/180); |
| LennartvanHoorne | 7:9a389585a9e9 | 37 | |
| LennartvanHoorne | 7:9a389585a9e9 | 38 | invj00 = sin(q1 + Q2)/(0.35*cos(q1 + Q2)*sin(q1) - 0.35*sin(q1 + Q2)*cos(q1)); |
| LennartvanHoorne | 7:9a389585a9e9 | 39 | invj01 = -cos(q1 + Q2)/(0.35*cos(q1 + Q2)*sin(q1) - 0.35*sin(q1 + Q2)*cos(q1)); |
| LennartvanHoorne | 7:9a389585a9e9 | 40 | invj10 = -(0.3*sin(q1 + Q2) + 0.35*sin(q1))/(0.35*0.3*cos(q1 + Q2)*sin(q1) - 0.35*0.3*sin(q1 + Q2)*cos(q1)); |
| LennartvanHoorne | 7:9a389585a9e9 | 41 | invj11 = (0.3*cos(q1 + Q2) + 0.35*cos(q1))/(0.35*0.3*cos(q1 + Q2)*sin(q1) - 0.35*0.3*sin(q1 + Q2)*cos(q1)); |
| LennartvanHoorne | 7:9a389585a9e9 | 42 | |
| LennartvanHoorne | 7:9a389585a9e9 | 43 | V_q1 = invj00*vx + invj01*vy; |
| LennartvanHoorne | 7:9a389585a9e9 | 44 | V_Q2 = invj10*vx + invj11*vy; |
| LennartvanHoorne | 0:4fc925102d99 | 45 | |
| LennartvanHoorne | 1:f3afd35a7188 | 46 | // Numerical Integral to make it position controlled |
| LennartvanHoorne | 7:9a389585a9e9 | 47 | q1_new = q1 + V_q1*T; |
| LennartvanHoorne | 1:f3afd35a7188 | 48 | q1 = q1_new; |
| LennartvanHoorne | 7:9a389585a9e9 | 49 | Q2_new = Q2 + V_Q2*T; |
| LennartvanHoorne | 7:9a389585a9e9 | 50 | Q2 = Q2_new; |
| LennartvanHoorne | 7:9a389585a9e9 | 51 | |
| LennartvanHoorne | 7:9a389585a9e9 | 52 | q2 = Q2 - 90*(M_PI/180); |
| LennartvanHoorne | 1:f3afd35a7188 | 53 | } |
| LennartvanHoorne | 3:2a437a6ef149 | 54 | |
| LennartvanHoorne | 0:4fc925102d99 | 55 | |
| LennartvanHoorne | 6:0256de2854d6 | 56 | int main(){ |
| LennartvanHoorne | 7:9a389585a9e9 | 57 | // IK(r, a, q1, q2, vx, vy, T); |
| LennartvanHoorne | 7:9a389585a9e9 | 58 | double q1 = 0; |
| LennartvanHoorne | 7:9a389585a9e9 | 59 | double q2 = 0; |
| LennartvanHoorne | 7:9a389585a9e9 | 60 | double i; |
| LennartvanHoorne | 7:9a389585a9e9 | 61 | |
| LennartvanHoorne | 7:9a389585a9e9 | 62 | for(i = 0; i <= 30; i++) |
| LennartvanHoorne | 7:9a389585a9e9 | 63 | { |
| LennartvanHoorne | 7:9a389585a9e9 | 64 | IK(q1,q2, 0.05, 0, 0.1); |
| LennartvanHoorne | 7:9a389585a9e9 | 65 | printf("q1 = %f, q2 = %f\n",q1,q2); |
| LennartvanHoorne | 7:9a389585a9e9 | 66 | } |
| LennartvanHoorne | 3:2a437a6ef149 | 67 | } |