Dev/Caspa
This page describes the ongoing work to fully integrate a Caspa FS camera on a Lisa/L board. Any advices/suggestions/contributions are welcome.
Final Goal
The final goal is to have a Caspa FS camera connected to the Overo chip on a Lisa/L board. The Overo chip should be able to communicate with the STM32 via SPI. The link shall be used to transmit the result of the image processing computed by the Overo. However this should be flexible enough to let some room for the developer to decide which processing to do and which kind of data to send. Digital video streaming to the groundstation is also interesting.
Methods
The following lists the steps that are deemed to be important in achieving the final goal.
- Bitbake a kernel for Overo that includes the camera modules and the SPI modules
- Make sure that the SPI modules for the STM32 work properly
Caspa camera on an Overo expansion board
As a first step a simple connection between the camera and the Overo was tried using an Overo expansion board, i.e. not the the Lisa/L board.
Hardware components
Step-by-step
Create a bootable MicroSD card if you do not have one
Follow this and use LABEL1 as 'mmcblk0p1' and LABEL2 as 'mmcblk0p2'.
Load a pre-built standard image
sudo chown [user_name] /media/mmcblk0p1 sudo chown [user_name] /media/mmcblk0p2 wget http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/omap3-desktop-nand-image-overo-booted.tar.bz2 tar -xjf omap3-desktop-nand-image-overo-booted.tar.bz2 -C /media/mmcblk0p2 // ignore errors wget http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/MLO wget http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/u-boot.bin wget http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/uImage cp MLO /media/mmcblk0p1 cp u-boot.bin /media/mmcblk0p1 cp uImage /media/mmcblk0p1
Replace some files to get the camera modules working
wget http://cumulus.gumstix.org/images/angstrom/misc/caspapx/uImage-2.6.34 wget http://cumulus.gumstix.org/images/angstrom/misc/caspapx/modules-2.6.34.tgz tar -xf modules-2.6.34.tgz -C /media/mmcblk0p2/ cp uImage-2.6.34 /media/mmcblk0p1/uImage cp uImage-2.6.34 /media/mmcblk0p2/boot/uImage
Attach the camera to the Overo board
Insert the white ribbon cable contact-side-up into the Caspa connector and contact side down into the Overo connector.
Insert MicroSD card in the Overo board
Set environment variables
- Connect the expansion board to the host machine via USB B (Console)
- On the host machine do:
[sudo apt-get install ckermit] kermit -l /dev/ttyUSB0 C-Kermit>set flow-control none C-Kermit>set carrier-watch off C-Kermit>set speed 115200 /dev/ttyUSB0, 115200 bps C-Kermit>connect Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options.
You have now a console connection to the Overo
- Power-up the expansion board
- Hit 'Enter' to interrupt the boot sequence
- Type in the console:
nand erase 240000 20000 reset
This makes the Overo to read the environment variables defined by the kernel in the MicroSD. You just have to do this once after setting up the card.
- Hit 'Enter' to interrupt the boot sequence again
- Type in the console:
setenv defaultdisplay lcd43; saveenv; reset
You just have to do this once after setting up the card.
Get the image
- Let the Overo boot properly
- Touch the screen and calibrate it as indicated. You just have to do this once after setting up the card.
- Type in the console:
overo login: root export DISPLAY=:0.0 mplayer tv:// -tv driver=v4l2:device=/dev/video0 -x 480 -y 272 -vo x11
The camera image should appear on the LCD display.
Based on Gumstix wiki.
WiFi digital video streaming
Here we show how to achieve WiFi digital video streaming with the Lisa/L board. This setup can be used as a parallel system to the autopilot running in the STM32. However, as connection from the Overo to the STM32 is envisaged we try to prepare the Overo kernel for SPI support (not tested yet).
Hardware components
Step-by-step
The general idea is to build a Linux kernel and a filesystem image for the Overo board which supports both the Caspa camera (sensor mt9v032) and SPI. Aside from this we use the DSP for encoding the image and WiFi for streaming to the ground station.
It helps if you have notions of Bitbake & OpenEmbedded and git. Otherwise you can try doing it in a mindless way and it should also work. For that follow only the steps marked with a (*).
Get the Overo kernel building environment
$ cd ~ $ mkdir overo-oe $ cd overo-oe $ git clone git://gitorious.org/gumstix-oe/mainline.git org.openembedded.dev $ cd org.openembedded.dev $ git checkout --track -b overo4lisa-2011.03 origin/overo-2011.03
$ cd ~/overo-oe $ git clone git://git.openembedded.net/bitbake bitbake $ cd bitbake $ git checkout 1.10.2
$ cd ~/overo-oe $ cp -r org.openembedded.dev/contrib/gumstix/build . $ source build/profile
More info here.
Changes to the original respository
In conf/machine/overo.conf edit the lines:
'SERIAL_CONSOLE = "115200 ttyO2' to 'SERIAL_CONSOLE = "115200 ttyS2' 'PREFERRED_PROVIDER_virtual/kernel = "linux-omap3"' to 'PREFERRED_PROVIDER_virtual/kernel = "linux-omap3-caspapx"'
This will make kernel 2.6.34 to be compiled instead of 2.6.39 which has no support for the camera at the time of writing.
Now we need to give the right configuration before compiling the kernel. Here you can choose to do it yourself:
$ bitbake -c menuconfig linux-omap3-caspapx $ cp ~/overo-oe/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-caspapx-2.6.34-r101/git/.config ~/overo-oe/org.openembedded.dev/recipes/linux/linux-omap3-caspapx/overo/defconfig
Add support to the mt9v032 sensor, disable touchscreens and LCD displays (which use the same I/O lines as SPI) and add support to SPI.
Or you can use the same configuration as I did:
$ wget https://raw.github.com/gist/1094791/b27d273fed144231b2ded7c5649b93e381c9d629/linux-omap3-caspapx-kernelConfig $ cp linux-omap3-caspapx-kernelConfig ~/overo-oe/org.openembedded.dev/recipes/linux/linux-omap3-caspapx/overo/defconfig
Then, I modified the original filesystem recipe so that every component is include. Do:
$ wget https://raw.github.com/gist/1094809/bf6ce898134fe4ef96bfc0ba7ecac7577583d2b8/omap3-overo4lisa-image.bb $ cp omap3-overo4lisa-image.bb ~/overo-oe/org.openembedded.dev/recipes/images/omap3-overo4lisa-image.bb
Finally, follow the step 'Building task-gstreamer-ti' in jumpnowtek but do not run the last 2 commands.
Compiling the kernel
$ bitbake -c clean linux-omap3-caspapx $ bitbake linux-omap3-caspapx $ bitbake x-load $ bitbake u-boot-omap3
Building the filesystem image
$ bitbake omap3-overo4lisa-image
Load a bootable microSD card
See Create a bootable MicroSD card if you do not have one.
$ cd ~/overo-oe/tmp/deploy/glibc/images/overo $ cp MLO-overo-1.44+r20+gitr24b8b7f41a83540433024854736518876257672c-r20 /media/mmcblk0p1/MLO $ cp u-boot-overo-2010.9+r1+git1e4e5ef0469050f014aee1204dae8a9ab6053e49-r1.bin /media/mmcblk0p1/u-boot.bin $ cp uImage-2.6.34-r101-overo.bin /media/mmcblk0p1/uImage $ tar -xvf Angstrom-omap3-overo4lisa-image-glibc-ipk-2011.03-overo.rootfs.tar.bz2 -C /media/mmcblk0p2 $ tar -xf modules-2.6.34-r101-overo.tgz -C /media/mmcblk0p2
In /media/mmcblk0p2/etc/inittab edit the line:
'S:2345:respawn:/sbin/getty 115200 ttyO2' to 'S:2345:respawn:/sbin/getty 115200 ttyS2'
Load a bootable microSD card with a prebuilt kernel and filesystem (*)
ToDo
Setup WiFi connection
In /media/mmcblk0p2/etc/network/interfaces add the lines:
auto wlan0 iface wlan0 inet static wireless_mode ad-hoc wireless_essid caspa address 192.168.0.202 netmask 255.255.255.0
Setup (p.e via NetworkManager) a similar network in the ground station side and give to this the address '192.168.0.202'. Of course other configurations are possible.
Edit u-Boot parameters (*)
- Put the microSD card in the Overo board.
- Connect the expansion board to the host machine via USB B (Console)
- On the host machine do:
[sudo apt-get install ckermit] kermit -l /dev/ttyUSB0 C-Kermit>set flow-control none C-Kermit>set carrier-watch off C-Kermit>set speed 115200 /dev/ttyUSB0, 115200 bps C-Kermit>connect
You have now a console connection to the Overo.
- Power-up the expansion board
- Hit 'Enter' to interrupt the boot sequence
- Type in the console:
nand erase 240000 20000 reset
- Interrupt again the boot sequence
- Follow the step 'U-Boot Kernel Parameters' in jumpnowtek (Gumstix procedure)
- Finally type:
reset
Streaming (*)
Now the Overo is ready to start streaming. Set up the connection in the ground station with NetworkManager. A blue LED should light up in the Overo board. Use the following:
$ wget https://raw.github.com/gist/1094865/efc9578a0fa23784636d0ef02d9281e8b490dcca/videostreaming.sh $ ./videostreaming.sh
Work in progress
- SPI communication between Overo and STM32
- Camera tunning possibilites