Skip to content

Commit

Permalink
Merge pull request #434 from JuliaRobotics/21Q2/maint/general
Browse files Browse the repository at this point in the history
new partial correlation test
  • Loading branch information
dehann committed Apr 12, 2021
2 parents 6bbae00 + f94ba67 commit 9db72b1
Show file tree
Hide file tree
Showing 8 changed files with 156 additions and 245 deletions.
4 changes: 2 additions & 2 deletions Project.toml
Expand Up @@ -2,7 +2,7 @@ name = "RoME"
uuid = "91fb55c2-4c03-5a59-ba21-f4ea956187b8"
keywords = ["SLAM", "state-estimation", "MM-iSAM", "MM-iSAMv2", "inference", "robotics"]
desc = "Non-Gaussian simultaneous localization and mapping"
version = "0.15.0"
version = "0.15.1"

[deps]
ApproxManifoldProducts = "9bbbb610-88a1-53cd-9763-118ce10c1f89"
Expand Down Expand Up @@ -37,7 +37,7 @@ DistributedFactorGraphs = "0.13"
Distributions = "0.21, 0.22, 0.23, 0.24"
DocStringExtensions = "0.7, 0.8"
FileIO = "1.0.2, 1.1, 1.2"
IncrementalInference = "0.23"
IncrementalInference = "0.23.1"
JLD2 = "0.2, 0.3, 0.4"
KernelDensityEstimate = "0.5.1, 0.6"
Manifolds = "0.4.19"
Expand Down
11 changes: 0 additions & 11 deletions src/factors/Range2D.jl
Expand Up @@ -6,10 +6,7 @@ $(TYPEDEF)
"""
mutable struct Point2Point2Range{D <: IIF.SamplableBelief} <: IncrementalInference.AbstractRelativeMinimize
Z::D
# Point2Point2Range{D}() where {D} = new{D}()
# Point2Point2Range{D}(d::D) where {D <: IIF.SamplableBelief} = new{D}(d)
end
# Point2Point2Range(d::D) where {D <: IIF.SamplableBelief} = Point2Point2Range{D}(d)

function getSample(cfo::CalcFactor{<:Point2Point2Range}, N::Int=1)
return (reshape(rand(cfo.factor.Z,N),1,N),)
Expand All @@ -19,7 +16,6 @@ function (cfo::CalcFactor{<:Point2Point2Range})(rho, xi, lm)
# Basically `EuclidDistance`
# must return all dimensions
return rho .- norm(lm[1:2] .- xi[1:2])
# return [rho[1] - norm(lm[1:2] .- xi[1:2])]
end

passTypeThrough(d::FunctionNodeData{Point2Point2Range}) = d
Expand All @@ -29,8 +25,6 @@ $(TYPEDEF)
"""
mutable struct PackedPoint2Point2Range <: IncrementalInference.PackedInferenceType
str::String
# PackedPoint2Point2Range() = new()
# PackedPoint2Point2Range(s::AS) where {AS <: AbstractString} = new(s)
end
function convert(::Type{PackedPoint2Point2Range}, d::Point2Point2Range)
return PackedPoint2Point2Range(convert(PackedSamplableBelief, d.Z))
Expand All @@ -49,10 +43,8 @@ Range only measurement from Pose2 to Point2 variable.
mutable struct Pose2Point2Range{T <: IIF.SamplableBelief} <: IIF.AbstractRelativeMinimize
Z::T
partial::Tuple{Int,Int}
# Pose2Point2Range{T}() where T = new()
end
Pose2Point2Range(Z::T) where {T <: IIF.SamplableBelief} = Pose2Point2Range{T}(Z, (1,2))
# Pose2Point2Range(Z::T) where {T <: IIF.SamplableBelief} = Pose2Point2Range{T}(Z)

function getSample(cfo::CalcFactor{<:Pose2Point2Range}, N::Int=1)
return (reshape(rand(cfo.factor.Z,N),1,N), )
Expand All @@ -61,14 +53,11 @@ end
function (cfo::CalcFactor{<:Pose2Point2Range})(rho, xi, lm)
# Basically `EuclidDistance`
return rho .- norm(lm[1:2] .- xi[1:2])
# return [rho[1] - norm(lm[1:2] .- xi[1:2])]
end


mutable struct PackedPose2Point2Range <: IncrementalInference.PackedInferenceType
str::String
# PackedPose2Point2Range() = new()
# PackedPose2Point2Range(s::AS) where {AS <: AbstractString} = new(s)
end
function convert(::Type{PackedPose2Point2Range}, d::Pose2Point2Range)
return PackedPose2Point2Range(convert(PackedSamplableBelief, d.Z))
Expand Down
53 changes: 27 additions & 26 deletions test/runtests.jl
Expand Up @@ -9,32 +9,33 @@ using Test
# "testG2oParser.jl"; ]

