We help IT Professionals succeed at work.

# SLAM on Windows

on
Hi all,  I am searching for a Simultaneous Localisation And Mapping algorithm for a project.  There seem to be many open source,  but they are all Linux only!  If anyone is aware of a windows /visual studio project that is available to play with,  in any programming language,  please point me at it!

Thanks!
Comment
Watch Question

## View Solution Only

Commented:
If you do a Google search from SLAM A 00  you will find a set of lectures on this topic by Claus Brenner.
The relevant Python code is also available.  You should be able to run Python on a Windows machine.
There are several other SLAM lectures available.  The math involved is a surprisingly dense.

Commented:
Dense indeed! Thanks for the link,  I will look into the course.  Possibly I am over thinking what I need though.
I just want to be able to move a laser scanner around and accurately map its  trajectory.
Is slam the best way to approach this?

Commented:
>>  I just want to be able to move a laser scanner around and accurately map its  trajectory.

What is a laser scanner?
What are its specifications: operating requirements, range, accuracy, output data format, ...?

How are you going to move it?
How do you determine its position and orientation?  Dead reckoning and a compass, or GPS?

What is your operating environment?
A table top, a room, a parking lot, or Sherwood Forest?
Do you need to avoid or map obstacles?

What are your accuracy requirements?

Commented:
Hi again. A laser scanner such as this one:

http://www.dfrobot.com/index.php?route=product/product&product_id=1125#.U2tSqvmSwc7

it is basically a spinning laser that constantly scans and returns distance.

the output data is returned as angle and distance, eg:

angle: 350.58  distance: 120

Imagine that unit, mounted on a cube. The cube is handheld, so any move is possible. I hope to use the lidar data from the laser to calculate the translation and rotation of the cube in realtime by measuring the changes in distance from each scan. The first scan will map the surroundings, the second, read the change and therefore work out the distance traveled.
That is the plan, anyway!

thanks again!

Commented:
How fast does the laser spin?
How many data points to you get per scan?  [Angular Resolution]
What are the maximum range and the range accuracy and resolution?

Work through a simple 2-D case first.
Suppose you are in a triangular room (three different length sides).
If you take the first scan with Scanner 0 => North, and keep it level, you should be able to tell where you are in the room and what direction the scanner is pointing.  This is just simple trigonometry.  All you need are the distances to the three corners.

If the environment gets more complicated: if targets can move, or vary vertically, or if you need to tilt the scanner to get 3-D information then the math gets much hairier.

You also need to decide on your mission.  Are you trying to map the environment, or calculate your trajectory in it?

Commented:
The speed is adjustable,  but can be  around 470 rpm,  and it gives 2000 samples per second.

Distance range: 0.2 - 6m
Angular range: 0-360°
Distance resolution <0.5mm (1% of the distance)
Angular resolution: =<1°
Sample duration: 0.5 miliseconds
Sample frequency: >=2000Hz
Scan rate: 5.5Hz

No need for mapping,  I just need the trajectory.
I can get my head around the theory,  until the sensor is tilted.  Then it boggles the mind.
Is it slam that I need to be looking at?  Or is there a simpler (but possibly not much simpler)  way to just get the translation /rotation data without mapping?
Commented:
You really need to describe (in detail and in English) what you are trying to do.
Not for me, but for yourself.  You can't solve a problem like this until it is well specified.

If the scanner doesn't have a tilt monitor, how are you going to deal with the data?
If you don't have a compass, you can't get an absolute direction.

If your environment consists of an infinite horizontal plane with two stationary vertical poles,
and you can keep the scanner level,
then you can find your relative position with very simple trigonometry.

You just need to define one pole as the North Pole, and the line between the two poles as the Zero Meridian.
You can find level by standing still and adjusting the scanner to minimize the two distances.
This would give you a triangle with direct measurements of two sides and the included angle.
The Law of Sines would give you a solvable set of three equations and three unknowns (the distance between the poles and the other two angles).
The the length of the side between the scanner and the North Pole and the angle between that side and Prime Meridian define you position in polar coordinates.

If your environment contains just a coffee table . . .
It looks like four poles to a short robot, which may be fine.
It looks like a block to a table-top height robot, with is probably fine.
But it may be invisible to a tall robot, like a blind person with a cane and clothes line, not good at all.

Commented:
Sensible.  Will get a more solid plan together first.  Thanks for your help.