Skip to content

[rendu] MovingObject Group1

Elouan requested to merge matthieu-lucchesi/slam_epita:elouan into feat/ROS2

Group members

elouan.vincent matthieu.lucchesi quentin.fournel erwann.mevel

Goal

In SLAM processes, one of the problems that can occur is the appearance of moving objects in the scene. It will occult a part of the scene and if some keypoints are found on it, it can pollute the map and create big failure cases. An example is given below. People were following the robot, creating a trace in the map. For now, to reject the moving objects, the process is to extract only the voxels that contain X points. This means that, if a voxel has been seen only once during LiDAR motion, it must have laid in a moving object. The problem of this method is that, if the motion is too big, a majority of voxels will have been seen only once and the SLAM will be delocalized. Moreover, the parameterization of this feature is very complicated. In this merge request, we propose to modify some parameters in the main configuration a method to reject points that should be added on the trajectory of the sensor.

We can make the hypothesis that if the sensor passes to a place, it is that there is no object in this area. Thus, if points are found on this trajectory, it is probably because it is a moving object.

Our method builds on this idea, removing all points that are on this position within a given radius.

Changes

  • In this file we added a new object parameter that stores sensor last positions. We also modified the function UpdateMapsUsingTworld():
  1. Before registering a point on the map, we verify if each point is in the sensor trajectory before adding it to the local maps.
  2. To do so, we also modifed AddFrames() method to store sensor positions in Trajectory list, which behave like a FIFO. When the maximum size is reached, the oldest position is removed from the list.

Results

Commands to reproduce the results

On our branch: colcon build --base-paths slam_epita/ros2_wrapping --cmake-args -DCMAKE_BUILD_TYPE=Release

ros2 launch lidar_slam slam_velodyne.py aggregate:=true

ros2 bag play --clock path/to/this_bag.bag

Results

Before we added our method:Screenshot_from_2023-11-05_21-46-51

After: Screenshot_from_2023-11-05_21-39-02

Even though some points of the moving object are renaming, we filter most of them. But we can also notice that plane surfaces like walls have a lower resolution than without our method.

Performances

  • The implementation of our method seems to slow down SLAM, because for each point we need to iterate over the points of position of the sensor. A solution to this would be to delete points at the end of the run to not impact the SLAM while its running.
  • The method do not only remove moving objects point, it also removes some static object point, that could lead to an inaccurate map.

What remains to solve

  • Find better parameters
  • Optimize you method
Edited by Elouan

Merge request reports