I am creating a moving robot which needs to know its exact position on the map(known before, start point also known). My ideas were :

  • GPS : this is not accurate enough for me, does not work indoors
  • Acc + GYRO + Compass(Magnetometer): MPU-9150 : from that values I could compute the position but as small errors are continuously added after a while it becomes very inaccurate

Finally my idea is to put some fixed points into the area and robot can periodically check where they are and compute its position accurate.

Although I did some googlin' I could not find any appropriate sensor pair to do this. My idea is:

  • one(more if no other option) sensor on robot covering 360 degrees
  • few fixed points which sends a signal; each different one - let's say : I am the point one. I am the point two etc.
  • sensor on a robot is receiving those signals and give me some meaningful value e.g. time from which I can compute the distance from each of the fixed point.
  • 10+ meters maximum range is fine for me
  • must be cheap (less than 30$ for all)


  • Do you have any idea of such sensor pair ?
  • Or other solution which would fit to my needs?

Bonus: * The best would be if the fixed points were passive and just reflected the signal sends from robot - but I have no clue if such a thing exist :-)

Thanks in advance for any answers/comments.

  • Could you place some black and white pattern on the floor? If so, some photo-reflective sensors on the bottom of the robot could be used to detect where in the no-repeating pattern it is positioned. It could even detect rough orientation.
    – Gerben
    Commented Nov 19, 2015 at 16:18

2 Answers 2


Seems to me you are looking for some kinda of SLAM thing. Depending on your knowledge in control theory and your precision goals you can go from simple rotary encoders on wheels to multiple sensor fusion like Extended Kalman filters (example videos). Probably the most precise thing you can have is sensor fusion with LIDAR (can be achieved precisions like 1cm), however the price range is way to far from described.

I would start with a small approach and go from there depending on the results I'd get:

  • rotary encoders (easy to calibrate and can be precise enough as a starting point)
  • 9DOF IMU (use a Extended Kalman filter or similar to make an AHRS correction). And in this part I have many advices. You have suggested MPU-9150. I'm not familiar with it but looking at datasheet it seems very good, specially because gyro comes factory calibrated. In past I've used razor IMU / GY-85 (adlx345 + ITG3200 + HMC5883L) and gyro was very precise and low noise. Hope Invesense used the same sensor in MPU . First in hardware: Acc are easy to calibrate just use gravity. Gyros are easy to calibrate but hard to do. Why, because it may be hard to get something that spins at constant RPM and know that value. But as I've said, according to datasheet, MPU comes factory calibrated. Magnetometers calibration can be a bit tricky. Bottom line is you get readings from various points of your robot in 3D space. you plot all and you will get an ellipsoid. Then you find a transformation equation that maps the ellipsoid into a perfect sphere take a look this article. Your concerns about Angle random walk can be minimized with kalman filter and similar. This page provides much great information and examples in how to make a good AHRS. Mr. Madgwick wrote a really nice algorithm that implements the IMU filter and have it also written in C (nice for Arduino).

After integrate all things with Kalman and see the results, if things are not good enough, you can add more sensor and provide a better estimation for example: sonars, rangefinders, landmarks with image processing and as suggested also, RSSI and triangulation.

These links might help you in finding your way:


I've been working on this also, and have not found a 100% satisfactory solution. Some ideas I've been throwing around include:

  • Using an optical mouse to measure ground distance more accurately. This also subject to cumulative errors.
  • Some sort of radio transmitters
  • A pulse from a magnet, with a compass - these can be highly directional, and could possibly be strength-based, too.
  • I read about one robot competition which had a fixed, overhead camera, picking up infrared LEDs; this is processed by a computer, which would then send the data back (e.g. for bluetooth) to the robot.
  • The same infrared camera trick, but reversed: a camera pointing up, looking for fixed constelation of infrared LEDs on the ceiling - I would expect this to require more processing than an Arduino has, possibly a raspberry pi could do the trick?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.