Over the last couple of months I have been working on a project that might be of interest to you: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmiss...
Basically it is a digital transmission of video data that mimics the (advantageous) properties of an analog link. Although I use cheap WIFI dongles this is not one of the many "I took a raspberry and transmitted my video over WIFI"-projects.
The difference is that I use the cards in injection mode. This allows to send and receive arbitrary WIFI packets. What advantages does this give?
- No association: A receiver always receives data as long as he is in range
- Unidirectional data flow: Normal WIFI uses acknowledgement frames and thus requires a two-way communication channel. Using my project gives the possibility to have an asymmetrical link (->different antenna types for RX and TX)
- Error tolerant: Normal WIFI throws away erroneous frames although they could have contained usable data. My project uses every data it gets.
For FPV usage this means:
- No stalling image feeds as with the other WIFI FPV projects
- No risk of disassociation (which equals to blindness)
- Graceful degradation of camera image instead of stalling (or worse: disassociation) when you are getting out of range
The project is still beta but already usable. On the TX and RX side you can use any linux machine you like. I use on both sides Raspberrys which works just fine. I also ported the whole stack to Android. If I have bystanders I just give them my tablet for joining the FPV fun :)
Using this system I was able to archive a range of 3km without any antenna tracking stuff. At that distance there was still enough power for some more km. But my line of sight was limited to 3km...
In the end, what does it cost? Not much. You just need:
2x Raspberry A+
2x 8€ wifi dongles
1x Raspberry camera
1x Some kind of cheap display
Happy to hear your thoughts/rebuild reports :)
OK sorry you can just see in one of the pictures it's female RP-SMA. Great news, I can use all the bits I just ordered wrongly for the 722n adaptors :)
If you could do a line of sight range test, that would be really cool.
I already had two of these CSL dongles at home. I purchased them because they are cheap, dual band, and work out of the box on raspberry pi. That these dongles can be used for FPV is a plus. I tried them before buying the TL-WN722N adapters befinitv is using. Everything seems to work out of the box. Just plugged them into my pi and followed the guide from befinitiv here: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmiss...
How good the CSL dongles are in terms of range remains to be seen. If I have time tonight I will mount the transmitting pi near my upstairs bedroom window and walk down the road with the receiving pi.
I have also ordered one more dongle to see if having two of these on the receiver will help.
I am using the new pi model 2. I have not noticed my pi crashing with wifibroadcast sending. The transmitting pi was powered from a USB cable from phone charger, the receiving pi was powered from a lipo via a 5V/5A UBEC (servo cable plugged into the GPIO pins, +5V on pin 1, GND on pin 3, like shown on the picture here: http://dev.ardupilot.com/wiki/companion-computers/raspberry-pi-via-...).
befinitiv already has it online on bitbucket here: https://bitbucket.org/befi/wifibroadcast
For now he has very good info on his blog: https://befinitiv.wordpress.com/wifibroadcast-analog-like-transmiss...
I don't know if github is better than bitbucket. I think bitbucket also has the possibility to add wikis to repos.
thanks for the raspivid -a hint Michael. There is the possibility to connect APM or pixhawk to the PI's GPIO ports. So in principle one could write some code to overlay OSD text. I think though that using the raspivid -a will require a restart of this command each time the text is updated effectively killing the video link. I was thinking of sending the mavlink data on a different channel using wifibroadcast (befinitiv mentioned that it is possible to send multiple data streams through the card). Then one needs to modify the hello_video program to overlay the OSD onto the video stream.
no probs. Threads like this always get a bit messy and the real information disappears...
The hello_video program deals with encoded data stream, unless there are some APIs (similar to raspivid). I could not figure out at what point the data is decoded.
But... when I searched for raspivid source code I found it here: source code
I already looked at the code, and the API to write text is "raspicamcontrol_set_annotate", now the problem is finding out where to call this API, and how to get dinamic data while the raspivid is running.
I will try to download that source and compile it (as it is), just to see if the code compiles to result the same binary as we have now for raspivid. If that works, then we can look into modifying the source code.
befinitiv, or anyone else experienced :)
When I was testing the video transmission I noticed sometimes the delay was huge! 10 seconds or more... is there a way to purge ALL the data as quiqckly as possible (on the receiving side), probably in hello_video? if we do this "purge" every 10 seconds (or so), theoretically we should get the lowest delay possible?
Or... if we get in the buffer more than one frame, to display only the last frame, and ignore the previous data.
fantastic! If we get OSD to work this would be an awesome FPV system at similar or even less cost than camera+minimOSD+analog transmitter+....
I am a crazy FPV flyer but not into Linux. as expected we cannot learn all trades. I want to try this HD video at any cost. I am starting with buying raspberry pi. the latest model is Pi B+. is it same as Pi A+?