Skip to content

Commit

Permalink
mod: rot control on yaw TEST
Browse files Browse the repository at this point in the history
  • Loading branch information
eigen-value committed Jan 9, 2025
1 parent 2419a35 commit 1dae7ec
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/Arduino_AlvikCarrier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,8 @@ void Arduino_AlvikCarrier::updateKinematics(){
kinematics->updatePose();
if (kinematics_movement!=MOVEMENT_DISABLED){
if (kinematics_movement==MOVEMENT_ROTATE){
rotate_pid->update(kinematics->getTheta());
//rotate_pid->update(kinematics->getTheta());
rotate_pid->update(getYaw());
drive(0, round(rotate_pid->getControlOutput()/10.0)*10);
if (abs(rotate_pid->getError())<ROTATE_THRESHOLD){
kinematics_achieved=true;
Expand Down Expand Up @@ -929,7 +930,8 @@ void Arduino_AlvikCarrier::rotate(const float angle){
disableKinematicsMovement();
kinematics_achieved=false;
rotate_pid->reset();
rotate_pid->setReference(kinematics->getTheta()+angle);
//rotate_pid->setReference(kinematics->getTheta()+angle);
rotate_pid->setReference(kinematics->normalizeAngle(getYaw() + angle));
kinematics_movement=MOVEMENT_ROTATE;
}

Expand Down
10 changes: 10 additions & 0 deletions src/robotics/kinematics.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,16 @@ class Kinematics{
}
*/

float normalizeAngle(float angle) {
angle = angle - 360.0f * floor(angle / 360.0f);

if (angle < 0) {
angle += 360.0f;
}

return angle;
}

void updatePose(){
delta_theta=angular_velocity*control_period;
sin_theta = sin(theta);
Expand Down

0 comments on commit 1dae7ec

Please sign in to comment.