Closed nickponline closed 6 years ago
Here is a simple dataset with 10 3D points and a second which is just the first with the x coordinate offset by 1.0:
reference.csv
0.90821682 0.17055668 0.43373967
0.12891558 0.02148021 0.13497946
0.16901483 0.98805444 0.04437725
0.80122159 0.32292443 0.14591973
0.88935897 0.98422458 0.34453548
0.66926361 0.46065528 0.33612961
0.68486366 0.65538499 0.84244886
0.72579089 0.41827523 0.57473447
0.89471663 0.86449667 0.94694097
0.51761563 0.37865354 0.03339747
reading.csv
1.90821682 0.17055668 0.43373967
1.12891558 0.02148021 0.13497946
1.16901483 0.98805444 0.04437725
1.80122159 0.32292443 0.14591973
1.88935897 0.98422458 0.34453548
1.66926361 0.46065528 0.33612961
1.68486366 0.65538499 0.84244886
1.72579089 0.41827523 0.57473447
1.89471663 0.86449667 0.94694097
1.51761563 0.37865354 0.03339747
Final transformation:
0.278974 -0.528653 0.801686 3374.46
0.410202 0.820435 0.398273 484.883
-0.868279 0.217745 0.445734 4457.86
0 0 0 1
Which seems really weird, I get the same output using:
./icp_simple reference.csv reading.csv
Thanks so much for the help, I really appreciate it. Just feel I'm mis-understanding something, but I've read the docs a number of times now :)
Be careful when you produce small examples. ICP is like doing a robust regression for line fitting. If you remove too many points, outlier filters will remove good points.
Here is your example with a functional configuration file:
readingDataPointsFilters:
referenceDataPointsFilters:
matcher:
KDTreeMatcher:
knn: 1
epsilon: 0
outlierFilters:
errorMinimizer:
PointToPointErrorMinimizer
transformationCheckers:
- CounterTransformationChecker:
maxIterationCount: 40
- DifferentialTransformationChecker:
minDiffRotErr: 0.01
minDiffTransErr: 0.01
smoothLength: 4
#inspector:
# NullInspector
inspector:
VTKFileInspector:
baseFileName: pointmatcher-run1
dumpPerfOnExit: 0
dumpStats: 0
dumpIterationInfo: 1
dumpDataLinks: 1
dumpReading: 1
dumpReference: 1
logger:
NullLogger
# FileLogger
This config won't work with more complex point clouds.
That makes sense for the small (too simple example), I'm still curious what is going wrong with the CSV in the first post, where the transformation is also very drastic. The two clouds should only be off by a couple of meter but instead the translation magnitude of almost 9000.
On Tue, Oct 17, 2017 at 10:32 AM, François Pomerleau < notifications@github.com> wrote:
Be careful when you produce small examples. ICP is like doing a robust regression for line fitting. If you remove too many points, outlier filters will remove good points.
Here is your example with a functional configuration file: [image: result] https://user-images.githubusercontent.com/502089/31678109-17747216-b33b-11e7-8311-c581578cb518.gif
readingDataPointsFilters:
referenceDataPointsFilters:
matcher: KDTreeMatcher: knn: 1 epsilon: 0
outlierFilters:
errorMinimizer: PointToPointErrorMinimizer
transformationCheckers:
- CounterTransformationChecker: maxIterationCount: 40
- DifferentialTransformationChecker: minDiffRotErr: 0.01 minDiffTransErr: 0.01 smoothLength: 4
inspector:
NullInspector
inspector: VTKFileInspector: baseFileName: pointmatcher-run1 dumpPerfOnExit: 0 dumpStats: 0 dumpIterationInfo: 1 dumpDataLinks: 1 dumpReading: 1 dumpReference: 1
logger: NullLogger
FileLogger
This config won't work with more complex point clouds.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/ethz-asl/libpointmatcher/issues/227#issuecomment-337298210, or mute the thread https://github.com/notifications/unsubscribe-auth/AAkBR167iKoDhrD_--StZAtUPROXB6x7ks5stOShgaJpZM4P7RfN .
You can check what is a happening for each iteration using Paraview and the VTKFileInspector
from the last config.
[EDIT: See second post for a much simpler example]
I am registering two very similar point clouds using the example application and example config.yaml.
Which outputs
The final transform is given as:
When I look at the difference between in and out dataset it definitely not translated by that amount. Am I mis-understanding something?
Here is my reference: https://www.dropbox.com/s/ocf1u1ybuqpj8y8/reference.csv?dl=0
and my reading: https://www.dropbox.com/s/2s9wewixlo7e8q2/reading.csv?dl=0