How to implement indoor SLAM in mobile robot with stereo vision?
Hi there! I am currently developing a autonomous humanoid home assistant robot.
This robot have two cameras and stereo vision. I want to make this robot navigate in home. I spend lot time googling about SLAM and as far as I understand for it consists of three main steps
1. Localize robot using odometry
2. Build map using depth images
3. Navigate in this map, build routes and so on
I found some info about localization and odometry(here and here) and i found suitable implementation that works good with KITTI dataset, but when i tried to use it with my cameras and calibration parameters it do not works but only shows one point. I was able to reproduce this by skipping every second frame from dataset. But this topic is most clear for me and i believe that i can solve this problems.
The third step is also relatively clear for me - i found a lot of articles about navigation algorithms such as A* and i think that i can implement this.
But i could not find any understandable information about map building using stereo map(not lidars or something like it). As far i understand for do it i must store depth data in some format relative robots position estimated by odometry, and it will be a 2D view from above. But my best approach was to iterate over depth image`s rows and get the most common depth value from column. It looks as follows
This map is very unstable and i think that i doing something wrong and missed something important.
So i have several questions:
- Where i can find some easy to understand articles or maybe tutorials about visual odometry, map building and indoor robot navigation in general?
- Is there ready for use implementation of odometry and map building made for indoor robots?
- How to build map using a stereo vision?
- Why that implementation not works with robots (as i think it is because of slow speed) and how to solve this?
I am sorry for lot of questions but now i confused and cannot find any more information that i can understand and so i want some explanation from more experienced people.
Thanks!