Browse Source

Fixed mag calibration

sbg
Lorenz Meier 12 years ago
parent
commit
96dc901cae
  1. 18
      apps/commander/commander.c

18
apps/commander/commander.c

@ -308,7 +308,7 @@ void do_mag_calibration(int status_pub, struct vehicle_status_s *status)
uint64_t calibration_interval = 45 * 1000 * 1000; uint64_t calibration_interval = 45 * 1000 * 1000;
/* maximum 2000 values */ /* maximum 2000 values */
const unsigned int calibration_maxcount = 2000; const unsigned int calibration_maxcount = 500;
unsigned int calibration_counter = 0; unsigned int calibration_counter = 0;
/* limit update rate to get equally spaced measurements over time (in ms) */ /* limit update rate to get equally spaced measurements over time (in ms) */
@ -353,12 +353,18 @@ void do_mag_calibration(int status_pub, struct vehicle_status_s *status)
uint64_t axis_deadline = hrt_absolute_time(); uint64_t axis_deadline = hrt_absolute_time();
uint64_t calibration_deadline = hrt_absolute_time() + calibration_interval; uint64_t calibration_deadline = hrt_absolute_time() + calibration_interval;
const char axislabels[3] = { 'Z', 'X', 'Y'}; const char axislabels[3] = { 'X', 'Z', 'Y'};
int axis_index = -1; int axis_index = -1;
float *x = malloc(sizeof(float) * calibration_maxcount); float *x = (float*)malloc(sizeof(float) * calibration_maxcount);
float *y = malloc(sizeof(float) * calibration_maxcount); float *y = (float*)malloc(sizeof(float) * calibration_maxcount);
float *z = malloc(sizeof(float) * calibration_maxcount); float *z = (float*)malloc(sizeof(float) * calibration_maxcount);
if (x == NULL || y == NULL || z == NULL) {
warnx("mag cal failed: out of memory");
mavlink_log_info(mavlink_fd, "mag cal failed: out of memory");
return;
}
tune_confirm(); tune_confirm();
sleep(2); sleep(2);
@ -1095,7 +1101,7 @@ int commander_main(int argc, char *argv[])
daemon_task = task_spawn("commander", daemon_task = task_spawn("commander",
SCHED_DEFAULT, SCHED_DEFAULT,
SCHED_PRIORITY_MAX - 50, SCHED_PRIORITY_MAX - 50,
8000, 9000,
commander_thread_main, commander_thread_main,
(argv) ? (const char **)&argv[2] : (const char **)NULL); (argv) ? (const char **)&argv[2] : (const char **)NULL);
thread_running = true; thread_running = true;

Loading…
Cancel
Save