Imote2 with Camera setup IMB400 over Ubuntu 9.10/10.04
Imote2 Camera driver for TinyOS is available in contribution directory of TinyOS 2.x. It goes by the name of tinyos-2.x-contrib.
Thanks to http://www.cs.columbia.edu/~msz/wsn for providing with it. Though the scripts mentioned for 10.04 is not working.
Make sure you see the dialog, having the path, change this path where you want to place the captured images. Or you can modify the
Its location within is
tinyos-2.x-contrib/intelmote2/appsI am assuming that you have tinyos-2.1.1 installed, this is required to have Camera Driver build.
If you dont have it installed... than better have it done by invoking:
apt-get install tinyos-2.1.1From here on to get the driver working, the procedure is as follows:
Browse to opt directory.
cd /optThe recommended way to get the source of tinyos-2.x and tinyos-2.x-contribis is through CVS.
echo "Getting TinyOS 2.x and TinyOS 2.x-contrib from CVS"echo "Press enter when asked for password."cvs -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos logincvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co -P tinyos-2.xcvs -z3 -d:pserver:anonymous@tinyos.cvs.sourceforge.net:/cvsroot/tinyos co -P tinyos-2.x-contrib--OR--
echo "Getting TinyOS 2.x and TinyOS 2.x-contrib from GIT"#git clone git://hinrg.cs.jhu.edu/git/tinyos-2.x.git tinyos-2.xgit clone git://github.com/tyll/tinyos-2.x.git tinyos-2.xgit clone git://github.com/tyll/tinyos-2.x-contrib.git tinyos-2.x-contrib{I found CVS not working for me, so I found solution for it to get it from GIT}
{github is ok to get the code. I found hinrg not working for me initially.}
Do set appropriate environment variables for tinyos-2.x. Remember this will change the variable values, which are by default set to tinyos-2.1.1 if you have installed it.
If you don't set the following environment variables in your terminal sessions you wont be able to build your code. You can make the following part of your script and execute is when you plan to use tinyos-2.x
export TOSDIR=$TOSROOT/tosexport INTELMOTE2_CONTRIB_DIR=$TOSROOT-contrib/intelmote2export MAKERULES=$TOSROOT/support/make/Makerulesexport TOSMAKE_PATH=$INTELMOTE2_CONTRIB_DIR/support/makeexport CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.export LGL_CONTRIB=$INTELMOTE2_CONTRIB_DIR
For Imote2 since it is equipped with XScale, so you will be needing to install xscale tools.
Download the tools from the following location:
After downloading, you will be running the following command in the downloaded folder:
dpkg --install xscale-elf-binutils-2.15-2.i386.debdpkg --install xscale-elf-gcc-3.4.3-2.i386.debdpkg --install xscale-elf-newlib-1.13.0-1.i386.deb--OR--
dpkg --install --force-all xscale-elf-binutils-2.15-2.i386.debdpkg --install --force-all xscale-elf-gcc-3.4.3-2.i386.debdpkg --install --force-all xscale-elf-newlib-1.13.0-1.i386.deb{IF YOU HAVE tinyos-2.1.1 already installed, THAN YOU WILL NOT BE ABLE TO INSTALL ONE OF THE ABOVE,
FOR THIS YOU WILL BE REQUIRING TO RUN DKPG WITH --force-all ARGUMENT}
The error it shows while installing is that it cannot replace libiberty.a in /usr/lib/libiberty.a
So for this --force-all argument is required.
Here on you will be needing the openocd.
DONT RUN
apt-get install openocd, IT JUST WONT WORK. If you do so, and build with it, than it will give you socket error 111. Openocd is no longer available via SVN, however it is mentioned on http://docs.tinyos.net/index.php/OpenOCD_for_IMote2, so the only method is to get it is from GIT.
git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocdgit checkout 3b2a068ea997323eb37251b31be8034c57ff9defcd openocd
./bootstrap ./configure --enable-maintainer-mode --enable-ft2232_ftd2xx echo installing OpenOCD
sudo make $PARALLELsudo make installIf you face any issue here showing appropriate tools missing to build openocd, like I did when it was looking for makeinfo, located in apt-get install texinfo, and for automake, apt-get install automake, for autoconf, apt-get install autoconf, for libtools apt-get install libtool, for libftdi1, apt-get install libftdi1 and apt-get install libftdi-dev, or just try to install them by searching
apt-cache search chmod 4755 /usr/local/bin/openocd cd /opt/tinyos-2.x/tools/platforms/intelmote2/openocd/
We need to replace the imote2-ocd-program because it pointes to arm-usb-tiny.cfg file, which no longer works, for this we need to modify the line
openocd -f arm-usb-tiny.cfg TO
openocd -f interface/olimex-jtag-tiny.cfg -f board/crossbow_tech_imote2.cfgWe do this by the following scriplet.
mv imote2-ocd-program.py imote2-ocd-program_old.pywget http://www.cs.columbia.edu/~msz/wsn/scripts/imote2-ocd-program.pychmod +x imote2-ocd-program.pycd /opt/tinyos-2.x-contrib/intelmote2/tools/platforms/intelmote2/openocd/mv imote2-ocd-program.py imote2-ocd-program_old.pywget http://www.cs.columbia.edu/~msz/wsn/scripts/imote2-ocd-program.pychmod +x imote2-ocd-program.pyAfter this try browsing to the
cd /opt/tinyos-2.x-contrib/intelmote2/apps/cameraMultiHop/rootNodeCompile the first code:
make intelmote2 install openocdIf you see something like
Starting OpenOCD...Connecting to OpenOCD...Erasing flashWriting flashThis means you have setup the required environment to work and proceed with Imote2 Camera Driver. If you see that the OpenOCD halted, than press CTRL+C and than the restart button on the interface board. Try make intelmote2 install openocd again.
If you try to compile the
cameraTestJpegSerial driver, tinyos-2.x-contrib/intelmote2/apps/cameraTestJpegSerial, you will see programming errors reported. To fix these you just need to change
#include "xbowCam.h" to "XbowCam.h" in cameraJpegTestM.ncAlso you will be required to change the filename
tinyos-2.x-contrib/intelmote2/tos/sensorboards/xbow_cb/xbowCam.hto XbowCam.hThis will fix
cameraTestJpegSerial.We can now execute
cameraTestJpegSerial but first we will be required to invoke TinyOS SerialForwarder in another terminal:java net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB1:115200 -port 9002If you see the error like below
The toscomm JNI library was not found.Check that your tinyos-tools package is installed and tryrerunning tos-install-jni.Aborting.This means that your tos jni is corrupted. Invoking the
tos-install-jni will not fix this problem. You will have to give path of library manually where ever you see this problem. The path can be obtained by invoking tos-locate-jre --jniHence the command will be
java -Djava.library.path=/usr/lib/jvm/java-6-sun/jre/lib/i386 net.tinyos.sf.SerialForwarder -comm serial@/dev/ttyUSB1:115200 -port 9002I am assuming that you have the jtag and the usb mini B connected to
/dev/ttyUSB0 and /dev/ttyUSB1. Make sure that both are connected to the same interface board, i.e. the one having jtag port, obviously when you are programming. The above is the gui of serial forwarder. You can run command line of it also by invoking
sf 9002 serial@/dev/ttyUSB1 115200sf is located in tinyos-2.x/support/sdk/c/sf/After running serial forwader, either the GUI or command line one, we browse to the following folder and invoke
make, followed by ./runcd /opt/tinyos-2.x-contrib/intelmote2/apps/cameraTestJpegSerial/javamake./runIf you again see error like the last one informing that
toscomm JNI library was not found, than replace the ./run file last line with java -Djava.library.path=/usr/lib/jvm/java-6-sun/jre/lib/i386 CameraGUI
CameraGUI.java file and replace the path there i.e. at line 126 you will see something like fieldInterval.setText("/tmp/imote2/"); Just change this path, to your desired location, ending with '
/', invoke make and ./run than.Only VGA is working as an image capturing.
Currently the saved images are cut, it seems like a jigsaw puzzle sometimes, and sometimes repeatition of the same image. That's still unfixed as per http://tech.groups.yahoo.com/group/intel-mote2-community
The application for Multihop is broken so far. The working application is just the single hop located at http://tech.groups.yahoo.com/group/intel-mote2-community/files/CameraSingleHopTest/, you will be required to sign in to access it. Place the folder in the same apps directory as of
cameraTestJpegSerial and camerMultiHop. Burn one mote with baseNode and one mote with cameraNode. Than browse to the java folder and invoke make followed by java CameraGUI, again if you see error like the last one informing that toscomm JNI library was not found, than replace the run file last line with java -Djava.library.path=/usr/lib/jvm/java-6-sun/jre/lib/i386 CameraGUIThis time it relies on MOTECOM variable.
This
MOTECOM variable is also used internally by applications, you can see it by printenv MOTECOM, you can set it by export MOTECOM=serial@/dev/ttyUSB1:115200That's all for now. If you face any issue during this, please comment on this post with your finding. After all its a hard earned debugging evolution up there :).
Thanks.
Comments
http://www.gaps.ssr.upm.es/en/research/wsn/138-compiling-for-an-arm-architecture-imote2-tinyos
I cannot do the commend
make intelmote2 install openocd
It gives out an error of
make: *** No rule to make target 'intelmote2'. Stop
May I know how to deal with it?