testfiles = [
"threeDimLinearProductTest.jl";
"testInflation380.jl";
"testPoint2Point2.jl";
"testParametric.jl";
"testTreeInitCommonMsg_IIF913.jl";
"testPose3Pose3NH.jl";
"testBeehive2D_CliqByCliq.jl"; # special case debugging
"testhigherdimroots.jl";
"testManifoldsPose2Equivalent.jl";
"testDidsonFunctions.jl";
"testPoint2Point2Init.jl";
"testBasicPose2Stationary.jl";
"TestPoseAndPoint2Constraints.jl";
"testDynPoint2D.jl";
"testBearingRange2D.jl";
"testDeltaOdo.jl";
"testFixedLagFG.jl";
"testMultimodalRangeBearing.jl";
"testDynPose2D.jl";
"testPartialXYH.jl";
"testpartialpose3.jl";
"testpackingconverters.jl";
"TestDefaultFGInitialization.jl";
"testAccumulateFactors.jl";
"testDeadReckoningTether.jl";
"testFluxModelsPose2.jl";
"testInflation380.jl";
"testPoint2Point2.jl";
"testParametric.jl";
"testTreeInitCommonMsg_IIF913.jl";
"threeDimLinearProductTest.jl";
"testPose3Pose3NH.jl";
"testBeehive2D_CliqByCliq.jl"; # special case debugging
"testhigherdimroots.jl";
"testManifoldsPose2Equivalent.jl";
"testDidsonFunctions.jl";
"testPoint2Point2Init.jl";
"testBasicPose2Stationary.jl";
"TestPoseAndPoint2Constraints.jl";
"testPartialRangeCrossCorrelations.jl";
"testDynPoint2D.jl";
"testBearingRange2D.jl";
"testDeltaOdo.jl";
"testFixedLagFG.jl";
"testMultimodalRangeBearing.jl";
"testDynPose2D.jl";
"testPartialXYH.jl";
"testpartialpose3.jl";
"testpackingconverters.jl";
"TestDefaultFGInitialization.jl";
"testAccumulateFactors.jl";
"testDeadReckoningTether.jl";
"testFluxModelsPose2.jl";
]


Expand Down
64 changes: 29 additions & 35 deletions test/testBeehive2D_CliqByCliq.jl
Expand Up @@ -2,14 +2,14 @@
# using Revise

using Test

using RoME


##

@testset "sanity check on Hex example" begin

# graphinit=false, regression since DFG v0.6.0 IIF v0.9.0 -- on tree init, issue IIF#602
##

fg = generateCanonicalFG_Hexagonal(graphinit=false)


Expand All @@ -21,53 +21,47 @@ getSolverParams(fg).downsolve = true
getSolverParams(fg).multiproc = false
getSolverParams(fg).async = false
getSolverParams(fg).useMsgLikelihoods=true
# to disable parent factor sharing
# getSolverParams(fg).devParams[:dontUseParentFactorsInitDown] = ""


# direct solve would be
# getSolverParams(fg).async = true ## MANUAL TEMP ONLY
tree, smt, hist = solveTree!(fg) #, recordcliqs=ls(fg))
tree, smt, hist = solveTree!(fg) #, recordcliqs=ls(fg))
tree, smt, hist = solveTree!(fg)
# tree, smt, hist = solveTree!(fg)

# tree.cliques[3]
# drawTree(tree, show=true)
# smt[3]

@error "Hex init test degraded quality during useMsgLikelihoods refactor, must restore to 55"
@test 40 < sum(-3.0 .< getPoints(getKDE(fg, :x0))[1,:] .< 3.0)
@test 40 < sum(-3.0 .< getPoints(getKDE(fg, :x0))[2,:] .< 3.0)
@test 40 < sum(-0.3 .< getPoints(getKDE(fg, :x0))[3,:] .< 0.3)

@test 40 < sum(7.0 .< getPoints(getKDE(fg, :x1))[1,:] .< 13.0)
@test 40 < sum(-3.0 .< getPoints(getKDE(fg, :x1))[2,:] .< 3.0)
@test 40 < sum(0.7 .< getPoints(getKDE(fg, :x1))[3,:] .< 1.3)
@test 35 < sum(-3.0 .< getPoints(getKDE(fg, :x0))[1,:] .< 3.0)
@test 35 < sum(-3.0 .< getPoints(getKDE(fg, :x0))[2,:] .< 3.0)
@test 35 < sum(-0.3 .< getPoints(getKDE(fg, :x0))[3,:] .< 0.3)

