Baby's first SLAM algorithm
I have a strong math background, but am a self-taught programmer. There are gaps in my knowledge/abilities. I've recently had some really invigorating successes with coding in OpenCV, that has bolstered my confidence. I want to specialize in mechatronics, and specifically in computer vision. Within that, I find SLAM (simultaneous localization and mapping) algorithms very interesting. I want to gain experience in implementing SLAM algorithms.
How do I do that? What is the smallest meaningful & useful approach that I can implement first?
I've been doing a lot of reading on the extant research, and am fairly comfortable with the material (though I am not yet comfortable building something on my own). Where is the best starting point for me? Should I do FastSLAM? FastSLAM 2? Build my own 2-d bearings-only SLAM simulator, for a virtual agent? Estimate a path from a set video? Some much simpler task?
I am looking for a roadmap: stages I can plan to build, with each building off of the other. For example, I wanted to build my own CUDA-enabled genetic algorithm that could approximate a given image using a finite number of colored object primitives. This is what my roadmap for that project looked like:
Build a bare-bones, single population GA (find a float x such that e^x = 1024) in Python
Convert Python to C++
Use OpenCV's drawing functions to output a visual plot of the state of the population over time (I already had experience with OCV)
--in a separate program, build a "Hello World" equivalent in CUDA
Port the evaluation function for the GA to CUDA
Alter the eval function to find integers a and b such that e^(a/b) = 1024
Rewrite the eval function to find integers x,y,r,g so that it finds the single circle which best approximates a grayscale input image
Alter it to find a series of circles.
Alter it to use the HSV color space instead of grayscale
Alter it to use triangles instead of circles
Alter it to use a set of image primitives (say, a binary image)
Expand the GA to use multiple populations
Experiment with further customization