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 QEI biquadFilter mbed Servo
help_functions/kinematics.h@29:d1e8eb135e6c, 2018-10-29 (annotated)
- Committer:
- bjonkheer
- Date:
- Mon Oct 29 15:20:50 2018 +0000
- Revision:
- 29:d1e8eb135e6c
- Parent:
- 23:7d83af123c43
- Child:
- 31:393a7ec1d396
Encoder calibration almost finished;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MaikOvermars | 0:4cb1de41d049 | 1 | #include "mbed.h" |
MaikOvermars | 0:4cb1de41d049 | 2 | |
bjonkheer | 19:e1e18746d98d | 3 | double L_ua = 0.5; //upper arm |
bjonkheer | 19:e1e18746d98d | 4 | double L_la = 0.7; //lower arm, attached to the end effector |
bjonkheer | 19:e1e18746d98d | 5 | double x01 = 0.0; |
bjonkheer | 19:e1e18746d98d | 6 | double y01 = 0.2; //height base joint |
MaikOvermars | 0:4cb1de41d049 | 7 | |
SvenD97 | 14:4744cc6c90f4 | 8 | void forwardkinematics_function(double& q1, double& q2, double& x, double& y) { |
MaikOvermars | 0:4cb1de41d049 | 9 | // input are joint angles, output are x and y position of end effector |
bjonkheer | 22:31065a83d9e8 | 10 | |
bjonkheer | 29:d1e8eb135e6c | 11 | x = x01 + L_ua * cos(q1) - L_la * cos(q2); |
bjonkheer | 29:d1e8eb135e6c | 12 | y = y01 + L_ua * sin(q1) - L_la * sin(q2); |
bjonkheer | 19:e1e18746d98d | 13 | |
bjonkheer | 22:31065a83d9e8 | 14 | |
MaikOvermars | 0:4cb1de41d049 | 15 | } |
MaikOvermars | 0:4cb1de41d049 | 16 | |
MaikOvermars | 17:1f93c83e211f | 17 | void inversekinematics_function(double &x, double &y, const double &T, double &qref1, double &qref2, double &q1, double &q2, double &des_vx, double &des_vy) { |
MaikOvermars | 17:1f93c83e211f | 18 | // input is desired x and y velocity, output reference angles |
MaikOvermars | 17:1f93c83e211f | 19 | // reference angle spees are calculated using the inverse of jacobian |
MaikOvermars | 17:1f93c83e211f | 20 | // from the reference angle speeds the reference angles are computed |
SvenD97 | 13:397b7c22475c | 21 | |
SvenD97 | 8:bba05e863b68 | 22 | double q1_star_des; // desired joint velocity of q1_star |
SvenD97 | 8:bba05e863b68 | 23 | double q2_star_des; // same as above but then for q2_star |
SvenD97 | 13:397b7c22475c | 24 | |
SvenD97 | 9:8e1112874c12 | 25 | // The calculation below assumes that the end effector position is calculated before this function is executed |
SvenD97 | 13:397b7c22475c | 26 | // In our case the determinant will not equal zero, hence no problems with singularies I think. |
SvenD97 | 13:397b7c22475c | 27 | q1_star_des = 1/(L1*(-x*sin(q1)-(-y+y01)*cos(q1)))*(-1*(-x+L1*cos(q1))*des_vx-x*des_vy); |
MaikOvermars | 16:0280a604cf7e | 28 | q2_star_des = 1/(L1*(-x*sin(q1)-(-y+y01)*cos(q1)))*(-1*(-y+y01+L1*sin(q1))*des_vx+1*(-y+y01)*des_vy); |
SvenD97 | 7:b77f2201b156 | 29 | |
SvenD97 | 13:397b7c22475c | 30 | qref1 = q1+T*q1_star_des; // Yet to adapt all these equations |
SvenD97 | 13:397b7c22475c | 31 | qref2 = q2+T*(q2_star_des - q1_star_des); |
MaikOvermars | 0:4cb1de41d049 | 32 | } |