If you tuned in, thanks for watching. If not, I'll add a link to the YouTube video as soon as it's up. Either way, I promised to make all of the resources I used to get this demo up and running so that you can do it too.
I first demonstrated the Aerocore 2 for Dragonboard 410C on a quadrocopter drone last year, and wrote a how-to post about setting it up. This time, there was no drone, but instead there were 2 5.0MP cameras and a 5.5" OLED display.
So this is how I got my Dragonboard 410C to do all kinds of cool video tricks:
Getting ReadyBefore I dive into the setup procedure, let's just talk about what we're really doing. The Dragonboard 410C is really an exceptional SBC with lots of neat features, including high-speed and low-speed mezzanine connectors. The inclusion of the high-speed header on the Dragonboard, and incidentally as part of the 96Boards CE spec, means that hardware developers can create expansion boards that have high speed features like SATA, PCI-express, or USB3.0.
The new Aerocore 2CD takes advantage of this high-speed connector to provide 3 high-speed LVDS interfaces: 2x 2-lane CSI-2 camera connectors and 1x DSI display connector. In order to demonstrate these new features, I am going to connect 2 KLT-OV5640 camera modules, and an OSD055A AMOLED display to the Dragonboard, and using only GStreamer commands in some simple BASH scripts, I will stream camera 1, camera 2, or both cameras concurrently, over UDP to my desktop PC.
Then I will stream the same camera output to the XFCE interface on the connected OLED display.
- Dagonboard 410C from Arrow:
- Aerocore 2CD for Dragonboard 410C:
- 2x KLT-OV5640 camera modules:
- 1x OCD055A OLED display with ribbon connector
- Link coming soon!
- Power supply
- 12V wall adapter connected to dragonboard or
- Benchtop PSU or LiPO battery connected to Aerocore 2CD's 12-16V battery connector.
SoftwareIn addition to the hardware above I used the following files:
- Gumstix Yocto disk image for Dragonboard 410C:
- This image was built using our Yocto recipes found here: https://github.com/gumstix/yocto-manifest.git
- These BASH scripts:
- These 3D models:
- GStreamer-1.0 and its plugins-good and plugins-ugly packages
On my desktop I'm running Ubuntu 16.4.
Assembly and SetupBracket1 and Bracket2 have spaces in which the cameras sit. The forward camera fits sung, but the rear bracket's camera mount was a little too thin on one side so it doesn't hold it still on its own. That's okay though because I was already planning on taping them down for the demo. At this point I also attached the display's ribbon cable to the Aerocore (pads up).
The standoffs connect to the topside of the Areocore board with 2.2mm screws but, due to some scaling issues with my 3D printer, the diameter of the screw holes was just a bit too big so I found two risers with slightly wider threads, which worked nicely.
I connected the DSI ribbon (pads down) to the back of the display and taped the display down inside the frame's bevel. Carefully. Finally, I attached the Dragonboard to the underside of the Aerocore.
|Down-facing camera peeks out past SD card|
I plugged it in, lights began to flash, bootlog messages came up on the console, and then... nothing... The OLED display stayed dark. Why?
Well the Dragonboard's HDMI interface has a little secret: It's really HDMI over DSI! The video output to the HDMI device is muxed with the DSI lines on the HS header. You select one or the other with one of the S6 dipswitches on the Dragonboard's backside. So once I toggled that to off and powered up my board again, up came my XFCE desktop! Cool!
|XFCE up and running!|
# smart update
# smart install gstreamer1.0 gstreamer1.0-plugins-good \
I copied cam_demo_dev.sh to the dragonboard and tested out the video feed to the DSI display. The script is set up so that you can do that, or stream it over TCP/UDP for any or all cameras.
To stream it to your PC, type this at the Dragonboard's command prompt:
# cam_demo_dev.sh -i <host-ip-address> -c N
where <host-ip-address> is your PC's address and N is '1' for the downward-facing camera, '2' for the front camera, and '3' for both together.
To stream it to the display, just omit ' -i <host-ip-address>'.
Okay, Next!That's it. That's all I had to do. I hope I get the chance to put this stuff on a drone or robot and do some OpenCV work.
Meanwhile, I think I'll write up a quickstart guide for the storefront, a little more formally. I'm still trying to get my LoRa gateway outside and I've got some bugs in the backlog, but I'm sure I'll get back to Aerocore, MAVs or robotics-type projects soon.
Hey, if you have any ideas for new projects, let me know! Follow me on Twitter @gstixguru or drop me an email at email@example.com.