Skip to content

Commit c695dd2

Browse files
committed
kinematics now returns the state
1 parent 75b0efc commit c695dd2

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

src/Arduino_AlvikCarrier.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ Arduino_AlvikCarrier::Arduino_AlvikCarrier(){
7676
// kinematics
7777
kinematics = new Kinematics(WHEEL_TRACK_MM, WHEEL_DIAMETER_MM);
7878
kinematics_movement = 0;
79+
kinematics_achieved = false;
7980
rotate_pid = new PidController(ROTATE_KP_DEFAULT, ROTATE_KI_DEFAULT, ROTATE_KD_DEFAULT, ROTATE_CONTROL_PERIOD, ROTATE_MAX_SPEED);
8081

8182
}
@@ -704,11 +705,12 @@ void Arduino_AlvikCarrier::rotate(const float angle){
704705
rotate_pid->reset();
705706
rotate_pid->setReference(kinematics->getTheta()+angle);
706707
kinematics_movement=1;
708+
kinematics_achieved=false;
707709
}
708710

709711

710712

711-
void Arduino_AlvikCarrier::move(const float distance){
713+
void Arduino_AlvikCarrier::lockingMove(const float distance){
712714
float initial_travel = kinematics->getTravel();
713715
float final_travel = abs(distance)+initial_travel;
714716
float error = abs(distance);
@@ -735,7 +737,10 @@ void Arduino_AlvikCarrier::move(const float distance){
735737
}
736738

737739

738-
740+
void Arduino_AlvikCarrier::move(const float distance){
741+
move_pid->reset();
742+
//move_pid->setReference()
743+
}
739744

740745
void Arduino_AlvikCarrier::updateKinematics(){
741746
kinematics->inverse(motor_control_left->getRPM(), motor_control_right->getRPM());
@@ -744,10 +749,17 @@ void Arduino_AlvikCarrier::updateKinematics(){
744749
if (kinematics_movement==1){
745750
rotate_pid->update(kinematics->getTheta());
746751
drive(0,round(rotate_pid->getControlOutput()/10.0)*10);
752+
if (abs(rotate_pid->getError())<ROTATE_THREASHOLD){
753+
kinematics_achieved=true;
754+
}
747755
}
748756
}
749757
}
750758

751759
void Arduino_AlvikCarrier::disableKinematicsMovement(){
752760
kinematics_movement=0;
753761
}
762+
763+
bool Arduino_AlvikCarrier::isTargetReached(){
764+
return kinematics_achieved;
765+
}

src/Arduino_AlvikCarrier.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class Arduino_AlvikCarrier{
7272
uint8_t kinematics_movement;
7373
PidController * rotate_pid;
7474
PidController * move_pid;
75+
bool kinematics_achieved;
7576

7677

7778

@@ -220,8 +221,10 @@ class Arduino_AlvikCarrier{
220221

221222

222223
void lockingRotate(const float angle);
224+
void lockingMove(const float distance); // move of distance millimeters
223225

224226
void disableKinematicsMovement();
227+
bool isTargetReached();
225228

226229

227230
};

src/definitions/robot_definitions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const float MOTOR_RATIO = MOTOR_CPR*MOTOR_GEAR_RATIO;
3939
#define ROTATE_KD_DEFAULT 0.001
4040
#define ROTATE_CONTROL_PERIOD 0.02
4141
#define ROTATE_MAX_SPEED 45
42+
#define ROTATE_THREASHOLD 3
4243

4344

4445

0 commit comments

Comments
 (0)