File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed
Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -842,7 +842,8 @@ void Arduino_AlvikCarrier::updateKinematics(){
842842 kinematics->updatePose ();
843843 if (kinematics_movement!=MOVEMENT_DISABLED){
844844 if (kinematics_movement==MOVEMENT_ROTATE){
845- rotate_pid->update (kinematics->getTheta ());
845+ // rotate_pid->update(kinematics->getTheta());
846+ rotate_pid->update (getYaw ());
846847 drive (0 , round (rotate_pid->getControlOutput ()/10.0 )*10 );
847848 if (abs (rotate_pid->getError ())<ROTATE_THRESHOLD){
848849 kinematics_achieved=true ;
@@ -929,7 +930,8 @@ void Arduino_AlvikCarrier::rotate(const float angle){
929930 disableKinematicsMovement ();
930931 kinematics_achieved=false ;
931932 rotate_pid->reset ();
932- rotate_pid->setReference (kinematics->getTheta ()+angle);
933+ // rotate_pid->setReference(kinematics->getTheta()+angle);
934+ rotate_pid->setReference (kinematics->normalizeAngle (getYaw () + angle));
933935 kinematics_movement=MOVEMENT_ROTATE;
934936}
935937
Original file line number Diff line number Diff line change @@ -153,6 +153,16 @@ class Kinematics{
153153 }
154154 */
155155
156+ float normalizeAngle (float angle) {
157+ angle = angle - 360 .0f * floor (angle / 360 .0f );
158+
159+ if (angle < 0 ) {
160+ angle += 360 .0f ;
161+ }
162+
163+ return angle;
164+ }
165+
156166 void updatePose (){
157167 delta_theta=angular_velocity*control_period;
158168 sin_theta = sin (theta);
You can’t perform that action at this time.
0 commit comments