Yet another cheap wireless connection (Quadrocopter)

Hi,
I'm planning to build an Arduino-based Quadrocopter and currently thinking about how to control it remotely.
The "classical" way with an 4+ Channel RC-Remote seems relatively expensive (50+ €), therefore I fancy an Arduino to Arduino based solution.

This means, that whole thing should be cheaper than 35€ (the second Arduino will cost an extra 15€), which already crosses out the XBee option.

The speed doesn't really matter, I don't think that the steering commands will get over a few bytes.

What however is important is the range, I suppose I'm gonna need at least 200m (~650 feet).

So far I've only seen one (two similar) Solution (http://www.sparkfun.com/products/9582 / RF Link Transmitter - 434MHz - WRL-08946 - SparkFun Electronics) that seems to be appropriate, but I've read that it seems to be difficult/unreliable and I don't really believe, that it could handle the distance (it says 500 feet, which would be at least acceptable, but I don't think it can really make this under "real" conditions)

Does anyone know another possible Option?

One thing to consider is what will happen when the transmitted data is not received, or is received incorrectly. What will your quad-copter do?

If crashing is the result, as it usually is, ask yourself whether saving a few quid/pounds/lira/dollars/yen/euro is worth it.

Most people have decided that the answer is no.

The cheapest way to reach those ranges will be to get some cheap Chinese remote control set or toy on ebay and cannibalise it. There's a reason why you have so many toys for 19.99 or less with remote controls.

The other question is, do you really need 4 channels or will 3 do too, if you have the Arduino to interpret the results.

Korman

To the possible loss of connection/incorrecly recived data: If I'm programming to communication protocol by myself I'll do lots of checksums and stuff to make shure there won't be any wrong data. Also im planning to let the quadrocopter try to hold the current position for ~15 sec if the connection is lost, and if it's not restored in this time, it should try to slowly loose height, so that the possible damage will be reduced. Of course I can't be shure this works, but thats a risk I'm willing to take.

The ebay china-toy idea seems nice, but I've seen only 2 or 3 channel remotes yet.
I guess I'm gonna need all theese 4 channels, one for each Axis (and with some interpreting I may be able to include a trigger for a camera/etc in it).

But maybe there is a way to hack a RC-Remote to use it as "virtual wire"/"virtual serial connection" like the sparkfun products?

Korman:
The cheapest way to reach those ranges will be to get some cheap Chinese remote control set or toy on ebay and cannibalise it. There's a reason why you have so many toys for 19.99 or less with remote controls.

I doubt it, toy helicopters usually use IR, and RC cars are usually digital controls only. A quadrotor helicopter absolutely requires high speed high resolution analog controls

Data rates and FIFO depth matters a lot in this application

I personally recommend you bite the price bullet and get a true RC system for about $25 (which is actually about 17€) , and then add a full duplex data pipe only when you need it

PaulS:
One thing to consider is what will happen when the transmitted data is not received, or is received incorrectly. What will your quad-copter do?

If crashing is the result, as it usually is, ask yourself whether saving a few quid/pounds/lira/dollars/yen/euro is worth it.

Most people have decided that the answer is no.

sorry but you have this kind of problem also with the "classical" 4+ Channel RC-Remote. And arduino can check and sanitize the data, the RC no. (like no valid data for X seconds = slowly stop engine or return to home etc..)

frank26080115:
I doubt it, toy helicopters usually use IR, and RC cars are usually digital controls only. A quadrotor helicopter absolutely requires high speed high resolution analog controls

IR is used only for indoor. Normally 2.4Ghz is used for almost all "Classic" Remote(because it auto solve the frequency "collision" of the old 33khz and so on) , and use PPM protocol

frank26080115:
Data rates and FIFO depth matters a lot in this application

I personally recommend you bite the price bullet and get a true RC system for about $25 (which is actually about 17€) , and then add a full duplex data pipe only when you need it

