The ICP algorithms spends most of its time in creating the point pairs. D-trees (here ) have been suggested to speed up the data access [21]. The d-trees are a binary tree data structure with terminal buckets. The data is stored in the buckets and the keys are selected, such that a data space is divided into two equal parts. This ensures that a data point can be selected in . The proposed SLAM algorithm benefits from fast data access. In addition, the time spent on creating the tree is important.
For a given data set, larger bucket size results in smaller number of terminal buckets and hence less computational time to build the tree. The implemented algorithm uses a bucket size of 10 points and cuts recursively the scanned volume in two equal-sized halves. Once the tree is built, the nearest neighbor search for a given data point starts at the root of the tree. Each tree node contains the cut dimension, i.e., orientation of the cut plane and the cut value. By comparing the coordinate of the given 3D point at the cut dimension with the cut value of this tree node, the search knows which branch to go for next level of tree node, it will compare the cut value of this tree node and go down further. This process is repeated until the terminal bucket that contains the closest data points is reached. It may occur, that the true neighbor lies in a different bucket, e.g., if the distance between and a boundary of its bucket region is less than the distance and . In this case d-tree algorithms have to backtrack, until all buckets that lie within the radius are explored. This is known as the Ball-Within-Bounds tests [13]. The number of distance computations is minimal for the smallest bucket size, i.e., one point per bucket. Nevertheless the running time of a d-tree decreases for a slightly larger bucket size. This is due to the greater cost of backtracking as compared to a simple linear traversal of a small list within the bucket.
Recently, Greenspan and Yurick introduced Approximate d-trees (Apr-d-tree) [13]. The idea behind this is to return as an approximate nearest neighbor the closest point in the bucket region where lies. This value is determined from the depth-first search, thus expensive Ball-Within-Bounds tests and backtracking are not used [13]. In addition to these ideas we avoid the linear search within the bucket. During the computation of the Apr-d-tree, the mean values of the points within a bucket are computed and stored. Then the mean value of the bucket is used as approximate nearest neighbor, replacing the linear search.
The search using the Apr-d-tree is applied until the error function (1) stops decreasing. To avoid misalignments due to the approximation, the registration algorithm is restarted using the normal d-tree search. A few iterations (usually 1-3) are needed for this final corrections. Fig. 5 shows the registration time of two 3D scans in dependence to the bucket size using d-tree or Apr-d-tree search. Both search methods have their best performance with a bucket size of 10 points.
|