@@ -11,38 +11,31 @@ void accIntegral::reset() {
1111 // scalars
1212 var_vel = 0 ;
1313 var_acc = 0 ;
14- time_last = micros ();
1514}
1615
17- // ---------------------- Other -----------------------
16+ // ---------------- Velocity estimate -----------------
1817
1918vec3_t accIntegral::getVel () {
2019 return vel;
2120}
2221
23- float accIntegral::updateTimer () {
24- uint32_t time_now = micros ();
25- uint32_t change_time = time_now - time_last;
26- time_last = time_now;
27- return float (change_time)*1e-6 ;
28- }
29-
30- // ---------------- Velocity estimate -----------------
31-
3222// update velocity with imu measurements
33- void accIntegral::updateVel ( vec3_t angvel,
34- vec3_t accel,
35- vec3_t vel_t ,
36- const float SD_ACC,
37- const float SD_VEL,
38- const float GRAVITY ) {
23+ void accIntegral::update ( vec3_t angvel,
24+ vec3_t accel,
25+ vec3_t vel_t ,
26+ const float SD_ACC,
27+ const float SD_VEL,
28+ const float GRAVITY,
29+ const float ALPHA ) {
3930 // 0. Constants:
4031 const float VAR_ACC = SD_ACC*SD_ACC;
4132 const float VAR_VEL = SD_VEL*SD_VEL;
4233 const float VAR_COMB = VAR_ACC*VAR_VEL;
4334
4435 // 1. Remove acceleration bias:
45- quat_t qt = this ->getQuat ();
36+ imuFilter::update ( angvel, accel, ALPHA, SD_ACC );
37+ quat_t qt = imuFilter::getQuat ();
38+
4639 accel *= GRAVITY; // convert to given units
4740
4841 // Remove centrifugal
@@ -67,27 +60,29 @@ void accIntegral::updateVel( vec3_t angvel,
6760 vec3_t dvel = vel_t - vel;
6861
6962 float dvel_mag = dvel.dot (dvel);
70- float gain_vel = VAR_COMB/(VAR_COMB + var_vel*var_acc); // gain affected by velocity and acceleration
63+ // gain affected by velocity and acceleration
64+ float gain_vel = VAR_COMB/(VAR_COMB + var_vel*var_acc);
7165
7266 var_vel = dvel_mag + gain_vel*var_vel;
7367
7468 // Integrate
75- float dt = updateTimer ();
69+ float dt = imuFilter::timeStep ();
7670 vel += 0.5 *(accel + accel_last)*dt; // trapezoidal rule
7771 vel += dvel*gain_vel; // update with target velocity
7872
7973 accel_last = accel;
8074}
8175
8276// verbose update
83- void accIntegral::updateVel ( float gx, float gy, float gz,
84- float ax, float ay, float az,
85- float vx, float vy, float vz,
86- const float SD_ACC,
87- const float SD_VEL,
88- const float GRAVITY ) {
77+ void accIntegral::update ( float gx, float gy, float gz,
78+ float ax, float ay, float az,
79+ float vx, float vy, float vz,
80+ const float SD_ACC,
81+ const float SD_VEL,
82+ const float GRAVITY,
83+ const float ALPHA ) {
8984 vec3_t angvel = {gx, gy, gz};
9085 vec3_t accel = {ax, ay, az};
9186 vec3_t vel_t = {vx, vy, vz};
92- return updateVel ( angvel, accel, vel_t , SD_ACC, SD_VEL, GRAVITY );
87+ return update ( angvel, accel, vel_t , ALPHA , SD_ACC, SD_VEL, GRAVITY );
9388}
0 commit comments