Is there any way that the drone just disarms the motors and drops straight down whenever the props hit an obstacle, like a tree? I would assume looking for a surge in back emf could help trigger the failsafe.
I am sorry if this functionality is already built in, but I haven't seen that explicitly stated anywhere. This was very useful on the ARDrone I used, which would immediately disarm on hitting anything. I am not tremendously concerned with the landing gear being damaged; I fly pretty close to (a few meters above) the ground.
The most hacky way of doing this would be to cut throttle and disarm the motors in the failsafe event handler in events.pde, but I'm look for something more graceful.
The reason why this is a bit of a big deal is that I'm using the drone indoors, and
a. I don't have GPS, and
b. I cannot rise 10m; which implies that RTL is useless for me.
c. I don't necessarily want a slow spin down, since I might just be chopping things off.
I think such a feature (if automated) would also be of utility to avoid a lot of injuries.
I think the RTL altitude is configurable via the Mission Planner; it's 10m by default.
The APM doesn't receive any feedback from the motor controllers, it's an "open-loop" control setup". It sends commands and doesn't even know if the ESC is listening. So, a motor could quit in flight and the vehicle would have no clue. Some fancier systems have smart ESCs which communicate RPM and power data back to the autopilot, allowing for all sorts of clever control algorithms. One example is compensating for a blade-out condition (in a hex or octo setup).
MAYBE you could write a safety control that watches your current draw from the battery and compares that to the throttle levels and accelerometer data, looking for some combination that indicates a collision. I don't think the APM does this yet.
Thanks for the reply!
So you suggest using something like this (or this), and send the output to the the ADC of the ardupilot, and then in the user hooks look for a sudden change in the RPM?
UPDATE: Also, got a slightly similar post now : http://diydrones.com/forum/topics/brushless-motor-rpm-sensor?xg_sou...
Cool! I forgot about add-on RPM sensors. You'll want one sensor per motor. Then you'll need code that watches the RPM for each motor. A collision should trigger a huge instantaneous change in the RPM, much more dramatic than even the fastest throttle change, so this should be very reliable.
You might consider making a test stand where you stretch a string between each of the copter legs, and tie it to a frame so it's suspended off the floor. This way you can mess around and get data without actually crashing.
Ive been doing some research into a "Safe" drone that could be used for filming crowds at different events, but that would have a low risk of injury if something went amiss. This would definatley help in that regard.
Yup, sounds workable. One question, however - Those RPM sensors listen only to the ESC data. I'm not sure if an external torque causes a change in the output of the ESC phase currents.
Are you certain that if, say the props start moving much slower due to some external factor, there's a corresponding change in the ESC output?
The ESC watches the motor spin, and watches your throttle signal, and applies the appropriate amount of power (based on throttle) to each motor winding/phase at the appropriate time (based on RPM).
RPM changes are mostly a side effect of having an imbalance between the amount of throttle being applied, and the amount of thrust/drag on the prop. The ESC doesn't care, its job is just to time the motor phases correctly.
Since our cheap motors don't have hall sensors or optical encoders, the ESC must be monitoring 'back EMF' or some such thing in order to judge when to trigger each phase.
Okay. Ordering these sensors, then. Unfortunately, I don't think I shall have the time to work on this until Jan.