@test 40 < sum(12.0 .< getPoints(getKDE(fg, :x2))[1,:] .< 18.0)
@test 40 < sum(6.0 .< getPoints(getKDE(fg, :x2))[2,:] .< 11.0)
@test 40 < sum(1.8 .< getPoints(getKDE(fg, :x2))[3,:] .< 2.4)
@test 35 < sum(7.0 .< getPoints(getKDE(fg, :x1))[1,:] .< 13.0)
@test 35 < sum(-3.0 .< getPoints(getKDE(fg, :x1))[2,:] .< 3.0)
@test 35 < sum(0.7 .< getPoints(getKDE(fg, :x1))[3,:] .< 1.3)

@test 40 < sum(7.0 .< getPoints(getKDE(fg, :x3))[1,:] .< 13.0)
@test 40 < sum(15.0 .< getPoints(getKDE(fg, :x3))[2,:] .< 20.0)
# @test 40 < sum(-0.3 .< getPoints(getKDE(fg, :x3))[3,:] .< 0.3)
@test 35 < sum(12.0 .< getPoints(getKDE(fg, :x2))[1,:] .< 18.0)
@test 35 < sum(6.0 .< getPoints(getKDE(fg, :x2))[2,:] .< 11.0)
@test 35 < sum(1.8 .< getPoints(getKDE(fg, :x2))[3,:] .< 2.4)

@test 40 < sum(-5.0 .< getPoints(getKDE(fg, :x4))[1,:] .< 5.0)
@test 40 < sum(13.0 .< getPoints(getKDE(fg, :x4))[2,:] .< 22.0)
@test 40 < sum(-2.8 .< getPoints(getKDE(fg, :x4))[3,:] .< -1.5)
@test 35 < sum(7.0 .< getPoints(getKDE(fg, :x3))[1,:] .< 13.0)
@test 35 < sum(15.0 .< getPoints(getKDE(fg, :x3))[2,:] .< 20.0)
# @test 35 < sum(-0.3 .< getPoints(getKDE(fg, :x3))[3,:] .< 0.3)

@test 40 < sum(-8.0 .< getPoints(getKDE(fg, :x5))[1,:] .< -2.0)
@test 40 < sum(6.0 .< getPoints(getKDE(fg, :x5))[2,:] .< 11.0)
@test 40 < sum(-1.3 .< getPoints(getKDE(fg, :x5))[3,:] .< -0.7)
@test 35 < sum(-5.0 .< getPoints(getKDE(fg, :x4))[1,:] .< 5.0)
@test 35 < sum(13.0 .< getPoints(getKDE(fg, :x4))[2,:] .< 22.0)
@test 35 < sum(-2.8 .< getPoints(getKDE(fg, :x4))[3,:] .< -1.5)

@test 40 < sum(-3.0 .< getPoints(getKDE(fg, :x6))[1,:] .< 3.0)
@test 40 < sum(-3.0 .< getPoints(getKDE(fg, :x6))[2,:] .< 3.0)
@test 40 < sum(-0.3 .< getPoints(getKDE(fg, :x6))[3,:] .< 0.3)
@test 35 < sum(-8.0 .< getPoints(getKDE(fg, :x5))[1,:] .< -2.0)
@test 35 < sum(6.0 .< getPoints(getKDE(fg, :x5))[2,:] .< 11.0)
@test 35 < sum(-1.3 .< getPoints(getKDE(fg, :x5))[3,:] .< -0.7)

@test 40 < sum(17.0 .< getPoints(getKDE(fg, :l1))[1,:] .< 23.0)
@test 40 < sum(-5.0 .< getPoints(getKDE(fg, :l1))[2,:] .< 5.0)
@test 35 < sum(-3.0 .< getPoints(getKDE(fg, :x6))[1,:] .< 3.0)
@test 35 < sum(-3.0 .< getPoints(getKDE(fg, :x6))[2,:] .< 3.0)
@test 35 < sum(-0.3 .< getPoints(getKDE(fg, :x6))[3,:] .< 0.3)

@test 35 < sum(17.0 .< getPoints(getKDE(fg, :l1))[1,:] .< 23.0)
@test 35 < sum(-5.0 .< getPoints(getKDE(fg, :l1))[2,:] .< 5.0)


##

0
end # testset
Expand Down
126 changes: 3 additions & 123 deletions test/testDynPose2D.jl
Expand Up @@ -171,76 +171,6 @@ getSolverParams(fg).useMsgLikelihoods = false
smtasks = Task[]
tree, smt, hist = solveTree!(fg, smtasks=smtasks); #, recordcliqs=ls(fg));

##

# hists = IIF.fetchCliqHistoryAll!(smtasks)

# IIF.printCSMHistorySequential(hists)
# IIF.printCSMHistorySequential(hists, 3=>1:50)
# IIF.printCSMHistoryLogical(hists)

