Skip to content

Commit 3d4d1fa

Browse files
authored
Merge pull request #52 from PRBonn/gupta/deskewing
Deskew Scans in the Global Mapping Run
2 parents 09cef75 + 7ff59b0 commit 3d4d1fa

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

kiss_slam/kiss_slam_pybind/kiss_slam_pybind.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ PYBIND11_MODULE(kiss_slam_pybind, m) {
7474
.def("_per_voxel_point_and_normal", &VoxelMap::PerVoxelPointAndNormal);
7575

7676
py::class_<OccupancyMapper> grid_mapper(m, "_OccupancyMapper", "Don't use this");
77-
grid_mapper.def(py::init<float, float>(), "resolution"_a, "max_range"_a)
77+
grid_mapper.def(py::init<float>(), "resolution"_a)
7878
.def("_integrate_frame", &OccupancyMapper::IntegrateFrame, "pointcloud"_a, "pose"_a)
7979
.def("_get_active_voxels", &OccupancyMapper::GetOccupancyInformation)
8080
.def("_get_occupied_voxels", &OccupancyMapper::GetOccupiedVoxels, "probability_threshold"_a)

kiss_slam/kiss_slam_pybind/occupancy_mapper/occupancy_mapper.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,18 @@ inline float LogOddsOccupied(const float probability) {
4141
} // namespace
4242

4343
namespace occupancy_mapper {
44-
OccupancyMapper::OccupancyMapper(const float resolution, const float max_range)
45-
: max_range_(max_range), map_(resolution), accessor_(map_.createAccessor()) {}
44+
OccupancyMapper::OccupancyMapper(const float resolution)
45+
: map_(resolution), accessor_(map_.createAccessor()) {}
4646

4747
void OccupancyMapper::IntegrateFrame(const Vector3fVector &pointcloud,
4848
const Eigen::Matrix4f &pose) {
4949
const Eigen::Matrix3f &R = pose.block<3, 3>(0, 0);
5050
const Eigen::Vector3f &t = pose.block<3, 1>(0, 3);
5151
const auto start_coord = map_.posToCoord(t);
5252
std::for_each(pointcloud.cbegin(), pointcloud.cend(), [&](const Eigen::Vector3f &point) {
53-
const auto point_range = point.norm();
54-
if (point_range < max_range_) {
55-
const Eigen::Vector3f point_tf = R * point + t;
56-
const auto end_coord = map_.posToCoord(point_tf);
57-
Bresenham3DLine(start_coord, end_coord);
58-
}
53+
const Eigen::Vector3f point_tf = R * point + t;
54+
const auto end_coord = map_.posToCoord(point_tf);
55+
Bresenham3DLine(start_coord, end_coord);
5956
});
6057
}
6158

kiss_slam/kiss_slam_pybind/occupancy_mapper/occupancy_mapper.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ using Vector3iVector = std::vector<Eigen::Vector3i>;
3535
namespace occupancy_mapper {
3636
class OccupancyMapper {
3737
public:
38-
OccupancyMapper(const float resolution, const float max_range);
38+
OccupancyMapper(const float resolution);
3939
~OccupancyMapper() = default;
4040

4141
void IntegrateFrame(const Vector3fVector &pointcloud, const Eigen::Matrix4f &pose);
@@ -50,7 +50,6 @@ class OccupancyMapper {
5050
void Bresenham3DLine(const Bonxai::CoordT &start_coord, const Bonxai::CoordT &end_coord);
5151
void UpdateVoxelOccupancy(const Bonxai::CoordT &coord, const float value);
5252

53-
float max_range_ = 0.0f;
5453
Bonxai::VoxelGrid<float> map_;
5554
using AccessorType = typename Bonxai::VoxelGrid<float>::Accessor;
5655
AccessorType accessor_;

kiss_slam/occupancy_mapper.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ def __init__(
3838
config: OccupancyMapperConfig,
3939
):
4040
self.config = config
41-
self.occupancy_mapping_pipeline = kiss_slam_pybind._OccupancyMapper(
42-
self.config.resolution, self.config.max_range
43-
)
41+
self.occupancy_mapping_pipeline = kiss_slam_pybind._OccupancyMapper(self.config.resolution)
4442

4543
def integrate_frame(self, frame: np.ndarray, pose: np.ndarray):
4644
frame_downsampled = voxel_down_sample(frame, self.config.resolution).astype(np.float32)

kiss_slam/pipeline.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727

2828
import numpy as np
2929
from kiss_icp.pipeline import OdometryPipeline
30-
from map_closures import map_closures
3130
from tqdm import tqdm, trange
3231

3332
from kiss_slam.config import load_config
@@ -83,18 +82,26 @@ def _run_pipeline(self):
8382

8483
def _global_mapping(self):
8584
if self.refuse_scans:
85+
from kiss_icp.preprocess import get_preprocessor
86+
8687
if hasattr(self._dataset, "reset"):
8788
self._dataset.reset()
88-
ref_ground_alignment = map_closures.align_map_to_local_ground(
89-
self.kiss_slam.local_map_graph[0].pcd.point.positions.cpu().numpy(),
90-
self.slam_config.odometry.mapping.voxel_size,
89+
ref_ground_alignment = self.kiss_slam.closer.detector.get_ground_alignment_from_id(0)
90+
deskewing_deltas = np.vstack(
91+
(
92+
np.eye(4)[None],
93+
np.eye(4)[None],
94+
np.linalg.inv(self.poses[:-2]) @ self.poses[1:-1],
95+
)
9196
)
97+
preprocessor = get_preprocessor(self.config)
9298
occupancy_grid_mapper = OccupancyGridMapper(self.slam_config.occupancy_mapper)
9399
print("KissSLAM| Computing Occupancy Grid")
94100
for idx in trange(self._first, self._last, unit=" frames", dynamic_ncols=True):
95-
scan, _ = self._next(idx)
101+
scan, timestamps = self._next(idx)
102+
deskewed_scan = preprocessor.preprocess(scan, timestamps, deskewing_deltas[idx])
96103
occupancy_grid_mapper.integrate_frame(
97-
scan, ref_ground_alignment @ self.poses[idx - self._first]
104+
deskewed_scan, ref_ground_alignment @ self.poses[idx - self._first]
98105
)
99106
occupancy_grid_mapper.compute_3d_occupancy_information()
100107
occupancy_grid_mapper.compute_2d_occupancy_information()

0 commit comments

Comments
 (0)