Ultrasonic Follower Sensor System

Here is an attempt at an ultrasonic sensor system for tracking an emitter’s relative distance and angle so that an autonomous quad-copter can follow a subject.

Conceptual Image, nominal spacing around 20 feet 


The system works by recognizing changes in the arrival time of the US pulses generated by an emitter. If the subject moves away the emitter’s US signal will arrive later than expected. The subject’s relative angle is calculated based on the difference in the signal’s arrival time at a pair of receivers. 

Emitter in front and Arduino Uno with shield and two US receivers behind

The system’s emitter uses a MaxBotix MB1360 range finder as an US pulse generator. Unlike typical range finding which uses the time a signal travels to an obstacle and back to calculate distance, this system utilizes one way travel: from emitter to receiver. This principle should have double the range of a typical range finder. This doubling also applies to the resolution of the system, which means a decrease in accuracy. Based on the specifications of the MB1360 the system’s theoretical range limit would be 70 feet with distance accuracy of 0.8 inches.  

Emitter with MB1360 (left side) built on a proto-board 

Performance Improvements

At this point the prototype system has a range of 30 feet and a distance resolution of 2-3 inches. While this isn’t pushing the limits of the technology it should be good enough to guide a quad-copter to follow the emitter. I have identified two ways to improve the system’s performance: increased processor speed and receiver sensitivity.

  • Presently the system relies on a 16MHz Arduino Uno for its processing tasks. The Uno seems to get bogged down when I add calculations to its routine. Switching to an 84MHz Arduino Due should improve its resolution and well as increase its ability to perform relative angle calculations based on the ranging data.

Aduino Uno with proto-shield

One of the two EngineeringShock US receivers

Programming Challenge

While improved performance would be nice, the greater challenge I face is incorporating the sensor system with my quad-copter. How do I get the microprocessor to communicate with the APM 2.6 flight controller?

Quad-copter with two US receivers at 2 foot spacing (and not much else)

As I understand it the onboard micro-controller needs to speak “MAVLink” to the APM and this can be done via their SPI functionality. To begin with programming is not my strong suit. The tutorials that I have found for integrating MAVLink and Arduino seem to be geared toward use in a ground station instead of onboard. I think the interface methodology would be similar to that of an optical flow sensor that detects the vehicle’s motion and commands to the flight-controller to maintain position. Only in this case the sensor system would detect the subject’s relative change in position and command the controller accordingly.

This effort has taken a few wrong turns along the way and was put on hold while I wrote and filed a provisional patent for the concept. Now I need to get it functioning to prove its worth. Corrections, advice, and insights appreciated.



Views: 3180

Comment by Daniel Nugent on March 11, 2014 at 2:17pm

Had this idea idea a bit a ago. Cool to see someone execute and implement it! Never did enough research to prove its feasibility. An idea for mavlink: You could send the GPS location from the APM(location of the quad), then you could use the distance information from the ultrasonic locator and find the GPS position of the ultrasonic beacon. You would then send this location back to the as a GPS waypoint. Another option is to send joystick commands to the APM over mavlink.

I feel the same way about mavlink. Documentation on its implementation is very hard to follow.


Comment by Jack Crossfire on March 11, 2014 at 2:33pm

The problem is sonar is extremely directional.  What little sound pressure escapes from the sidelobes is swamped by propeller noise.  Hope you enjoyed paying your $900 patent fee.

Comment by Felixrising on March 11, 2014 at 4:45pm

Very cool, next step, integrate a pair of Pixie CMUcam5 for object recognition and ranging... 

Comment by Jeff G on March 11, 2014 at 9:43pm

@ Daniel, Thanks for the encouragement. I am leaning toward sending joystick commands. Glad to know that I'm not the only one struggling with figuring out MAVlink.

@ Jack, Is the issue of propeller noise a problem with ground sensing US range finders? Do you see this as a significantly different application of US technology? Provisional patent fees are $65 or $130 for individuals. If you are willing to do the work of writing the submission yourself you can keep the lawyer fees down too. I have found that the exercise of writing (as painful as it is for me) forces me think through every facet of my topic. In this case writing the provisional patent text lead me to other possible methods of implementing this concept. To your point it is all for naught though if it doesn't work.

@ Felixrising, Wow, the Pixys is impressive. Obviously, my programming challenges pale in comparison with what they have put together. As I eluded to in my post this blogging exercise is a thinly veiled plea for help from anyone with MAVlink expertise.

Comment by Jonathan Savage on March 12, 2014 at 11:39pm

Great stuff Jeff. I'm part of a small group (3) of engineers in San Diego working on a similar concept (actually more of the software side), we have a programming guru who is working on mastering ArduCopter. Shoot me an e-mail if you'd like to talk about collaborating: savagejw at gmail. We also have some interested funding sources as well.

Comment by Terrence on March 13, 2014 at 9:47am

Great work Jeff. I could be missing something here but how are doing ranging with an unsynchronized pinger and emitter (or are they synchronized somehow)? As I understand it, those maxbotix pingers use time of flight to determine range but in order to do that you'll need to know both when the sounding happened and when the ping was heard on the same board to do the differencing properly. Maybe you're just using amplitude?


Comment by John Githens on March 14, 2014 at 6:40am

Jeff, In case you missed it, this page may be useful in your research.

Comment by Jeff G on March 16, 2014 at 12:11am

@ Jonathan, It would be great to connect! I am open to collaboration and look forward to meeting soon.

@ Terrence, You are correct, synchronization is the key. The prototype uses a timer on the emitter and on the sensor, one of several ways that this can be done.  

@ John, Thanks for the link. Fotokite is a riot! 

Comment by Eysteinn Hjalmarsson on May 23, 2014 at 2:51am

Besides the MaxBoix MB1360 what else did you use in the emitter?
Btw Grate work


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2018   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service