Are there any ICP based localization methods implemented in ROS?
Robotics beginner (CSE undergraduate) here. I have been working on a octomap based navigation system that explores an unknown terrain for some time. I completed a prototype navigation system and are now having some issues with localization.
I used dead reckoning so far since i cannot use a prebuilt occupancy grid (system intended for a mapless or deformed environment) but now need more accuracy. I came across bundlefusion and elasticFusion that focus on 3D Dense SLAM. but they have specifically said that they are not compatible with ROS. Because of this, I started looking for already implemented ICP based mapping and localization and came across these two. mrpt_icp_slam_2d which only supports 2D and ethzasl_icp_mapping which doesn't support kinetic.
Are there any other ros packages that i can use out of the box?
rtabmap might be of interest, it does slam from 3d data and also visual odometry. There is some ICP functionality, for example here it is talked about link text It can also output an octomap if build that way, Iam not sure it can take in an octomap for localization though.
"dead reckoning"? Odometry only that means?
yeah. dead-reckoning means using just wheel encoders. i will look into rtabmap
I went through it and here under 3.Localization mode, it says that it needs a previously built map (possibly using rtabmap itself,
In localization mode, a map large enough (>30 locations) must be already created (using rgbd_mapping.launch above). In rtabmapviz (GUI), click on "Localization" in the "Detection" menu. By looking over locations in the map, RTAB-Map would localize itself in it by finding a loop closure. Once a loop closure is found, the odometry is corrected and the current cloud will be aligned to the map.
so does this means it'll, build the map -> find a loop closure -> correct odometry -> adjust the current cloud
would this happen on the fly (incremental) or in the end (first run to map without localization, and then from 2nd run onward it'll have the map and use it for localization) ?
rtabmap does slam (simultanious localization AND mapping). As far as I know yes rtabmap can also build up on a existing map. I only use it for localizatioin with a prebuild database(map) and dont want it to ad to it, but i red that its done. Maybe try without the "delete databse on startup" argument and use slam mode. However usualy (most usecases/tutorials etc.) navigation uses a prebuild map and for this the map is only loaded at the node/package startup, to update the map for navigation you would need a navigation node to make service calls to map_server repeatadly. Iam sure the rtabmap people have already a working solution for this. rtabmap also does visual odometry, I dont know how exactly that works, depending on your usecase that might be of interest for sensorfusion or plain better then wheelodometry. How accurate do you wanna be? However ...(more)
Direct answer to your question: "...adjust current cloud" with visual odometry enabled this should happen (although Iam not sure how it works). I had problems with not correct alignment/building of the map when using wheelodometry, it seems rtabmap in this case just trusts the odometry is 100% acurate. But I may be wrong and there was just something wrong with the settings, in the end I got odometry good enough. Anyway people using visual odometry doesnt seem to have this issue. I have even seen a handheld 3d scanner using only rgb-d camera and rtabmap, that seemed to work out to cm accuracy, at close range at least.
That database use is what worries me. I'll try to run it and see. my use case is creating a map for a map less environment (eg: disaster zone). So it will be like a blind walk for the robot. localization needs to be able to adept to it. will see what i can do. Thanks anyways
Sound like rtabmap with visual odometry does exactly that (minus navigation). I wouldnt be bothered with this challenge if computing power isnt an issue. The only thing that might be tricky is if you have to use your own lighting, as a moving light will change the apearance (shadow angles and such) and rtabmap works with somehow recognizing features, for odometry at least. Soft light would be important in this case. In daylight this should be "easy". Wish you the best. Would appreciate it if you post an update after you tested it. You are welcome.