PPM send form 1 to X channel every 20millis, I doubt this module can do worse.
And they cannot be used full duplex, at least half-duplex (if you don't set the frequency deviation)

frank26080115:
A quadrotor helicopter absolutely requires high speed high resolution analog controls

This depends. If you do the whole management remotely, yes. But if you have enough processing power and sensors on the quadropter itself to maintain a given flight level, the requirements for the transmission becomes a lot less stringent.

Korman

The clearer the picture of the copter gets in my head, the more I tend to using my own communication protocol...A two way communication would be nice, but is not really necessary, as all the calculating is done by the copter itself. I suppose the biggest problem will be the range...

IHMO if the code is all your, use a two way link, is really good for debugging and understand what goes wrong, trust me, i'm using the serial to display on PC a 3d plane rapresenting the inclination, the power to the engine, i can change PID dinamically... and I'm still in the "test on the ground" phase :slight_smile:

And which hardware are you using for this?

i'm using 3 analog gyro from hk401b hobbyking, 3axis accelerometer from a faked nunckuck (i2c), atmega368 at 16mhz, 6ch PPM tx/rx (but i'm using only 4, power pitch roll yaw), 4 25A PWM ESC (Hobbyking SS, but they seems to have soft cut-off), 4 DT750 brushless

the stabilization algorithm is a DCM (direct cosine matrix, code adapted from: Google Code Archive - Long-term storage for Google Code Project Hosting.), really fast (it take about 500microsec and has sqrt, sin and cos inside!)

I'm also doing the code very modular: actually you can easy change the gyro, accelerometer, IMU and stabilization algorithm simply rewriting the class respecting the public method (update() and getData()).
The loop() code runs in 2ms, faster than the PPM signal (20ms) to engine, so there is enough time left for other calculation.

I like this ways because everybody can easily add their hardware and share changes (but this code is born just as personal challenge, and I want also let it fly planes) and because no one seems to use as pid's input actual angle and desired angle, but just unmeaning number. When my algorithm will work, you can say to quad "incline roll of 4 radiant (respect floor)" and this is the first series of step before autonomous flight.

obviously I'll buy magnetometer and GPS.
Also for communication I was thinking about
SparkFun Transceiver Breakout - nRF24L01+ (RP-SMA) - WRL-00705 - SparkFun Electronics, it has 100mt of radius but for autonomous flight it should be enough.. at least for test
or xbee pro http://www.robot-italy.com/product_info.php?products_id=1470 for 1200meters radius
and GPRS.. I was looking at Arduino GSM shield - Open Electronics - Open Electronics but their libraries support only GSM, but module should do also GPRS http://wm.sim.com/sim/wm/html/en/WMS/EDGE%20Module/ProductDetail.aspx?id=770

Join this room here a test of the IMU, the PC response on video is a bit slow because I was updating the value every 100ms (10 fps) and also PID of DCM was to be tweaked.

Join this room this is the first stabilization test.

TODO:
Actually I have 2 engine PID algorithm:
1- motor's PID that input the angle (from -PI to PI) and desired angle (from -PI to PI), and give a number to sum to the engine power (the one in the video)
GOOD:
actually maintain the stability, but IMHO is a little slow to respond
BAD:
changing throttle seem to break the PID: maybe dynamic PID based on engine power?

  1. use as input and output value from -1 to 1 (and does something like desiredPower/2+desiredPower*thisEnginePID)
    GOOD:
    should work for all throttle value without dinamic PID
    BAD:
    actually it doesn't

  2. should try the PID libraries on the Playground: maybe mine is too "basic"

in this week-end I should test the three algorithm and compare them, actually no one seems to work correctly. I will upload the code on reference once it's over and functional, because of its modularity it will be slitted in multiple tutorial, from basic like "write a class for read analog sensor" to "read PPM signal with multiple pin interrupt"

PS: the problem with this test is that low battery will influence really bad, as I cannot program the ESC to remove soft-cutoff (i think..)

PPS: the truth is that I never played with a microcontroller, esc gyro accelerometer, plane, copter etc. before. So I'm quite happy of my results and I will let this thing fly with my own code! :slight_smile:

@lesto: the 1st video is very fuzzy but i see that it's working well. The second video says it's private - can you fix that so we can see it?

if for fuzzy you mean low quality, i'm sorry but this is the camera I was having

the second video(fixed the permission) have the same video quality and you can see a crazy quad, i assure i've reached better quality :slight_smile:
hope to find some camera and upload a (better) video

To everyone who needs something similar, I found something:
The RFM22B should do up to 500m in free air and the RFM12BF even over 1km...

very nice and cheap! thanks for the advice!