How to Identify a Location

Hi All,

  I am planning to create a robot which can create a 2D map of an environment(Outdoor) rough surface which will be walled. I will be using atleast 2 or 3 ping sensors to navigate inside the wall to avoid obstacles. I am planning to make the robot run around the edge of the wall to create a 2D map of the area. To do so I want to make the robot identify the localtion where it started, so when it reached the location where it started from it will stop and the map will be generated. The problem here is I am not sure how to identify the start location.

I was planning to use GPS, but after reading few discussions I see the accuracy is not that great and if I require good accuracy I would have to expensive. I did try couple of test with compass HMC5883L but it's not very promissing. 

If anyone can share some idea on how this can be achieved, that would be of great help. Thanks.

 

GPS

GPS sensors can be found for little as 15$ from aliexpress. Or you can gather data from an Android phone.
Biggest issue for gps is lack of precision(results are scattered) rather than accuracy; if you average all readings for one minute, you should get a both accurate and precise location. With 10min of analysis you can get even centimeters.
GPS require a compass for optimal data gathering as it gives only points on the map, while a compass will give you also direction and inclination.

Many ways to accomplish this goal
As Duane pointed out, the basic algorith is called SLAM (Simultanious Location And Mapping).

  1. It helps to have encoders on the motors or wheels so that you have an idea about how far the robot has moved. This isn’t exact because wheels slip and bumps can cause the wheels to slide sideways. However, it can work in the short term to help mapping.

  2. If you have a compass (magnetometer), you can, using the orientation and the sonar readings, create a location marker that way. If your bot doesn’t have sonars even space around in a circle, then a sonar mounted on a turret can be used for this.

  3. A camera can be used If you have a system with more power such as a RasPi or BBB. You would probably use the OpenCV library to find significant points and areas in the picture to identify a specific spot. It would also be good to have the camera on a turret to get images from several directions.

Have fun.

Well, you asked for a simple

Well, you asked for a simple way to find the location where your robot startet.

Here it is. You run your robot inside that walls, i am assuming it’s a room with four corners, there might be 5, 6 or only 3, so you just need tio understand the principle.

Start your robot and count how many turns it makes, in the picture the robot is exactly at the starting position when the fourth turn is made.

Optical recognition?

Could a optical mouse sensor give precise location and accelleration?

People have been trying them
People have been trying them for a while, without much luck.

I do wonder, however, if a mouse sensor could be used to replace wheel or motor encoders.

Thanks for suggestions

Hi All,

Thanks for all your suggestions.

Using multiple GPS units would be a good idea to work with and average the values to get accuracy and precision. But this idea would add more cost and need to check about the values that are returned by it.

SLAM is kind of difficult and I did go through couple of algorithms and techniques that can be used but I didn’t see a concerete way to identify a location. HMC5883L works fine, but I was trying to use it to identify a specific location using it values which was not possible, but I was able to comfortabely identify a direction. I am thinking of whether this can be achieved using HMC5883L and may be something.

I don’t have encoders in my Motor or Wheels because I am going to be working a rough terrain, I assume there will definitely be some slips and jerks which has to be discarded while working with the values. Rather I am thinking of using an accelerometer to get some values to calculate the distance traveled. 

I did think about using a camera but the environment is more kind of an agriculture field I am not very sure whether the camera would be a lot of help unless a very good one is used with some good programming.

To give some idea about the environment where the robot is to be implemented, It is going to be rough terrain, soil below the wheels, since it’s planned to be implemented to multiple locations. So there is no specific number of corners it has to go through, but I think the corners and the directions can be manipulated using ping sensors and compass.

I am looking for percision in centimeters. Also do let me know, if I am wrong with any of the above mentioned statements.

Thanks for sharing.

 

One of the reasons for
One of the reasons for having encoders is to keep the robot going roughly straight.

The camera doesn’t have to be the best, but even a webcam will work enough that the image should be able to be run through some “good programming” (probably using openCV) to identify points of interest and points that might be identified in all seasons.

Another sensor that might be useful is a laser rangefinder.

I’m interested if you can do this to centimeter precision. I think for this you’d need to combine the inputs from multiple sensors.

I hope that you will continue to post your progress and eventually make a robot post on this.

How large are these enclosed areas?

ROS

SLAM is an amalgamation of a number of sensors with their errors calculated in and then it comes up wtih a probabilities that you are at any of the particular places on your map.  That is what Google car uses and many robots out there.  If you want accuracy, that is a very accurate way to go.  As several folks have pointed out, this is not an easy thing to do. 

Although I have never done this, one suggestion is to use ROS (ROS.org) open source software which already has this built in.  ROS will run on a RasPi or any old laptop you have around that can run Linux.  ROS is the basis for many robots from NASA etc. It assumes you are using a laser range finder but you can override the interface with your own component (I hope you know some C++).   It is a relatively trivial thing to do at least compared to developing your own SLAM algorithm.  ROS.org has some nice tutorials and a pretty active community of folks who are actively using it.  This is the next big thing I want to dig into. 

Please let us know what you finally do.  Good luck. 

Regards,

Bill

If you’d like to see a lot
If you’d like to see a lot of different SLAM algorithms, check out www.openslam.org.

Many of these programs use cameras as their main sensors.

How about a stake at the

How about a stake at the start point with a buffer switch linked to a second micro.  When the moving robot hits the stake on completion a wireless/IR whatever signal is sent to the moving robot to tell it to stop.  The buffer switch size can be manufactured to allow for possible error.

Thanks

 

 Area is close to 20,000 feet which is half acre, but the area can vary because it has to be implemented in different locations.

 Thanks for the suggestions. I will check with few suggestions and see how it works and get back.

 

Late to the party.

Have you put any consideration in to adding vision to your mapping bot? Maybe start by acquiring a few images by doing a spin at the home position and then maybe at each corner doing the same to see if the images line up with the ones taken at the home position?

If we’re talking a half
If we’re talking a half acre, a ping sensor is only useful for short term navigation. Even most of the laser rangefinders aren’t good for more than 10 or 20 meters and less in daylight.

I think vision is one of the best sensors for this type of mapping. And I’m pretty sure that the robot will have to travel in the middle of the area, just to get enough shots of the area. Some tall landmarks will help this; a few things tall enough that can be seen from everywhere and the robot can get a basic idea of where it is.

If there aren’t already landmarks such as water towers, wind mills, and such, you could make them with tall colored poles. I’d color them in bright primary colors such as red, green, blue, and yellow. I’d also put a group of bright LEDS at the top of the towers for use in the dark if you need this.

When I mentioned vision

I imagined the walls would be walls of something like a warehouse that would have different openings here, there, and everywhere. Something like OpenCV should be able to compare the “home” images with the newest versions and decide whether or not the bot is back home. If you include a compass module, you might/should be able to decide whether you need to even take images for comparison.