mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-30 04:06:33 +08:00
sensors/vehicle_magnetometer: only check if sensor enabled after parameters loaded
This commit is contained in:
@@ -297,46 +297,24 @@ void VehicleMagnetometer::Run()
|
|||||||
|
|
||||||
for (int uorb_index = 0; uorb_index < MAX_SENSOR_COUNT; uorb_index++) {
|
for (int uorb_index = 0; uorb_index < MAX_SENSOR_COUNT; uorb_index++) {
|
||||||
|
|
||||||
if (!_calibration[uorb_index].enabled()) {
|
const bool was_advertised = _advertised[uorb_index];
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_advertised[uorb_index]) {
|
if (!_advertised[uorb_index]) {
|
||||||
// use data's timestamp to throttle advertisement checks
|
// use data's timestamp to throttle advertisement checks
|
||||||
if ((_last_data[uorb_index].timestamp == 0) || (hrt_elapsed_time(&_last_data[uorb_index].timestamp) > 1_s)) {
|
if ((_last_data[uorb_index].timestamp == 0) || (hrt_elapsed_time(&_last_data[uorb_index].timestamp) > 1_s)) {
|
||||||
if (_sensor_sub[uorb_index].advertised()) {
|
if (_sensor_sub[uorb_index].advertised()) {
|
||||||
if (uorb_index > 0) {
|
|
||||||
/* the first always exists, but for each further sensor, add a new validator */
|
|
||||||
if (!_voter.add_new_validator()) {
|
|
||||||
PX4_ERR("failed to add validator for %s %i", "MAG", uorb_index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_advertised[uorb_index] = true;
|
_advertised[uorb_index] = true;
|
||||||
|
|
||||||
// advertise outputs in order if publishing all
|
|
||||||
if (!_param_sens_mag_mode.get()) {
|
|
||||||
for (int instance = 0; instance < uorb_index; instance++) {
|
|
||||||
_vehicle_magnetometer_pub[instance].advertise();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_selected_sensor_sub_index < 0) {
|
|
||||||
_sensor_sub[uorb_index].registerCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_last_data[uorb_index].timestamp = hrt_absolute_time();
|
_last_data[uorb_index].timestamp = hrt_absolute_time();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_advertised[uorb_index]) {
|
if (_advertised[uorb_index]) {
|
||||||
sensor_mag_s report;
|
sensor_mag_s report;
|
||||||
|
|
||||||
while (_sensor_sub[uorb_index].update(&report)) {
|
while (_sensor_sub[uorb_index].update(&report)) {
|
||||||
updated[uorb_index] = true;
|
|
||||||
|
|
||||||
if (_calibration[uorb_index].device_id() != report.device_id) {
|
if (_calibration[uorb_index].device_id() != report.device_id) {
|
||||||
_calibration[uorb_index].set_device_id(report.device_id, report.is_external);
|
_calibration[uorb_index].set_device_id(report.device_id, report.is_external);
|
||||||
@@ -344,7 +322,27 @@ void VehicleMagnetometer::Run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_calibration[uorb_index].enabled()) {
|
if (_calibration[uorb_index].enabled()) {
|
||||||
const Vector3f vect = _calibration[uorb_index].Correct(Vector3f{report.x, report.y, report.z});
|
if (!was_advertised) {
|
||||||
|
if (uorb_index > 0) {
|
||||||
|
/* the first always exists, but for each further sensor, add a new validator */
|
||||||
|
if (!_voter.add_new_validator()) {
|
||||||
|
PX4_ERR("failed to add validator for %s %i", "MAG", uorb_index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// advertise outputs in order if publishing all
|
||||||
|
if (!_param_sens_mag_mode.get()) {
|
||||||
|
for (int instance = 0; instance < uorb_index; instance++) {
|
||||||
|
_vehicle_magnetometer_pub[instance].advertise();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_selected_sensor_sub_index < 0) {
|
||||||
|
_sensor_sub[uorb_index].registerCallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Vector3f vect{_calibration[uorb_index].Correct(Vector3f{report.x, report.y, report.z})};
|
||||||
|
|
||||||
float mag_array[3] {vect(0), vect(1), vect(2)};
|
float mag_array[3] {vect(0), vect(1), vect(2)};
|
||||||
_voter.put(uorb_index, report.timestamp, mag_array, report.error_count, _priority[uorb_index]);
|
_voter.put(uorb_index, report.timestamp, mag_array, report.error_count, _priority[uorb_index]);
|
||||||
@@ -358,6 +356,8 @@ void VehicleMagnetometer::Run()
|
|||||||
_last_data[uorb_index].x = vect(0);
|
_last_data[uorb_index].x = vect(0);
|
||||||
_last_data[uorb_index].y = vect(1);
|
_last_data[uorb_index].y = vect(1);
|
||||||
_last_data[uorb_index].z = vect(2);
|
_last_data[uorb_index].z = vect(2);
|
||||||
|
|
||||||
|
updated[uorb_index] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user