Bootstrap sequence
-
Created factors are inactive if bootstrapping == true
--> inemplaceFactors()
-
Implement virtual void ProcessorMotion::bootstrap()
method, doing the following:-
wait for the conditions to apply the bootstrap -
compute the necessary elements <-- 3 strategies, see below. Get q0
, eventuallyv0
. -
transform all the nodes in Problem with the new bootsrapped solution -
re-compute keyframe states produced by IMU to account for new initial conditions -
re-activate all factors that were declared inactive
-
clear the bootstrapping
flag
-
We implement 3 different bootstrapping strategies. The option is controlled via YAML. The three methods are implemented in ProcessorImu::bootstrap()
.
-
Implement Lupton's TRO-11 method to determine v0 and g from three kfs.
-
Conditions: 3 KFs of a processor that we know it's good -
Computation: The method in the paper is too complicated and it seems to have plenty of errors. The method is revised here (ask jsola@iri.upc.edu for permission) https://www.overleaf.com/project/629e276e7f68b0c2bfa469ac
It boils down to this:
- express
p1
as a function ofp0
,R0
,v0
,Dt01
,Dp01
,g
- express
p2
as a function ofp0
,R0
,v0
,R1
,Dt01
,Dp01
,Dv01
,Dt02
,Dp02
- assume
p0
,R0
,p1
,R1
,p2
are provided by some external method (e.g. visual odom or slam) - assume
Dtij
,Dpij
andDvij
are provided by IMU preintegration - write a linear system as a function of
v0
andg
- solve for
v0
andg
-
This ^^^ is coded in imu_tools.h
, getting v0_loc and g_loc -
Call function in imu_tools.h -
compute q0 so that q0 * g_loc = g_glob -
Transform v0_glob = q0 * v0_loc -
Reintegrate IMU buffers according to new v0
Once this math is done (in
imu_tools.h
), integrate it in WOLF. <-- discussed in core issue 461: mobile_robotics/wolf_projects/wolf_lib/wolf#461 (closed) - express
-
-
IMU averaging to get only
g
-
Conditions: buffer length >= N -
Computation: -
average N IMU samples of acceleration, get local g vector, g_loc -
compute q0 so that q0*g_loc = g_glob
-
-
-
Static case of
v=0
,w=0
--> IMU averaging allows us to computeg
and gyro bias.-
Conditions: buffer length >= N -
Computations: -
average N IMU samples -
Impose v=0, w=0 -
compute gyro bias -
reintegrate IMU buffers with new gyro bias -
compute local g_loc -
compute q0 so that q0*g_loc=g_glob
-
-