diff --git a/src/modules/mavlink/mavlink_bridge_header.h b/src/modules/mavlink/mavlink_bridge_header.h index a35573db75cd2e931d97f36d1a8e3ac6778415c2..d9c1a6695813605d0727924a99c0ee9926bfa4cc 100644 --- a/src/modules/mavlink/mavlink_bridge_header.h +++ b/src/modules/mavlink/mavlink_bridge_header.h @@ -42,6 +42,8 @@ #ifndef MAVLINK_BRIDGE_HEADER_H #define MAVLINK_BRIDGE_HEADER_H +#define MAVLINK_NO_CONVERSION_HELPERS + #define MAVLINK_USE_CONVENIENCE_FUNCTIONS /* use efficient approach, see mavlink_helpers.h */ diff --git a/src/modules/mavlink/mavlink_messages.cpp b/src/modules/mavlink/mavlink_messages.cpp index c3d931e77afbc53d6ca8780d19fbd172e1d52d12..131fdf0b2fe5d28ef82889e0b1a7a8be715d6fe1 100644 --- a/src/modules/mavlink/mavlink_messages.cpp +++ b/src/modules/mavlink/mavlink_messages.cpp @@ -2852,7 +2852,8 @@ protected: memcpy(&msg.q[0], &att_sp.q_d[0], sizeof(msg.q)); } else { - mavlink_euler_to_quaternion(att_sp.roll_body, att_sp.pitch_body, att_sp.yaw_body, msg.q); + matrix::Quatf q = matrix::Eulerf(att_sp.roll_body, att_sp.pitch_body, att_sp.yaw_body); + memcpy(&msg.q[0], q.data(), sizeof(msg.q)); } msg.body_roll_rate = att_rates_sp.roll; diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index f8c3810464729b481beca7062e61057de14a3f77..5bdc543d9d1d18b10a449d34695f873274962d48 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -1340,10 +1340,15 @@ MavlinkReceiver::handle_message_set_attitude_target(mavlink_message_t *msg) att_sp.timestamp = hrt_absolute_time(); if (!ignore_attitude_msg) { // only copy att sp if message contained new data - mavlink_quaternion_to_euler(set_attitude_target.q, &att_sp.roll_body, &att_sp.pitch_body, &att_sp.yaw_body); - att_sp.yaw_sp_move_rate = 0.0; - memcpy(att_sp.q_d, set_attitude_target.q, sizeof(att_sp.q_d)); + matrix::Quatf q(set_attitude_target.q); + q.copyTo(att_sp.q_d); att_sp.q_d_valid = true; + + matrix::Eulerf euler{q}; + att_sp.roll_body = euler.phi(); + att_sp.pitch_body = euler.theta(); + att_sp.yaw_body = euler.psi(); + att_sp.yaw_sp_move_rate = 0.0f; } if (!_offboard_control_mode.ignore_thrust) { // dont't overwrite thrust if it's invalid