mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-11 18:38:28 -04:00
Arducopter: INS
removed IMU test, updated INS test to include normalized gravity accel vector.
This commit is contained in:
parent
0ea3424779
commit
02f1695991
@ -12,7 +12,7 @@ static int8_t test_gps(uint8_t argc, const Menu::arg *argv);
|
|||||||
//static int8_t test_tri(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_tri(uint8_t argc, const Menu::arg *argv);
|
||||||
//static int8_t test_adc(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_adc(uint8_t argc, const Menu::arg *argv);
|
||||||
static int8_t test_ins(uint8_t argc, const Menu::arg *argv);
|
static int8_t test_ins(uint8_t argc, const Menu::arg *argv);
|
||||||
static int8_t test_imu(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_imu(uint8_t argc, const Menu::arg *argv);
|
||||||
//static int8_t test_dcm_eulers(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_dcm_eulers(uint8_t argc, const Menu::arg *argv);
|
||||||
//static int8_t test_dcm(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_dcm(uint8_t argc, const Menu::arg *argv);
|
||||||
//static int8_t test_omega(uint8_t argc, const Menu::arg *argv);
|
//static int8_t test_omega(uint8_t argc, const Menu::arg *argv);
|
||||||
@ -66,7 +66,7 @@ const struct Menu::command test_menu_commands[] PROGMEM = {
|
|||||||
{"gps", test_gps},
|
{"gps", test_gps},
|
||||||
// {"adc", test_adc},
|
// {"adc", test_adc},
|
||||||
{"ins", test_ins},
|
{"ins", test_ins},
|
||||||
{"imu", test_imu},
|
// {"imu", test_imu},
|
||||||
// {"dcm", test_dcm_eulers},
|
// {"dcm", test_dcm_eulers},
|
||||||
//{"omega", test_omega},
|
//{"omega", test_omega},
|
||||||
// {"stab_d", test_stab_d},
|
// {"stab_d", test_stab_d},
|
||||||
@ -419,6 +419,69 @@ test_radio(uint8_t argc, const Menu::arg *argv)
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
static int8_t
|
||||||
|
test_adc(uint8_t argc, const Menu::arg *argv)
|
||||||
|
{
|
||||||
|
ins.init(&timer_scheduler);
|
||||||
|
|
||||||
|
int8_t mytimer = 0;
|
||||||
|
startup_ground();
|
||||||
|
Serial.println("OK");
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
// We want this to execute fast
|
||||||
|
// ----------------------------
|
||||||
|
uint32_t timer = micros();
|
||||||
|
|
||||||
|
if ((timer - fast_loopTimer) >= 10000 && imu.new_data_available()) {
|
||||||
|
G_Dt = (float)(timer - fast_loopTimer) / 1000000.f; // used by PI Loops
|
||||||
|
fast_loopTimer = timer;
|
||||||
|
|
||||||
|
read_AHRS();
|
||||||
|
|
||||||
|
//calc_inertia();
|
||||||
|
accels_rotated = ahrs.get_dcm_matrix() * imu.get_accel();
|
||||||
|
//accels_rotated += accels_offset; // skew accels to account for long term error using calibration
|
||||||
|
|
||||||
|
mytimer++;
|
||||||
|
|
||||||
|
if ((timer - fiftyhz_loopTimer) >= 20000) {
|
||||||
|
fiftyhz_loopTimer = timer;
|
||||||
|
//sensed_loc.lng = sensed_loc.lat = sensed_loc.alt = 0;
|
||||||
|
|
||||||
|
// position fix
|
||||||
|
//inertial_error_correction();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mytimer >= 10){
|
||||||
|
float test = sqrt(sq(accels_rotated.x) + sq(accels_rotated.y) + sq(accels_rotated.z)) / 9.80665;
|
||||||
|
|
||||||
|
Vector3f _accels = imu.get_accel();
|
||||||
|
mytimer = 0;
|
||||||
|
|
||||||
|
|
||||||
|
Serial.printf("%1.4f, %1.4f, %1.4f | %1.4f, %1.4f, %1.4f | %d, %1.4f, %d, %1.4f \n",
|
||||||
|
_accels.x,
|
||||||
|
_accels.y,
|
||||||
|
_accels.z,
|
||||||
|
accels_rotated.x,
|
||||||
|
accels_rotated.y,
|
||||||
|
accels_rotated.z,
|
||||||
|
test);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Serial.available() > 0){
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
static int8_t
|
static int8_t
|
||||||
test_ins(uint8_t argc, const Menu::arg *argv)
|
test_ins(uint8_t argc, const Menu::arg *argv)
|
||||||
{
|
{
|
||||||
@ -441,6 +504,8 @@ test_ins(uint8_t argc, const Menu::arg *argv)
|
|||||||
ins.get_accels(accel);
|
ins.get_accels(accel);
|
||||||
temp = ins.temperature();
|
temp = ins.temperature();
|
||||||
|
|
||||||
|
float test = sqrt(sq(accel[0]) + sq(accel[1]) + sq(accel[2])) / 9.80665;
|
||||||
|
|
||||||
Serial.printf_P(PSTR("g"));
|
Serial.printf_P(PSTR("g"));
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
@ -452,7 +517,10 @@ test_ins(uint8_t argc, const Menu::arg *argv)
|
|||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
Serial.printf_P(PSTR(" %7.4f"),accel[i]);
|
Serial.printf_P(PSTR(" %7.4f"),accel[i]);
|
||||||
}
|
}
|
||||||
Serial.printf_P(PSTR(" t %7.4f \n"), temp);
|
|
||||||
|
Serial.printf_P(PSTR(" t %7.4f "), temp);
|
||||||
|
Serial.printf_P(PSTR(" | %7.4f \n"), test);
|
||||||
|
|
||||||
delay(40);
|
delay(40);
|
||||||
if(Serial.available() > 0){
|
if(Serial.available() > 0){
|
||||||
return (0);
|
return (0);
|
||||||
@ -465,6 +533,7 @@ test_ins(uint8_t argc, const Menu::arg *argv)
|
|||||||
/*
|
/*
|
||||||
test the IMU interface
|
test the IMU interface
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
static int8_t
|
static int8_t
|
||||||
test_imu(uint8_t argc, const Menu::arg *argv)
|
test_imu(uint8_t argc, const Menu::arg *argv)
|
||||||
{
|
{
|
||||||
@ -500,6 +569,87 @@ test_imu(uint8_t argc, const Menu::arg *argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
static int8_t
|
||||||
|
test_imu(uint8_t argc, const Menu::arg *argv)
|
||||||
|
{
|
||||||
|
print_hit_enter();
|
||||||
|
Serial.printf_P(PSTR("ADC\n"));
|
||||||
|
adc.Init(&timer_scheduler);
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
Vector3f avg;
|
||||||
|
avg.x = adc.Ch(4);
|
||||||
|
avg.y = adc.Ch(5);
|
||||||
|
avg.z = adc.Ch(6);
|
||||||
|
|
||||||
|
//Serial.printf_P(PSTR("init %.2f, %.2f, %.2f\n"), avg.x, avg.y, avg.z);
|
||||||
|
Vector3f low = avg;
|
||||||
|
Vector3f high = avg;
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
delay(100);
|
||||||
|
avg.x = avg.x * .95 + adc.Ch(4) * .05;
|
||||||
|
avg.y = avg.y * .95 + adc.Ch(5) * .05;
|
||||||
|
avg.z = avg.z * .95 + adc.Ch(6) * .05;
|
||||||
|
|
||||||
|
if(avg.x > high.x)
|
||||||
|
high.x = ceil(high.x *.9 + avg.x * .1);
|
||||||
|
|
||||||
|
if(avg.y > high.y)
|
||||||
|
high.y = ceil(high.y *.9 + avg.y * .1);
|
||||||
|
|
||||||
|
if(avg.z > high.z)
|
||||||
|
high.z = ceil(high.z *.9 + avg.z * .1);
|
||||||
|
|
||||||
|
//
|
||||||
|
if(avg.x < low.x)
|
||||||
|
low.x = floor(low.x *.9 + avg.x * .1);
|
||||||
|
|
||||||
|
if(avg.y < low.y)
|
||||||
|
low.y = floor(low.y *.9 + avg.y * .1);
|
||||||
|
|
||||||
|
if(avg.z < low.z)
|
||||||
|
low.z = floor(low.z *.9 + avg.z * .1);
|
||||||
|
|
||||||
|
Serial.printf_P(PSTR("%.2f, %.2f, %.2f \t| %.2f, %.2f, %.2f \t| %.2f, %.2f, %.2f\n"), avg.x, avg.y, avg.z, low.x, low.y, low.z, high.x, high.y, high.z);
|
||||||
|
|
||||||
|
//Serial.printf_P(PSTR("%.2f, %.2f, %.2f \t| %d, %d\n"), avg.x, avg.y, avg.z, _count[0], _sum[0]);
|
||||||
|
|
||||||
|
//Serial.println();
|
||||||
|
if(Serial.available() > 0){
|
||||||
|
Serial.printf_P(PSTR("Y to save\n"));
|
||||||
|
int c;
|
||||||
|
c = Serial.read();
|
||||||
|
|
||||||
|
do {
|
||||||
|
c = Serial.read();
|
||||||
|
} while (-1 == c);
|
||||||
|
|
||||||
|
if (('y' == c) || ('Y' == c)){
|
||||||
|
ins._x_high = high.x;
|
||||||
|
ins._x_low = low.x;
|
||||||
|
ins._y_high = high.y;
|
||||||
|
ins._y_low = low.y;
|
||||||
|
ins._z_high = high.z;
|
||||||
|
ins._z_low = low.z;
|
||||||
|
ins._x_high.save();
|
||||||
|
ins._x_low.save();
|
||||||
|
ins._y_high.save();
|
||||||
|
ins._y_low.save();
|
||||||
|
ins._z_high.save();
|
||||||
|
ins._z_low.save();
|
||||||
|
Serial.printf_P(PSTR("saved\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user