Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Robotic SLAM algorithms

  1. Sep 17, 2012 #1
    I want to learn about robotics. Specifically, I want to implement and use SLAM algorithms. This is for hobbyist reasons, and to hopefully fuel a career change.

    I have a strong math background. My programming skills are not finely honed, but they aren't bad either. I went through the free, online Stanford machine learning course in its initial offering, but did not have time to complete all of the coursework. Working through it is a major goal of mine for the coming weeks.

    I have a thick, thick stack of research papers on SLAM that I've been reading through. I feel that I am starting to come to understand the subject fairly well, but I am unsure of how to break into actually building my own practical monocular vision SLAM systems. Would/could anyone here give me advice on how to do that, and where I might find better tutelage?
  2. jcsd
  3. Sep 17, 2012 #2
  4. Sep 17, 2012 #3
    Re: Hobbyist wanting to implement SLAM algorithms

    My apologies if I posted in the wrong place. However, I am not sure that SLAM falls under Mechanical Engineering: I don't need help making the physical robot, I can do that. I need help programming it.

    Specifically, for how to break into programing monocular, visual SLAM.

    Perhaps that would fit better under Electrical Engineering, or back where I originally posted it in Computers and Technology?
  5. Sep 17, 2012 #4
    What you're after falls under mechatronics engineering, which is a branch of mechanical engineering with a mix of electrical. So it really could be placed in either. For programming help, you just gotta find the right person from either. I can't help, my programming skills have left me years ago.
  6. Sep 17, 2012 #5


    User Avatar

    Staff: Mentor

    (I'll move it to EE for now, and we can see how it goes. It might go best back in Programming, but we can give it a day or two in EE.)

    Welcome to the PF.

    Can you say a bit more about what SLAM is? Why is it used for robotic programming?
  7. Sep 18, 2012 #6


    User Avatar
    Science Advisor
    Homework Helper

    Go to http://openslam.org/ and clikck on "What's SLAM".

    That site probably has a lot of good information for the OP as well.
  8. Sep 19, 2012 #7
    SLAM is a class of computer algorithms, that are related to solving the artificial intelligence problem of "what does the world look like, and where am I within it" without any a priori knowledge. That is why I put it in the computer forum. Because its a computer question. I only suggested EE as an alternative forum because its less worse than mechanical.

    Yes, its related to mechatronics. Mechatronics is not a branch of ME (or EE or CS), it is an interdisciplinary field. This question is about how to gain experience programming a specific class of algorithms, so I put it in the board most closely related to implementing algorithms.

    I've seen the openslam.org website. I've done plenty of research (hours googling, plus almost an inch thick stack of printed out research papers), but my problem is that I am running ahead of my abilities/experience. I don't need to be looking at outlier-robust graph-based loop closure. I need a practical "baby's first SLAM algorithm" approach: I lack the benefit of a university to direct me.

    I know that the naive EKF-based SLAM does not scale well, but is it where I should start? 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? Etc, etc. I understand (most of) the math I've found in the papers, but I do not yet see how to turn it into code. What is the simplest useful thing relevant to my aspirations I can build? Once that is made, what can I build with it? What should my progression look like?

    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:

    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​

    It started with the smallest thing I was confident building/could easily find very simple examples of, and then I iteratively refined it along a planned path. I am looking for help finding that path for SLAM.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook