|
|
|
@ -73,6 +73,12 @@ Aircraft::Aircraft(const char *frame_str) :
@@ -73,6 +73,12 @@ Aircraft::Aircraft(const char *frame_str) :
|
|
|
|
|
// allow for orientation settings, such as with tailsitters
|
|
|
|
|
enum ap_var_type ptype; |
|
|
|
|
ahrs_orientation = (AP_Int8 *)AP_Param::find("AHRS_ORIENTATION", &ptype); |
|
|
|
|
|
|
|
|
|
enum Rotation imu_rotation = (enum Rotation)ahrs_orientation->get(); |
|
|
|
|
ahrs_rotation_inv.from_rotation(imu_rotation); |
|
|
|
|
ahrs_rotation_inv.transpose(); |
|
|
|
|
last_imu_rotation = imu_rotation; |
|
|
|
|
|
|
|
|
|
terrain = reinterpret_cast<AP_Terrain *>(AP_Param::find_object("TERRAIN_")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -371,11 +377,14 @@ void Aircraft::fill_fdm(struct sitl_fdm &fdm)
@@ -371,11 +377,14 @@ void Aircraft::fill_fdm(struct sitl_fdm &fdm)
|
|
|
|
|
if (ahrs_orientation != nullptr) { |
|
|
|
|
enum Rotation imu_rotation = (enum Rotation)ahrs_orientation->get(); |
|
|
|
|
|
|
|
|
|
if (imu_rotation != last_imu_rotation) { |
|
|
|
|
ahrs_rotation_inv.from_rotation(imu_rotation); |
|
|
|
|
ahrs_rotation_inv.transpose(); |
|
|
|
|
last_imu_rotation = imu_rotation; |
|
|
|
|
} |
|
|
|
|
if (imu_rotation != ROTATION_NONE) { |
|
|
|
|
Matrix3f m = dcm; |
|
|
|
|
Matrix3f rot; |
|
|
|
|
rot.from_rotation(imu_rotation); |
|
|
|
|
m = m * rot.transposed(); |
|
|
|
|
m = m * ahrs_rotation_inv; |
|
|
|
|
|
|
|
|
|
m.to_euler(&r, &p, &y); |
|
|
|
|
fdm.rollDeg = degrees(r); |
|
|
|
|