@@ -10,20 +10,28 @@ struct IMUDeltaManifold <: AbstractManifold{ℝ} end
10
10
11
11
# NOTE Manifold in not defined as a ProductManifold since we do not use the product metric. #701
12
12
# also see related SE₂(3)
13
+ """
14
+ IMUDeltaGroup
15
+
16
+ #TODO SpecialGalileanGroup(3)
17
+ References:
18
+ - https://hal.science/hal-02183498/document
19
+ - TODO new reference: https://arxiv.org/pdf/2312.07555
13
20
21
+ Affine representation
22
+ Δ = [ΔR Δv Δp;
23
+ 0 1 Δt;
24
+ 0 0 1] ⊂ ℝ⁵ˣ⁵
25
+
26
+ ArrayPartition representation (TODO maybe swop order to [Δp; Δv; ΔR; Δt])
27
+ Δ = [ΔR; Δv; Δp; Δt]
28
+ """
14
29
const IMUDeltaGroup = GroupManifold{ℝ, IMUDeltaManifold, MultiplicationOperation}
15
30
16
- IMUDeltaGroup () = GroupManifold (IMUDeltaManifold (), MultiplicationOperation ())
31
+ IMUDeltaGroup () = GroupManifold (IMUDeltaManifold (), MultiplicationOperation (), LeftInvariantRepresentation () )
17
32
18
33
Manifolds. manifold_dimension (:: IMUDeltaManifold ) = 9
19
34
20
- # Affine representation
21
- # Δ = [ΔR Δv Δp;
22
- # 0 1 Δt;
23
- # 0 0 1] ⊂ \R^5x5
24
-
25
- # ArrayPartition representation (TODO maybe swop order to [Δp; Δv; ΔR; Δt])
26
- # Δ = [ΔR; Δv; Δp; Δt]
27
35
28
36
function Manifolds. identity_element (M:: IMUDeltaGroup ) # was #SMatrix{5,5,Float64}(I)
29
37
ArrayPartition (
@@ -387,10 +395,8 @@ function (cf::CalcFactor{<:IMUDeltaFactor})(
387
395
q_vel,
388
396
b:: SVector{6,T} = zeros (SVector{6 ,Float64})
389
397
) where T <: Real
390
- p_t = Dates. value (cf. cache. timestams[1 ])* 1e-9
391
- q_t = Dates. value (cf. cache. timestams[2 ])* 1e-9
392
- p = ArrayPartition (p_SE3. x[2 ], p_vel, p_SE3. x[1 ], p_t)
393
- q = ArrayPartition (q_SE3. x[2 ], q_vel, q_SE3. x[1 ], q_t)
398
+ p = ArrayPartition (p_SE3. x[2 ], p_vel, p_SE3. x[1 ])
399
+ q = ArrayPartition (q_SE3. x[2 ], q_vel, q_SE3. x[1 ])
394
400
return cf (Δmeas, p, q, b)
395
401
end
396
402
@@ -466,7 +472,7 @@ function IMUDeltaFactor(
466
472
S = Σ[1 : 9 ,1 : 9 ]
467
473
ch = check_point (SM, S; atol = 1e-9 )
468
474
if ! isnothing (ch)
469
- @warn " IMU Covar check" ch
475
+ @warn " IMU Covar check" ch maxlog = 1
470
476
S = (S + S' ) / 2
471
477
S = S + diagm ((diag (S) .== 0 )* 1e-15 )
472
478
ch = check_point (SM, S)
@@ -480,7 +486,7 @@ function IMUDeltaFactor(
480
486
Δt,
481
487
Δ,
482
488
SMatrix {10,10,Float64} (Σ),
483
- J_b,
489
+ SMatrix {10,6,Float64} ( J_b) ,
484
490
SA[a_b... ; ω_b... ],
485
491
IMUMeasurements (
486
492
accels,
0 commit comments