@@ -669,12 +669,27 @@ void Arduino_AlvikCarrier::errorLed(const int error_code){
669
669
/* Kinematics */
670
670
/* *****************************************************************************************************/
671
671
672
-
673
-
674
-
675
-
676
-
677
-
672
+ void Arduino_AlvikCarrier::updateKinematics (){
673
+ kinematics->inverse (motor_control_left->getRPM (), motor_control_right->getRPM ());
674
+ kinematics->updatePose ();
675
+ if (kinematics_movement!=MOVEMENT_DISABLED){
676
+ if (kinematics_movement==MOVEMENT_ROTATE){
677
+ rotate_pid->update (kinematics->getTheta ());
678
+ drive (0 , round (rotate_pid->getControlOutput ()/10.0 )*10 );
679
+ if (abs (rotate_pid->getError ())<ROTATE_THREASHOLD){
680
+ kinematics_achieved=true ;
681
+ }
682
+ }
683
+ if (kinematics_movement==MOVEMENT_MOVE){
684
+ move_pid->update ((kinematics->getTravel ()-previous_travel)*move_direction);
685
+ drive (round (move_pid->getControlOutput ()/10.0 )*10 , 0 );
686
+ if (abs (move_pid->getError ())<MOVE_THREADSHOLD){
687
+ kinematics_achieved=true ;
688
+ }
689
+
690
+ }
691
+ }
692
+ }
678
693
679
694
void Arduino_AlvikCarrier::drive (const float linear, const float angular){
680
695
kinematics->forward (linear, angular);
@@ -689,7 +704,6 @@ float Arduino_AlvikCarrier::getAngularVelocity(){
689
704
return kinematics->getAngularVelocity ();
690
705
}
691
706
692
-
693
707
void Arduino_AlvikCarrier::lockingRotate (const float angle){
694
708
float initial_angle = kinematics->getTheta ();
695
709
float final_angle = angle+initial_angle;
@@ -715,16 +729,13 @@ void Arduino_AlvikCarrier::lockingRotate(const float angle){
715
729
motor_control_right->brake ();
716
730
}
717
731
718
-
719
732
void Arduino_AlvikCarrier::rotate (const float angle){
720
733
rotate_pid->reset ();
721
734
rotate_pid->setReference (kinematics->getTheta ()+angle);
722
735
kinematics_movement=MOVEMENT_ROTATE;
723
736
kinematics_achieved=false ;
724
737
}
725
738
726
-
727
-
728
739
void Arduino_AlvikCarrier::lockingMove (const float distance){
729
740
float initial_travel = kinematics->getTravel ();
730
741
float final_travel = abs (distance)+initial_travel;
@@ -751,7 +762,6 @@ void Arduino_AlvikCarrier::lockingMove(const float distance){
751
762
motor_control_right->brake ();
752
763
}
753
764
754
-
755
765
void Arduino_AlvikCarrier::move (const float distance){
756
766
move_pid->reset ();
757
767
previous_travel=kinematics->getTravel ();
@@ -767,28 +777,6 @@ void Arduino_AlvikCarrier::move(const float distance){
767
777
kinematics_achieved=false ;
768
778
}
769
779
770
- void Arduino_AlvikCarrier::updateKinematics (){
771
- kinematics->inverse (motor_control_left->getRPM (), motor_control_right->getRPM ());
772
- kinematics->updatePose ();
773
- if (kinematics_movement!=MOVEMENT_DISABLED){
774
- if (kinematics_movement==MOVEMENT_ROTATE){
775
- rotate_pid->update (kinematics->getTheta ());
776
- drive (0 , round (rotate_pid->getControlOutput ()/10.0 )*10 );
777
- if (abs (rotate_pid->getError ())<ROTATE_THREASHOLD){
778
- kinematics_achieved=true ;
779
- }
780
- }
781
- if (kinematics_movement==MOVEMENT_MOVE){
782
- move_pid->update ((kinematics->getTravel ()-previous_travel)*move_direction);
783
- drive (round (move_pid->getControlOutput ()/10.0 )*10 , 0 );
784
- if (abs (move_pid->getError ())<MOVE_THREADSHOLD){
785
- kinematics_achieved=true ;
786
- }
787
-
788
- }
789
- }
790
- }
791
-
792
780
void Arduino_AlvikCarrier::disableKinematicsMovement (){
793
781
kinematics_movement=MOVEMENT_DISABLED;
794
782
}
0 commit comments