Initial commit for dogleg test
parent
70d3c9044d
commit
34389973c9
|
@ -0,0 +1,78 @@
|
||||||
|
"""
|
||||||
|
GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
|
||||||
|
Atlanta, Georgia 30332-0415
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
See LICENSE for the license information
|
||||||
|
|
||||||
|
DoglegOptimizer unit tests.
|
||||||
|
Author: Frank Dellaert
|
||||||
|
"""
|
||||||
|
# pylint: disable=no-member, invalid-name
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
import gtsam
|
||||||
|
import numpy as np
|
||||||
|
from gtsam.utils.test_case import GtsamTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestDoglegOptimizer(GtsamTestCase):
|
||||||
|
|
||||||
|
def test_DoglegOptimizer(self):
|
||||||
|
# Linearization point
|
||||||
|
T11 = gtsam.Pose2(0, 0, 0)
|
||||||
|
T12 = gtsam.Pose2(1, 0, 0)
|
||||||
|
T21 = gtsam.Pose2(0, 1, 0)
|
||||||
|
T22 = gtsam.Pose2(1, 1, 0)
|
||||||
|
|
||||||
|
# Factor graph
|
||||||
|
graph = gtsam.NonlinearFactorGraph()
|
||||||
|
|
||||||
|
# Priors
|
||||||
|
prior = gtsam.noiseModel_Isotropic.Sigma(3, 1)
|
||||||
|
graph.add(gtsam.PriorFactorPose2(11, T11, prior))
|
||||||
|
graph.add(gtsam.PriorFactorPose2(21, T21, prior))
|
||||||
|
|
||||||
|
# Odometry
|
||||||
|
model = gtsam.noiseModel_Diagonal.Sigmas(np.array([0.01, 0.01, 1e6]))
|
||||||
|
graph.add(gtsam.BetweenFactorPose2(11, 12, T11.between(T12), model))
|
||||||
|
graph.add(gtsam.BetweenFactorPose2(21, 22, T21.between(T22), model))
|
||||||
|
|
||||||
|
# Range
|
||||||
|
model_rho = gtsam.noiseModel_Isotropic.Sigma(1, 0.01)
|
||||||
|
graph.add(gtsam.RangeFactorPose2(12, 22, 1.0, model_rho))
|
||||||
|
|
||||||
|
# Print graph
|
||||||
|
print(graph)
|
||||||
|
|
||||||
|
sigma = 0.1
|
||||||
|
values = gtsam.Values()
|
||||||
|
values.insert(11, T11.retract(np.random.normal(0, sigma, 3)))
|
||||||
|
values.insert(12, T12)
|
||||||
|
values.insert(21, T21)
|
||||||
|
values.insert(22, T22)
|
||||||
|
linearized = graph.linearize(values)
|
||||||
|
|
||||||
|
# Get Jacobian
|
||||||
|
ordering = gtsam.Ordering()
|
||||||
|
ordering.push_back(11)
|
||||||
|
ordering.push_back(21)
|
||||||
|
ordering.push_back(12)
|
||||||
|
ordering.push_back(22)
|
||||||
|
A, b = linearized.jacobian(ordering)
|
||||||
|
Q = np.dot(A.transpose(), A)
|
||||||
|
print(np.linalg.det(Q))
|
||||||
|
|
||||||
|
bn = linearized.eliminateSequential(ordering)
|
||||||
|
|
||||||
|
# Print gradient
|
||||||
|
linearized.gradientAtZero()
|
||||||
|
|
||||||
|
# Run dogleg optimizer
|
||||||
|
dl = gtsam.DoglegOptimizer(graph, values)
|
||||||
|
result = dl.optimize()
|
||||||
|
print(graph.error(result))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
Loading…
Reference in New Issue