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: TSI USBDevice mbed-dev
Fork of SmartWheels by
Diff: main.cpp
- Revision:
- 72:b8f2eebc8912
- Parent:
- 71:5601d2faa61d
--- a/main.cpp Fri Apr 14 18:58:28 2017 +0000
+++ b/main.cpp Sun Apr 16 19:50:50 2017 +0000
@@ -65,7 +65,6 @@
servo_set_angle(0.0f);
float speedRatio = 1.0f;
- float lastAngle = 0.0f;
float lastAngleAbs = 0.0f;
float cornerRatio = 1.0f;
@@ -131,6 +130,7 @@
totalAngleDegrees = ((-0.1f) * totalAngleDegrees);// + ((0.2f) * lastAngle);
}
LOGI("%d %5.3f ", centerLine[2 * CAM_ROI_UPPER_LIMIT - 1], totalAngleDegrees);
+
servo_set_angle(totalAngleDegrees);
@@ -141,7 +141,7 @@
if(totalAngleDegreesAbs > lastAngleAbs)
{
- cornerRatio = 0.5;//(lastAngle / totalAngleDegrees);
+ cornerRatio = 0.3;//(lastAngleAbs / totalAngleDegreesAbs);
}
else if(totalAngleDegreesAbs < lastAngleAbs)
{
@@ -152,36 +152,44 @@
cornerRatio = 1.0f;
}
- if(totalAngleDegreesAbs > 18.0f)
+ if(totalAngleDegreesAbs > 20.0f)
{
- speedRatio = 0.90f;
+ speedRatio = 0.70f;
+ }
+ else if(totalAngleDegreesAbs > 18.0f)
+ {
+ speedRatio = 0.80f;
}
else if(totalAngleDegreesAbs > 15.0f)
{
- speedRatio = 0.94f;
+ speedRatio = 0.85f;
}
else if(totalAngleDegreesAbs > 12.0f)
{
- speedRatio = 0.98f;
+ speedRatio = 0.90f;
}
else
{
speedRatio = 1.0f;
}
+ float diffRatio = ((MOTOR_DIFF_MIN_SPEED) + ((1.0f - MOTOR_DIFF_MIN_SPEED) * ((SERVO_MAX_ANGLE - abs(totalAngleDegrees)) / SERVO_MAX_ANGLE)));
+ if(totalAngleDegreesAbs > 20.0f)
+ {
+ diffRatio = -0.9f * diffRatio;
+ }
if(totalAngleDegrees < 0.0f)
{
- motor_set_left_speed(speedRatio * cornerRatio * ((MOTOR_DIFF_MIN_SPEED) + ((1.0f - MOTOR_DIFF_MIN_SPEED) * ((SERVO_MAX_ANGLE - abs(totalAngleDegrees)) / SERVO_MAX_ANGLE))));
+ motor_set_left_speed(speedRatio * cornerRatio * diffRatio);
motor_set_right_speed(speedRatio * cornerRatio * 1.0f);
}
else
{
- motor_set_right_speed(speedRatio * cornerRatio * ((MOTOR_DIFF_MIN_SPEED) + ((1.0f - MOTOR_DIFF_MIN_SPEED) * ((SERVO_MAX_ANGLE - abs(totalAngleDegrees)) / SERVO_MAX_ANGLE))));
+ motor_set_right_speed(speedRatio * cornerRatio * diffRatio);
motor_set_left_speed(speedRatio * cornerRatio * 1.0f);
}
-
- lastAngle = totalAngleDegrees;
+
lastAngleAbs = totalAngleDegreesAbs;
}
}
