# Is it possible to map the 2D room map of room using opencv in android?

I want to create a 2D room mapping using camera in android using opencv without laser light. I tried last few weeks but not getting proper idea and not succeed yet :(.

I want to implement like this 2d-room-mapping-with-a-laser-and-a-webcam/.

edit retag close merge delete

Sort by ยป oldest newest most voted

SLAM in 3D is hard and as far as I know still considered "unsolved". It's even harder when you have only 2d image data. First you'd have to extract depth data from that. This can be done by extracting 2D feature points from two consecutive frames and match them with RANSAC and friends in order to get the 6DOF transformation from one frame to the other. This is called structure from motion in this case. Maybe you can input some constraints here like not moving the camera but just rotating about one axis. This would reduce parameter space and therefore time complexity. After the registration you'd 3D data, which could be projected to the ground easily. The projected points can be threated as laserscanner data and fed into the mapping algorithm. The hardest part here is the error drift. Have a look at http://openslam.org/rgbdslam.html. Although they are using additional depth data, their algorithm drifts a lot over time, corrupting the map.

Summary: 1st look for a structure from motion implementation. 2nd, be aware of the fact, that this is not easy and needs some understanding of SLAM, mapping, bayes filters (resp. particle filters), error relaxation and ... stuff :)

PS Google is trying something similar but more advanced with project tango. I think they use stereo cameras there.

more

" Maybe you can input some constraints here like not moving the camera but just rotating about one axis." This is the exact opposite of what should be done! If the camera is rotated around its center, you get a nice panoramic image, but you have no chance to get any(!) 3d information. (What you suggest is a stereo-setup without any baseline or trying to capture 3d info from two images taken at the same position). Regarding the rgbdslam: We implemented a fairly well loop closing so that the drift error is reduced as soon as you revisit positions in your map. In which scenarios have you experienced drift?

( 2014-08-27 10:36:07 -0500 )edit

Yes, of course you are right. Translation is better than rotation. By rereading my answer ... it's not done just by projecting 3D points, that are computed by from two or more consecutive rgb frames, onto the ground and then 2D SLAM it. The reference frame for those points is needed of course. That being said ... you need a full 3D slam for creating your 2D map or at least restrict rotation to one pointing up (I guess that is what I meant in the answer). I tested rgbd-slam some time ago in our office kitchen and experienced and experienced frames, that were missaligned by like 10 degree rotation. BUT my purpose was to generate a 3D model. So "drifts a lot" might be an overstatement in terms of localization

( 2014-08-27 17:30:48 -0500 )edit

more

Official site

GitHub

Wiki

Documentation