LEGO® Answers is a question and answer site for LEGO® and building block enthusiasts. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

A group including myself are using the Lego Mindstorm kit to design a robot that is going to compete in a school competition. However, the sensors aren't as reliable as we would like them to be, particularly the ultrasonic sensor, which is what we're using to judge how far away objects are from our robot. The problem that we face is that every so often the sensor returns a value that is just wrong: in a set of 3 datapoints for an object that is 45 units away, we'd possibly get values like 45, 45, and then 186. The erroneous values are not consistent, nor is the amount by which the error occurs. We also can't judge the probability of an erroneous value occurring. Our current algorithm takes the average of a small number (i.e. 3) of datapoints, but we've realized that if the number of datapoints is small, then the average could be distorted greatly by erroneous values. If the number of datapoints is large, then it takes a long time for the robot to get all of the sensor readings.

What do you recommend as a process to reduce the impact of erroneous sensor readings?

I'm sorry if I'm posting this question in the wrong location, but this problem seemed more closely linked to mathematics than to programming.

share|improve this question

migrated from Mar 9 '14 at 23:23

This question came from our site for people studying math at any level and professionals in related fields.

Might as well use Kalman filters. – TZakrevskiy Mar 6 '14 at 15:08
Are the items you're tracking moving at all (i.e. other robots) or are they static? If they are static you could just discard the results based on your current speed and previous changes in distance... – Zhaph - Ben Duguid Mar 10 '14 at 10:14
What is essentially happening with the robots is that we're using them to locate small, scattered, stationary canisters which we then need to capture and move to a corner of the 'field.' Consequently, the current algorithm is to basically move to somewhere in the center, rotate and take samples (non-continuous, btw) of the distances it sees, and then try to go for the best choice. Consequently, the objects that I'm trying to find are static (though there is another robot on the field at the time). However, the robot is not moving at the time either. We just want to reduce the error we get. – Amndeep7 Mar 10 '14 at 18:23
up vote 4 down vote accepted

I have quite some experience in Lego Mindstorms and I can tell you that their ultrasonic sensor is extremely inaccurate as you described - from what I read online, the ultrasonic rays travel in a V shaped path instead of in a straight line (it causes readings not to be linear with distance). Detecting an object with a round surface makes it worse, because the ultrasonic rays end up scattering all over the place.

What we (my team and I did) tried to do was to cover up half of each of the sensor's emitting and receiving outlet hole so as to force the ultrasonic rays to travel in straight lines. We also tried taking averages, root mean squares, differentials, integrals and what not of samples instead - but both did little to solve the problem, especially when sensing across distances that are far away (> 100 cm).

We ended up switching to one of Mindsensors' laser based distance sensors.

share|improve this answer
Thanks for the info! We don't have one of the laser-based distance sensors, so I guess we're outta luck. We might try what @TZakrevskiy recommended. I'd vote up for your solution, but I don't quite have enough reputation. – Amndeep7 Mar 7 '14 at 0:31

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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