# 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