(cross-posted from Aeroquad forums)
i'm looking to create a quadcopter-based 'art' object. for it to do what i need, i'm going to need some fairly precise control over the speeds of the propellors. without going into details, i want to be able to quantise the propellor speeds precisely (+/- 1%) against some pre-determined spread of allowed speeds (the spread would be reasonably fine grained: at any given rotor speed the neighbouring options would be within +/-10%).
i have a couple of questions before i start seriously committing to this. i don't have experience with quadcopters other than the Parrot AR.drone, but i'm a skilled programmer and have some electronics experience.
1. is it technically feasible? measuring the rotation speed optically shouldn't be a problem. i couldn't really tell from the source what accuracy PWM the Arducopter controller allows but i'm assuming 8-bit since it's Arduino-based. would this give me enough fine control?
2. assuming i can figure out the hardware/software, i know i'm going to lose some stability. this is ok. the big question is how much stability can i afford to lose? if i have a requirement that each rotor must hold a particular (quantised) speed for a minimum of 250ms, is this problematic?
Damian, what you're doing sounds interesting. Do I understand correctly that you want to put a controller in between the APM and your ESC's that would force the motors to vary their speed in steps instead of linearly?
I think what you want is possible, though I can't say if you'll be able to hit your actual performance targets, or if it would be stable. "Neighboring options within 10%" is a bit course. Can you elaborate a bit more on the rest of the plan? Do I understand that, say you have one rpm target at 5000 rpm, the neighbors would be 4500 and 5500? This may doom the project to failure. Your motors will constantly be required to change between two speeds and you'll never establish steady-state RPM.
But moving on from that to get into the nuts and bolts:
One issue is that I don't think it's possible to have this functionality native within the APM. To measure the motor RPM, you need hardware interrupts, and these simply aren't available on the APM. I think what you'll need to do is make a custom program on an Arduino Mega which has 6 interrupts available, you'll use 4 of them to measure rpm of the motors. Then you will have that chip taking the signals coming out of the APM, quantizing it into steps which determines the target motor RPM, and then using a PID controller for each motor to hit those targets.
I'm already working on a rotor speed controller for use in traditional helicopters, I have the timing and PID loops setup already, as well as PWM outputs. I think this could be expanded to 4 motors easily. You could consider this part "done".
Where I am stalled is the need to do some communications. I need to be able to "talk" to the controller live over serial interface to tune the PID parameters. I'm a bit stuck on this. Also, I want the board to "talk" to the APM for some bi-directional stuff. Target motor speed, armed/disarmed, and then have feedbacks such as rotor speed and motor throttle %.
I'm a bit lost here. Maybe we could work together?
Here's my governor code:
Hello, maybe i'm wrong but he surely wants some "stroboscopic effect".
And so he needs to control very precisely the rpms to get the right effect ...
If this is what you need, you have inverted the problem.
Let the rotor turn the speed they want and "flash" the rotors at the right speed ...
Here is one example using running blades and displaying a fix effect :
Sorry if im' totally wrong ...
no it's more a musical effect i'm going for, but thanks for the reply.
yeah i gathered asking the APM to do this as well as governing everything else would be too much, that's not a problem.
so to give away the details, the plan is to use the physics of hovering flight to drive a musical drone composition, where each rotor should spin with a speed that harmonically related to a shared base pitch. inspired by this: http://www.youtube.com/watch?v=DZFg6xu1g_4 .
thanks for the code. i could certainly help with the communications, i've done a bit of that on other projects.
Hmmm... I don't really get that youtube video. What is he doing? I just see speakers on spinning sticks.
Are you sort of thinking of this type of thing (skip to 0:55) ?
yeah, i think it's hard to 'get' the Ray Lee thing unless you've seen it in person. all the speakers on spinning sticks are tuned to the same base note and by rotating they set up a shifting pattern of overtones based on where you're standing nearby.
re the car video:... sort of, but i don't think it's feasible to be able to play music (and that's not the primary goal), rather just to make all the rotor sounds tuned to the same basic frequency.