mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-20 05:53:34 +08:00
Enable arbitrary euler angle for Mag rotation CAL_MAGx_{ROLL,PITCH,YAW}
- Enable arbitrary euler angle for Mag rotation - new CUSTOM rotation enum out of the normal enum range - mag_rot: automatically change to custom if euler rot is set - sensor_calibration: Magnetometer save custom rotation parameters - mag_cal: cross mention rotation parameters - This allows the user to see the RPY options when searching for the rotation parameter --------- Co-authored-by: Junwoo Hwang <junwoo@auterion.com> Co-authored-by: bresch <[brescianimathieu@gmail.com](mailto:brescianimathieu@gmail.com)> Co-authored-by: Daniel Agar <daniel@agar.ca>
This commit is contained in:
co-authored by
Junwoo Hwang
bresch
Daniel Agar
parent
9551c1b614
commit
6a58f6c7dc
@@ -771,6 +771,10 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub, int32_t cal_ma
|
||||
|
||||
// FALLTHROUGH
|
||||
case ROTATION_PITCH_180_YAW_270: // skip 27, same as 10 ROTATION_ROLL_180_YAW_90
|
||||
|
||||
// FALLTHROUGH
|
||||
case ROTATION_CUSTOM: // Skip, as we currently don't support detecting arbitrary euler angle orientation
|
||||
|
||||
MSE[r] = FLT_MAX;
|
||||
break;
|
||||
|
||||
@@ -831,6 +835,11 @@ calibrate_return mag_calibrate_all(orb_advert_t *mavlink_log_pub, int32_t cal_ma
|
||||
worker_data.calibration[cur_mag].device_id(), worker_data.calibration[cur_mag].rotation_enum());
|
||||
continue;
|
||||
|
||||
case ROTATION_CUSTOM:
|
||||
PX4_INFO("[cal] External Mag: %d (%" PRIu32 "), not setting rotation enum since it's specified by Euler Angle",
|
||||
cur_mag, worker_data.calibration[cur_mag].device_id());
|
||||
continue; // Continue to the next mag loop
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -228,8 +228,13 @@ static_assert(MAV_SENSOR_ROTATION_ROLL_90_PITCH_68_YAW_293 == static_cast<MAV_SE
|
||||
static_assert(MAV_SENSOR_ROTATION_PITCH_315 == static_cast<MAV_SENSOR_ORIENTATION>(ROTATION_PITCH_315), "Pitch: 315");
|
||||
static_assert(MAV_SENSOR_ROTATION_ROLL_90_PITCH_315 == static_cast<MAV_SENSOR_ORIENTATION>(ROTATION_ROLL_90_PITCH_315),
|
||||
"Roll: 90, Pitch: 315");
|
||||
|
||||
// Note: Update the number (41, as of writing) below to the number of 'normal' rotation enums in MAVLink spec:
|
||||
// https://mavlink.io/en/messages/common.html#MAV_SENSOR_ORIENTATION
|
||||
static_assert(41 == ROTATION_MAX, "Keep MAV_SENSOR_ROTATION and PX4 Rotation in sync");
|
||||
|
||||
static_assert(MAV_SENSOR_ROTATION_CUSTOM == static_cast<MAV_SENSOR_ORIENTATION>(ROTATION_CUSTOM), "Custom Rotation");
|
||||
|
||||
|
||||
static const StreamListItem streams_list[] = {
|
||||
#if defined(HEARTBEAT_HPP)
|
||||
|
||||
@@ -360,6 +360,7 @@ parameters:
|
||||
short: Magnetometer ${i} rotation relative to airframe
|
||||
long: |
|
||||
An internal sensor will force a value of -1, so a GCS should only attempt to configure the rotation if the value is greater than or equal to zero.
|
||||
Set to "Custom Euler Angle" to define the rotation using CAL_MAG${i}_ROLL, CAL_MAG${i}_PITCH and CAL_MAG${i}_YAW.
|
||||
category: System
|
||||
type: enum
|
||||
values:
|
||||
@@ -405,12 +406,52 @@ parameters:
|
||||
38: Roll 90°, Pitch 68°, Yaw 293°
|
||||
39: Pitch 315°
|
||||
40: Roll 90°, Pitch 315°
|
||||
100: Custom Euler Angle
|
||||
min: -1
|
||||
max: 40
|
||||
max: 100
|
||||
default: -1
|
||||
num_instances: *max_num_sensor_instances
|
||||
instance_start: 0
|
||||
|
||||
CAL_MAG${i}_ROLL:
|
||||
description:
|
||||
short: Magnetometer ${i} Custom Euler Roll Angle
|
||||
long: Setting this parameter changes CAL_MAG${i}_ROT to "Custom Euler Angle"
|
||||
category: System
|
||||
type: float
|
||||
default: 0.0
|
||||
min: -180
|
||||
max: 180
|
||||
unit: deg
|
||||
num_instances: *max_num_sensor_instances
|
||||
instance_start: 0
|
||||
|
||||
CAL_MAG${i}_PITCH:
|
||||
description:
|
||||
short: Magnetometer ${i} Custom Euler Pitch Angle
|
||||
long: Setting this parameter changes CAL_MAG${i}_ROT to "Custom Euler Angle"
|
||||
category: System
|
||||
type: float
|
||||
default: 0.0
|
||||
min: -180
|
||||
max: 180
|
||||
unit: deg
|
||||
num_instances: *max_num_sensor_instances
|
||||
instance_start: 0
|
||||
|
||||
CAL_MAG${i}_YAW:
|
||||
description:
|
||||
short: Magnetometer ${i} Custom Euler Yaw Angle
|
||||
long: Setting this parameter changes CAL_MAG${i}_ROT to "Custom Euler Angle"
|
||||
category: System
|
||||
type: float
|
||||
default: 0.0
|
||||
min: -180
|
||||
max: 180
|
||||
unit: deg
|
||||
num_instances: *max_num_sensor_instances
|
||||
instance_start: 0
|
||||
|
||||
CAL_MAG${i}_XOFF:
|
||||
description:
|
||||
short: Magnetometer ${i} X-axis offset
|
||||
|
||||
Reference in New Issue
Block a user