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: MX12 ServoRingBuffer mbed-src
Fork of SpindleBot by
Diff: main.cpp
- Revision:
- 12:560dc69d4ca4
- Parent:
- 11:53408545bbb4
- Child:
- 13:6a0a7a04fd91
diff -r 53408545bbb4 -r 560dc69d4ca4 main.cpp
--- a/main.cpp Tue May 12 21:37:21 2015 +0000
+++ b/main.cpp Mon Jul 20 17:12:36 2015 +0000
@@ -59,8 +59,8 @@
DigitalOut led4(LED4); //Led 4 for debugging purposes
DigitalOut triggerOut(p11);
Serial pc(USBTX, USBRX); //Set up serial connection to pc
-AnalogIn AinLeftForce(p16); //Set up potentiometer on pin 20
-AnalogIn AinRightForce(p15); //Set up potentiometer on pin 20
+AnalogIn AinLeftForce(p16); //Set up left load cell on pin 16
+AnalogIn AinRightForce(p15);//Set up right load cell on pin 15
// Specific to bluetooth
#ifdef USE_BLUETOOTH
@@ -96,6 +96,7 @@
bool g_we_are_grasping=false;
#define CALIBRATION_READS 200.0
float g_calibration_offset = 8600000.0;
+float integral_err = 0.0;
// Values at first touch
int g_masterPositionFirstTouch = 2400;
@@ -114,7 +115,8 @@
// 0.00652545188345528,
// 6.75893262890734,
// -0.00228098997419065};
-// Zero-Offset Magic Numbers
+
+/////////// Zero-Offset Magic Numbers courtesy Rod//////////////
float Phi1[5] = {-1.80212053214826e-08,
1.69579390650964e-06,
0.000592679062823746,
@@ -131,7 +133,7 @@
//float entry_threshold=8.70e6;
float velocity_threshold=-0.01;
-float g_thresh_force[NUMBER_OF_TISSUES]={0.12e6,0.08e6};
+float g_thresh_force[NUMBER_OF_TISSUES]={0.16e6,0.06e6};
///////////Magic numbers courtesy Rod///////////////
int g_command_corrected;
@@ -406,6 +408,9 @@
// short right_servo=percent*(CLOSED_SERVO_ANGLE_RIGHT-OPEN_SERVO_ANGLE_RIGHT)+OPEN_SERVO_ANGLE_RIGHT;
//
// g_input_pot_1=left_servo;
+ // Set limits on the max and min value of the grasper (for safety reasons)
+ if (g_command_corrected < 1900){g_command_corrected = 1900;};
+ if (g_command_corrected > 2900){g_command_corrected = 2900;};
short left_servo =g_command_corrected;
short right_servo=g_command_corrected;
@@ -554,7 +559,7 @@
//wait_ms(1000);
- //calibrateLoadCell();
+ //calibrateLoadCell(); // This function did not work as well as having it in the main loop
while(1)
{
// spin in a main loop. serialISR will interrupt it to call serialPot
@@ -723,6 +728,7 @@
//Grasp is over
g_error_norm[0] = 0;
g_error_norm[1] = 0;
+ integral_err = 0.0;
g_we_are_grasping=false;
}
float alpha=0;
@@ -738,13 +744,22 @@
int tissue_id=0;
if(g_error_norm[1]>g_error_norm[0]){alpha=(g_error_norm[1]-g_error_norm[0])/(g_error_norm[1]+offset1);sstr="HARD";tissue_id=0;}
if(g_error_norm[0]>g_error_norm[1]){alpha=(g_error_norm[0]-g_error_norm[1])/(g_error_norm[0]+offset2);sstr="SOFT";tissue_id=1;}
- alpha += 0.35;
+ alpha += 0.15;
if (alpha > 1.0){alpha = 1.0;}
float force_err=loadcell_offset-g_thresh_force[tissue_id];
- float k = 10.0/0.1e6;
- if (tissue_id == 0){k=10.0/0.1e6;}
- if (tissue_id == 1){k=100.0/0.1e6;}
- g_command_corrected=(1-alpha)*potread+alpha*(k*force_err+angle);
+ integral_err = integral_err + force_err;
+ float current_time = mytimer.read_us()/1000.0;
+ float dt = 39.0; //Change to a real approach later
+ float kp = 10.0/0.1e6;
+ float ki = 10.0/0.1e8;
+ if (tissue_id == 0){kp=10.0/0.1e6;}
+ if (tissue_id == 1){kp=100.0/0.1e6;}
+ // Collaborative Mode
+ g_command_corrected=(1-alpha)*potread+alpha*(kp*force_err+ki*integral_err*dt+angle);
+ // Fully Autonomous Mode
+ //g_command_corrected=(kp*force_err+angle);
+ // Fully Manual Mode
+ //g_command_corrected = potread;
}else{
g_command_corrected=potread;
}
