@@ -99,6 +99,59 @@ function (cf::CalcFactor{<:ManifoldFactor})(X, p, q)
99
99
return distanceTangent2Point (cf. factor. M, X, p, q)
100
100
end
101
101
102
+
103
+ # # ======================================================================================
104
+ # # adjoint factor - adjoint action applied to the measurement
105
+ # # ======================================================================================
106
+
107
+
108
+ # Adjoints defined in ApproxManifoldProducts
109
+ struct AdFactor{F <: AbstractManifoldMinimize } <: AbstractManifoldMinimize
110
+ factor:: F
111
+ end
112
+
113
+ function (cf:: CalcFactor{<:AdFactor} )(Xϵ, p, q)
114
+ # M = getManifold(cf.factor)
115
+ # p,q ∈ M
116
+ # Xϵ ∈ TϵM
117
+ # ϵ = identity_element(M)
118
+ # transform measurement from TϵM to TpM (global to local coordinates)
119
+ # Adₚ⁻¹ = AdjointMatrix(M, p)⁻¹ = AdjointMatrix(M, p⁻¹)
120
+ # Xp = Adₚ⁻¹ * Xϵᵛ
121
+ # ad = Ad(M, inv(M, p))
122
+ # Xp = Ad(M, inv(M, p), Xϵ)
123
+ # Xp = adjoint_action(M, inv(M, p), Xϵ)
124
+ # TODO is vector transport supposed to be the same?
125
+ # Xp = vector_transport_to(M, ϵ, Xϵ, p)
126
+
127
+ # Transform measurement covariance
128
+ # ᵉΣₚ = Adₚ ᵖΣₚ Adₚᵀ
129
+ # TODO test if transforming sqrt_iΣ is the same as Σ
130
+ # Σ = ad * inv(cf.sqrt_iΣ^2) * ad'
131
+ # sqrt_iΣ = convert(typeof(cf.sqrt_iΣ), sqrt(inv(Σ)))
132
+ # sqrt_iΣ = convert(typeof(cf.sqrt_iΣ), ad * cf.sqrt_iΣ * ad')
133
+ Xp = Xϵ
134
+
135
+ child_cf = CalcFactorResidual (
136
+ cf. faclbl,
137
+ cf. factor. factor,
138
+ cf. varOrder,
139
+ cf. varOrderIdxs,
140
+ cf. meas,
141
+ cf. sqrt_iΣ,
142
+ cf. cache,
143
+ )
144
+ return child_cf (Xp, p, q)
145
+ end
146
+
147
+ getMeasurementParametric (f:: AdFactor ) = getMeasurementParametric (f. factor)
148
+
149
+ getManifold (f:: AdFactor ) = getManifold (f. factor)
150
+ function getSample (cf:: CalcFactor{<:AdFactor} )
151
+ M = getManifold (cf)
152
+ return sampleTangent (M, cf. factor. factor. Z)
153
+ end
154
+
102
155
# # ======================================================================================
103
156
# # ManifoldPrior
104
157
# # ======================================================================================
0 commit comments