Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Quaternion calculation of error in each axis. Uses more memory.
- float rpy_desired[3];
- float q_desired[4];
- float q_error[4];
- float local_error[3];
- // Essentially zero errors for anything in rate or none
- if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_ROLL] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
- rpy_desired[0] = stabDesired.Roll;
- else
- rpy_desired[0] = attitudeActual.Roll;
- if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_PITCH] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
- rpy_desired[1] = stabDesired.Pitch;
- else
- rpy_desired[1] = attitudeActual.Pitch;
- if(stabDesired.StabilizationMode[STABILIZATIONDESIRED_STABILIZATIONMODE_YAW] == STABILIZATIONDESIRED_STABILIZATIONMODE_ATTITUDE)
- rpy_desired[2] = stabDesired.Yaw;
- else
- rpy_desired[2] = attitudeActual.Yaw;
- RPY2Quaternion(rpy_desired, q_desired);
- quat_inverse(q_desired);
- quat_mult(q_desired, &attitudeActual.q1, q_error);
- quat_inverse(q_error);
- Quaternion2RPY(q_error, local_error);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement