ethz-asl / segmap

A map representation based on 3D segments
BSD 3-Clause "New" or "Revised" License
1.06k stars 394 forks source link

the matching of dynamic objects #58

Closed lyk666 closed 6 years ago

lyk666 commented 6 years ago

Hi, thanks for all your works. I'm very glad to do your experiment again. However, I have encountered some problems when reading your paper, How do you solve the matching of dynamic objects, such as moving cars, in urban scenes? For example, when the robot comes back to the same place, the car parked next to the road may have gone.At this point, the segments of source clouds and target clouds may be different.

rdube commented 6 years ago

Hi @lyk666, at this point, we do not explicitly deal with dynamic objects. One can adjust the minimum_point_number_per_voxel parameter to filter out fast changing dynamics by requiring a certain number of detection before considering a voxel grid as active.

For slower dynamics, eg. in the case of parked vehicles as you mentioned, the present method can still work in many cases as it does not require all segments to be re-observable but only a subset (eg. 4 to 6) are sufficient to recognize a place. In the KITTI examples one can note that not only cars are used for localizing and that the number of matches is generally well above the current threshold (4).

Fyi, we are currently working on an upgrade where we try to estimate whether a segment is potentially dynamic in order to avoid using it for localization.

I hope this answers your question!

lyk666 commented 6 years ago

Hi @rdube ,Thank you very much for your reply. I noticed that the segments that are normally used for matching are parked vehicle instead of other objects,such as tree and wall, and if we remove all these parked vehicle, will the matching fail?

rdube commented 6 years ago

Yes there are currently a lot of cars used for matching as they are very distinctive and highly present in the environment. We will soon show a demonstration where we can localize without relying on the cars. In the meantime you can have a look at the following demonstration where a region growing segmentation is used: https://www.youtube.com/watch?v=JJhEkIA1xSE&t=3s

lyk666 commented 6 years ago

Hi, I am really looking forward to seeing this demo. Can we remove parked cars by semantic segmentation in your recent demonstration?

rdube commented 6 years ago

This is not implemented but yes that should be possible. Let us know if you plan to give it a shot!

lykhahaha commented 6 years ago

Oh, I'm going to do it. I tried to delete some of the points, and then got a new PCD file. But the loading point cloud fails, it suggests as follows:

[pcl::PCDReader::read] Number of points read (3300701) is different than expected (4722247) F1107 20:08:27.094525 1259 common.hpp:136] Check failed: pcl::io::loadPCDFile(filename, *cloud) != -1 (-1 vs. -1) Failed to load cloud: /home/exbot/ros_catkin_ws/src/segmatch/laser_mapper/demonstration_files/kitti/project_inliers.pcd. Check failure stack trace: [laser_mapper-3] process has died [pid 1259, exit code -6, cmd /home/exbot/ros_catkin_ws/devel/lib/laser_mapper/laser_mapper_node __name:=laser_mapper __log:=/home/exbot/.ros/log/6d5291ee-c3b3-11e7-a536-b8975ac33022/laser_mapper-3.log]. log file: /home/exbot/.ros/log/6d5291ee-c3b3-11e7-a536-b8975ac33022/laser_mapper-3*.log

rdube commented 6 years ago

As a hint, we might also be looking into this!

Concerning the error, make sure that you properly set the height and the width of the cloud. See: https://github.com/ethz-asl/laser_slam/blob/master/laser_slam_ros/include/laser_slam_ros/common.hpp#L219

lykhahaha commented 6 years ago

So it is. thank you very much for your reply. I look forward to your new progress, and I will keep trying. I also want to know where is the PCD map we created with laser_mapper? (Where does the map save when we launch laser_mapper kitti_loop_closure.launch?)

rdube commented 6 years ago

@lyk666 @yongkaili this is very preliminary example of how it might look like. Avoiding the use of potentially dynamic objects (here in pink) for place recognition.

@yongkaili as for saving the map, one can use the /save_map rosservice such as:

$ rosservice call /laser_mapper/save_map "filename: data: '/tmp/test.pcd'"

You can use the PCL tool pcd2vtk to convert it for visualization.

This solution might change though to be able to produce a map which is fully loop closed. If you have further issue regarding map saving I would encourage you to open a dedicated issue.

Can we close the present issue?

no_cars

lykhahaha commented 6 years ago

Certainly. Thank you for your help.