I've done a bit of research into video streaming and have been dumbfounded that there is no standard solution.
I recently ripped into a Spy Trakr, you know, those cool rc cars with a video stream between the controller and the camera. I tapped into the hardware and serial lines with an Arduino, but ended up replacing the mainboard with a MEGA as it suited my project and I was more comfortable programming in the Arduino environment.
An hour into my project I have a full pan/tilt camera mount, full motor control, as well as a few other awesome features. Simple RC project right? I modified the existing transceivers to work with the arduino unit and then paired the car's transceiver to it's sister connected to my PC. Cool, but I wanted to make it more interesting.
What about that video stream? Well i assumed it couldn't be that hard to set up the same kind of video link. After all, the previous system used two of the exact same paired nrf24l01 modules for both control and video communication.
I understand there is almost no feasible way to get an Arduino to process video, but how did they do it?
You can't tell me that it's not possible, as the TRAKR had 160x120 QVGA at 15fps stream. Maybe it took a bit of proprietary wiring, but I KNOW there is a way.
I want to replicate the same thing, full control with low quality (15fps) video stream back to an LCD over these Nordic modules.
The arduino needs to still receive control commands.
Is there an IC I can use, a circuit I can build?
I'm an Electrical Engineering major and am planning on using this as a final project, but I have to show understanding of my hardware. Hardware JPEG encoding? Please just point me in a direction and strike the match.
I imagine the NRF24 is well able to handle a video stream - but it must have been feeding into something that could receive it. I suspect an Arduino can only use a tiny fraction of what an NRF24 can do.
What about something like composite video sampling? Could I stream a composite image with any ease at all? I am really novice with video protocols, but I can do some research if I know what I'm looking for.
SilentDemon555:
What about something like composite video sampling? Could I stream a composite image with any ease at all? I am really novice with video protocols, but I can do some research if I know what I'm looking for.
Look up what composite video means. It has no less of a bandwidth requirement than component video.
The arduino simply does not have the bandwidth to do anything with streaming video. If you think some one has a way of wiring up so it does you are mistaking what they are doing.
Okay, and I've also noticed you've provided the same sort of shutdown post on almost every other forum post I've found.
I understand the Arduino's lack of processing power and low memory attribute to it's inability to stream video. That's not my question.
I want to know how other people do it, if not via Arduino, then what? A PIC? What can I do to get streaming video. Hardware circuits would be great as I'm demonstrating soldering skills and etc.
Help me, don't shut this down again. Why do we only have the three options: IP, RasPi, and android based devices.
This project needs to be mobile, having it's own host and it's own client.
No embedded OS's, no laptops, nothing. A controller and an RC car.
Okay, and I've also noticed you've provided the same sort of shutdown post on almost every other forum post I've found.
That has to tell you something.
I built my own real time video digitiser in the early 80s before you could buy such a thing. In the 70's I designed and built my own vidicon camera. I was also a TV ham, transmitting my own video in the 70's.
I have built video digitizers of various designs for the BBC and Acorn Archimedes in the 80s and 90s as well as things like an arrow generator for video overlay. In the mid 70s before the advent of home computers I designed built and sold what in effect was a video terminal. In the 2000s I lead a design team that produced on of the first digital terrestrial set top boxes. Later that decade I lead a design team that produced a transmodulator for satellite to cable TV. That project contained over 8,000 components and sold for $25,000 each, which was an amazing low price for what it did.
I have been about a bit, I know a bit about video.
Why do we only have the three options: IP, RasPi, and android based devices
There are a lot more than that but maybe not aimed towards the hobbyist market. Mainly you need bandwidth and memory. The Raspberry Pi is based on a chip that was designed especially to make set top boxes, so there is built in hardware for things like compression and decompression. Hobbyist are simply riding on the back of industry.
No embedded OS's,
Even set top boxes have operating systems.
How do I do it.
With any processor or system with a 600MHz clock and enough memory for two full frames. But then that is rather outside the scope of this forum.
One avenue you might want to explore is security cameras that use IP. Also the Arduion Yun can do things with video.
But I can't tell you how to design a system in a forum answer. Much as I would like to. I am retired now.
Wow, that is an impressive back-story, haha I'd love to buy you a cup of coffee.
So this does provide light on why I can only find a limited amount of information; google seems to provide the quick and dirty solutions. I don't want to be a hobbyist, I want to be an innovator.
I'll delve into the resources here at school, maybe I'll find some articles or what not in the library. You've at least given me a better sense of direction.
IP security cameras might be a little out of my scope, but I'll look into it. IP means I'd have to deal with an entire protocol which I know means alot of equipment and parts.
My CV is nowhere near as comprehensive as Mike's, but I've been a few times around the block with bits and pieces of video processing.
The simplest way of looking at the difficulties is with simple arithmetic.
Consider a simple old-school standard definition analogue monochrome TV image.
In the UK, the whole image repeats 25 times a second, and each image is composed of two fields of 312.5 lines.
Each line therefore lasts just 64us ( 1 / (2 x 312.5) ).
However, the part of each line that you see lasts just 52us, and you only see a total of 576 lines.
Now, in a digital image, that visible 52us is typically divided into 720 pixels, so each pixel is just 72ns wide.
An AVR Arduino takes 62.5ns to execute a single machine cycle, and takes around 100us to digitise a single 10 bit sample.
You can reduce the resolution of the image using simple subsampling to reduce the bandwidth, or you can maintain apparent resolution by employing compression techniques which operate over large areas of the image, but here you have to commit large amounts of memory to buffer the image, and simply storing that data consumes a significant fraction of memory bandwidth. You also need to have extra computing horsepower available to process all that data in a very short time.
SilentDemon555, you may want to dive into the FPGA and DSP world. These fancy cameras that claim to interface with an Arduino are certainly pre-processing the signal and outputting only the bare data needed in order for the Arduino to figure out what it needs to do. The pre-processors are most likely DSPs, but they may also be FPGAs. If you want to challenge yourself and be an innovator, then you're going to need to learn about these big-boy toys. Papilio is to the FPGA what the Arduino is to the Atmel line of microcontrollers. If you're already familiar with a C, or C variant, language, then Verilog may be the Hardware Description Language [HDL] that you may be more comfortable with. While the main chip on the Papilio is a FPGA, the FPGA they have selected has slices of DSP blocks available. If you go to the OpenCores website then you can see how others create fancy devices with these chips. Once you learn all of this stuff, and break it all down into manageable information for you, I think you may find that FPGAs aren't so scary and are actually pretty easy to work with.
I think you may find that FPGAs aren't so scary and are actually pretty easy to work with.
I would disagree with that one. The transmodulator I worked on had four engineers who specialised in FPGAs it had 5 very large FPGAs on it. Here it is in this rather posed photo the largest chip is under a heat sink but you can see the other four. Three with one under my scope lead and the other to the right of that. They had BGA connections and I think about 1500 leads into the chip.
haha! Well... yes. I meant that they are easy to work with in terms of writing the HDL. While limited in I/O, I stick with the FPGAs that have traditional leads in my hobby projects so, relative to a BGA, it's fairly easy to solder. Of course the easiest route is just to budget for a Papilio board in every project so that no soldering is needed.
I played with digital cameras (=phone camera)about 10 years ago. Then they got a simple control bus, probably an I2C bus and a digital output of camera data. The camera data output was too fast for any ordinary processor. One VGA image is around 400kbytes, and those come about 25 times a second. But for a FPGA it was easy. If current phone cameras are anything similar, you could reduce the picture size and rate to something reasonable. There is a camera for the Rasberry pie for example. And there are others. Some surely have suitable specs. So you probably are able to get a single small picture every now and then. No AD conversion is needed.
And then there are coprocessors for this kind of tasks.
But getting that a video stream out is totally unknown to me.
Large fifos and field memories help too. Field memory=large fifo
If you want to make an "engineering break thru", then you have a lot of work to do. If you just want to make an interesting project, then you might consider making a router bot. Below are some thought on such a project. basically the bot uses an IP cam, an arduino with an ethernet shield, and a common wireless router, and a couple of other simple components to make it mobile.