@@ -669,12 +669,27 @@ void Arduino_AlvikCarrier::errorLed(const int error_code){
669669/* Kinematics */
670670/* *****************************************************************************************************/
671671
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+ }
678693
679694void Arduino_AlvikCarrier::drive (const float linear, const float angular){
680695 kinematics->forward (linear, angular);
@@ -689,7 +704,6 @@ float Arduino_AlvikCarrier::getAngularVelocity(){
689704 return kinematics->getAngularVelocity ();
690705}
691706
692-
693707void Arduino_AlvikCarrier::lockingRotate (const float angle){
694708 float initial_angle = kinematics->getTheta ();
695709 float final_angle = angle+initial_angle;
@@ -715,16 +729,13 @@ void Arduino_AlvikCarrier::lockingRotate(const float angle){
715729 motor_control_right->brake ();
716730}
717731
718-
719732void Arduino_AlvikCarrier::rotate (const float angle){
720733 rotate_pid->reset ();
721734 rotate_pid->setReference (kinematics->getTheta ()+angle);
722735 kinematics_movement=MOVEMENT_ROTATE;
723736 kinematics_achieved=false ;
724737}
725738
726-
727-
728739void Arduino_AlvikCarrier::lockingMove (const float distance){
729740 float initial_travel = kinematics->getTravel ();
730741 float final_travel = abs (distance)+initial_travel;
@@ -751,7 +762,6 @@ void Arduino_AlvikCarrier::lockingMove(const float distance){
751762 motor_control_right->brake ();
752763}
753764
754-
755765void Arduino_AlvikCarrier::move (const float distance){
756766 move_pid->reset ();
757767 previous_travel=kinematics->getTravel ();
@@ -767,28 +777,6 @@ void Arduino_AlvikCarrier::move(const float distance){
767777 kinematics_achieved=false ;
768778}
769779
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-
792780void Arduino_AlvikCarrier::disableKinematicsMovement (){
793781 kinematics_movement=MOVEMENT_DISABLED;
794782}
0 commit comments