Algorithm for a five bar mechanism which transfers the position of the end effector to a set of angles for the DC motors.

Dependencies:   mbed

Fork of position2angle by Yannick Buser

Files at this revision

API Documentation at this revision

Comitter:
ymbuser
Date:
Mon Oct 19 08:59:09 2015 +0000
Commit message:
Shoot function for a five bar mechanism

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Oct 19 08:59:09 2015 +0000
@@ -0,0 +1,55 @@
+#include "mbed.h"
+
+// >>>>> FUNCTION DEFINITION <<<<<
+// Input van deze library is de huidige (x,y)-positie van de pod. Hierdoor wordt een 
+// reeks hoeken verkregen waardoor de robot een schietbeweging in y-richting uitvoerd. 
+// Voor verdere informatie: zie verslag of MATLAB script.
+
+
+
+
+
+
+// temp NOG IN TE VOEREN!!!!!
+double x = 1;
+double y = 1;
+const double y_punch = 0.473;
+
+
+
+
+
+
+
+// >>>>> INITIALISTIONS <<<<<
+const double bar1 = 0.260; // length bar 1 [m]
+const double bar2 = 0.342; // length bar 2 [m]
+const double base_spacing = 0.10559; // spacing between the DC-motors [m]
+const double pi = 3.1415926535897;
+
+int main()
+{
+double virt_bar_left = sqrt(pow(x+0.5*base_spacing,2) + pow(y,2));
+double virt_bar_right = sqrt(pow(x-0.5*base_spacing,2) + pow(y,2));
+double virt_bar_ref = sqrt(pow(bar2,2)- pow(bar1,2));
+
+// >>>>> LEFT ARM <<<<<
+double d2_square = pow(bar1,2) - pow((pow(virt_bar_left,2) + pow(bar1,2) - pow(bar2,2))/(-2*virt_bar_left),2);
+double d2 = sqrt(d2_square);
+double phi;
+if (virt_bar_left < virt_bar_ref)
+    phi = pi-asin(d2/bar1);
+else
+    phi = asin(d2/bar1);
+    
+double theta_l = pi - phi - acos((x + 0.5*base_spacing)/virt_bar_left);
+
+// >>>>> RIGHT ARM <<<<<
+d2_square = pow(bar1,2) - pow((pow(virt_bar_right,2) + pow(bar1,2) - pow(bar2,2))/(-2*virt_bar_right),2);
+d2 = sqrt(d2_square);
+if (virt_bar_right < virt_bar_ref)
+    phi = pi-asin(d2/bar1);
+else
+    phi = asin(d2/bar1);
+double theta_r = phi + acos((x - 0.5*base_spacing)/virt_bar_right);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Oct 19 08:59:09 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68
\ No newline at end of file