1616#include " SettingsManager.h"
1717#include " Vehicle.h"
1818
19- #include < QtGui/QQuaternion>
20-
2119QGC_LOGGING_CATEGORY (GimbalControllerLog, " Gimbal.GimbalController" )
2220
2321GimbalController::GimbalController(Vehicle *vehicle)
@@ -236,25 +234,15 @@ void GimbalController::_handleGimbalDeviceAttitudeStatus(const mavlink_message_t
236234 gimbal->setYawLock ((attitude_status.flags & GIMBAL_DEVICE_FLAGS_YAW_LOCK) > 0 );
237235 gimbal->_neutral = (attitude_status.flags & GIMBAL_DEVICE_FLAGS_NEUTRAL) > 0 ;
238236
239- // Convert from QQuaternion to Euler angles. We specifically don't use mavlink_quaternion_to euler
240- // because that seems to spew NaNs for boundary conditions. Whereas QQuaternion seems to handle things
241- // more cleanly.
242- QQuaternion q (
243- attitude_status.q [0 ],
244- attitude_status.q [1 ],
245- attitude_status.q [2 ],
246- attitude_status.q [3 ]);
247- auto vector3D = q.toEulerAngles ();
248- float roll = vector3D.z ();
249- float pitch = vector3D.y ();
250- float yaw = vector3D.x ();
251-
252- gimbal->setAbsoluteRoll (roll);
253- gimbal->setAbsolutePitch (pitch);
237+ float roll, pitch, yaw;
238+ mavlink_quaternion_to_euler (attitude_status.q , &roll, &pitch, &yaw);
239+
240+ gimbal->setAbsoluteRoll (qRadiansToDegrees (roll));
241+ gimbal->setAbsolutePitch (qRadiansToDegrees (pitch));
254242
255243 const bool yaw_in_vehicle_frame = _yawInVehicleFrame (attitude_status.flags );
256244 if (yaw_in_vehicle_frame) {
257- const float bodyYaw = yaw;
245+ const float bodyYaw = qRadiansToDegrees ( yaw) ;
258246 float absoluteYaw = bodyYaw + _vehicle->heading ()->rawValue ().toFloat ();
259247 if (absoluteYaw > 180 .0f ) {
260248 absoluteYaw -= 360 .0f ;
@@ -264,7 +252,7 @@ void GimbalController::_handleGimbalDeviceAttitudeStatus(const mavlink_message_t
264252 gimbal->setAbsoluteYaw (absoluteYaw);
265253
266254 } else {
267- const float absoluteYaw = yaw;
255+ const float absoluteYaw = qRadiansToDegrees ( yaw) ;
268256 float bodyYaw = absoluteYaw - _vehicle->heading ()->rawValue ().toFloat ();
269257 if (bodyYaw < -180 .0f ) {
270258 bodyYaw += 360 .0f ;
0 commit comments