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.
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
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.
Aduino Uno with proto-shield
One of the two EngineeringShock US receivers
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.