Society of Robots - Robot Forum

Software => Software => Topic started by: hhnavid on May 24, 2012, 10:09:29 AM

Title: localization in occupancy grid
Post by: hhnavid on May 24, 2012, 10:09:29 AM
hello all,
i'm new to robotic and i want to know given the occupancy grid of an environment how can a robot find which cell it is in? the robot has GPS, laser range finder, camera, wheel encoder, IMU.

any help would be great. thank in advance. :)
Title: Re: localization in occupancy grid
Post by: mstacho on May 24, 2012, 02:38:08 PM
Um...if you have GPS...can't you just ask GPS where the robot is, then check it against all your grids, and call it a day?

MIKE
Title: Re: localization in occupancy grid
Post by: hhnavid on May 24, 2012, 09:03:02 PM
actually the GPS i have in hand is a cheap one and its error is between 5~25(m). the cell area of my grid is smaller than 5*5(m^2) so using GPS alone won't do me any good. what i'm after is that i want to detect the exact cell the robot is in.

any more help?
Title: Re: localization in occupancy grid
Post by: Wesley888 on May 25, 2012, 01:22:40 AM
I have a similar issue as well.  Since I have a ArduPilot on my Heli, I've noticed that for relative directions, it's good, but the GPS is not reliable for absolute location.

I'm now programming an autonomous lawn bot but I don't want it to wander off outside.  Using fencing signal is just too low tech.

Since the wheel would slip and skip on lawn, wheel encoder doesn't have much help.  I'm thinking using a ranger finder to survey the 360 surrounding dimension to make a guess on where is location is in a few known confine.
Title: Re: localization in occupancy grid
Post by: mstacho on May 25, 2012, 07:09:49 AM
Kalman filtering helps a LOT, although it's not easy to learn if you're just starting out.  My guess is that, since you have a fairly sophisticated robot you can probably do a bit of math and coding.  KF helps a TON when you're trying to reduce noise, and sometimes even drift, on IMUs.  GPS is excellent for speed measurements, so you can use it as a corrective term in a KF for your accelerometer to destroy the drift, and be on your way.

Ultimately, you have a few other solutions as well:

1) GPS is not very accurate (well...to be fair, the satellites ARE 20000+km above you and you get your position to +/-5m, but not accurate ENOUGH for our applications :-P).  However, as long as your GPS receiver is fairly precise (ie: it might give you the wrong measurement, but your measurements are always within a very small area), then you can set up a known ground location and start there.

What does that do?  Well, if I KNOW I'm at (x,y), and GPS says I'm at (x+3, y-2), then I just use that as a constant offset and I'll have accuracy now down to the precision of the GPS.  Downside is that you need to re-calibrate every time you use it.  GPS errors are more or less constant for short runs, but change daily-ish.

2) You have a camera and a laser range finder.  Ditch the GPS entirely and use SLAM (Simultaneous Localization and Mapping) algorithms to solve your problem.  Robot Operating System has some great SLAM stuff going, but it's probably harder than kalman filtering.  Only use your GPS to tag the data for later.

Robot localization is hard, and you're probably better off getting a book at your local university's library, or checking some papers online.  It's...basically impossible to tell you how to do it in a forum post :-P

@Wesley888: We're using an Ardupilot as well, and we found that, although we can get it to run consistently over the same area once we program it in, we can't ensure that the area it's running over is the one we wanted :-P  We've resigned ourselves to that, and are now just designing our own board that uses better sensors.

MIKE