# ##

# getLogPath(fg)

# using Caesar, Images, Graphs

# tree = hists[1][1].csmc.tree

# csmAnimateSideBySide(tree, hists, encode=true, nvenc=true, show=true)

# ##

# sfg = hists[3][8].csmc.cliqSubFg
# drawGraph(sfg, show=true)
# getSolverParams(hists[3][8].csmc.cliqSubFg).dbg = true
# fnc_, csmc_ = IIF.repeatCSMStep!(hists, 3, 8);
# # sfg_= csmc_.cliqSubFg

# sfg = hists[3][9].csmc.cliqSubFg
# drawGraph(sfg, show=true)

# IIF.getMessageBuffer(hists[3][8].csmc.cliq).downRx.belief

# getSolverParams(hists[3][9].csmc.cliqSubFg).dbg = true
# IIF.repeatCSMStep!(hists, 3, 9);

# ##

# tree_ = hists[3][9].csmc.tree
# drawTree(tree_, show=true)

# ## whats up with down msgs

# sfg9 = loadDFG(joinpath(getLogPath(fg), "logs/cliq3", "fg_beforedownsolve.tar.gz"))
# drawGraph(sfg9, show=true)

# ls(sfg9, :x0)

# getFactor(sfg9, :x0f2)

# ##

# sfg = hists[7][6].csmc.cliqSubFg
# drawGraph(sfg, show=true)
# IIF.repeatCSMStep!(hists, 7, 6)


# getSolverParams(hists[4][4].csmc.cliqSubFg).dbg = true
# IIF.repeatCSMStep!(hists, 4, 4);

# IIF.getMessageBuffer(hists[4][4].csmc.cliq).upRx[7].belief
# IIF.getMessageBuffer(hists[4][4].csmc.cliq).upRx[7]
# IIF.getMessageBuffer(hists[4][4].csmc.cliq).upRx[7].jointmsg.priors


# IIF.repeatCSMStep!(hists, 4, 5)


##

# tree = buildTreeReset!(fg);
# drawTree(tree, show=true);

##

Expand Down Expand Up @@ -314,6 +244,8 @@ end

@testset "test many DynPose2 sideways velocity..." begin

##

global N = 100
global fg = initfg()

Expand Down Expand Up @@ -359,62 +291,10 @@ global x1 = KDE.getKDEMean(getKDE(getVariable(fg, :x1)))
@test abs(x1[4]) < 0.4
@test -1.5 < x1[5] < -0.5

##

end




## debugging 458============================

# using RoMEPlotting, Gadfly
# Gadfly.set_default_plot_size(35cm,25cm)
# plotPose(fg, :x10)
#
# drawGraph(fg2, show=true)
# drawTree(tree, show=true, imgs=true)
#
#
# sfg = buildCliqSubgraph(fg, tree, :x9)
# sfg = buildCliqSubgraph(fg, tree, :x10)
# drawGraph(sfg)
#
# # fg = deepcopy(fg2)
#
# getSolverParams(fg).dbg = true
# getSolverParams(fg).showtree = true
# getSolverParams(fg).drawtree = true
# getSolverParams(fg).multiproc = false
#
# ##============================================================================
#
# getLogPath(fg)
# tree, mst, hist = solveTree!(fg, recordcliqs=ls(fg))
#
#
#
# printCliqHistorySummary(tree,:x10)
#
# getClique(tree, :x10)
#
# csmc1 = hist[1][6][4]
# csfg = csmc1.cliqSubFg
# drawGraph(csfg)
#
# stuff = sandboxCliqResolveStep(tree, :x10, 6)
#
#
# getKDE(hist[1][6][4].cliqSubFg, :x10) |> getPoints
# getKDE(hist[1][7][4].cliqSubFg, :x10) |> getPoints
# getKDE(stuff[4].cliqSubFg, :x10) |> getPoints
#
# getKDE(fg, :x10) |> getPoints
#
# tree = wipeBuildNewTree!(fg)
#
# getData(getClique(tree, :x9 ))
# getData(getClique(tree, :x10))



#
3 changes: 2 additions & 1 deletion test/testMultimodalRangeBearing.jl
Expand Up @@ -45,7 +45,8 @@ addFactor!(fg, [:x0;], NorthSouthPartial(Normal(0,1.0)))
global p2br = Pose2Point2BearingRange(Normal(0,0.1),Normal(20.0,1.0))
addFactor!(fg, [:x0; :l1; :l2], p2br, multihypo=[1.0; 0.5; 0.5])

predictbelief(fg, :x0, ls(fg, :x0))

predictbelief(fg, :x0, :) #ls(fg, :x0))

##

Expand Down

0 comments on commit 9db72b1

Please sign in to comment.