This will show BASIC functionality of how to get the UAV DevBoard and the ArduPilot working. The rest is up to your imagination and the recipes you come up with and the add ons you want as well. I am sure there may be cleaner and better ways to interface the two but this was the easiest for me to be able to get the functions on board the plane i needed.
I will be showing you the ways I was able to use my gumstix overo fire and summit expansion board with my AP's. Tested with both the UDB V2 and ardupilot with v2 shield and xyz sensors
First and foremost you will want to make sure you have properly built and setup your build environment for the gumstix overo. You will also want to make sure you have setup your user.collection section properly and copy over the entire linux folder from the OpenEmbedded recipe selections. This way once you setup the kernel config your defconfig file will always stay the way you set it up. I will only discuss changes I made that pertain to getting the AP and the overo setup. A tip on everything from here on out is to make sure your build environment is setup and WORKING properly. This was not simple for me and took a long time to fine tune, and the build chain breaks all the time. Also my other tip is once you have a version of the branch your on you like make sure you make a branch from that config in case your next git pull breaks something. Which trust me happens way more than you want.
Once you have that all done and setup you will first want to just build a basic image:
bitbake omap3-console-image
By doing this you build everything you will need and the kernel will get built. Grab a drink or go do something else it will take a long time even with a fast internet connection the first time.There are many kernels to chose from depending on what you want to do with your setup and to set the preferred kernel version in your overo.conf file you will want to add this line to the file:
PREFERRED_PROVIDER_linux_omap3 = "2.6.32"
Now if you want to choose a different kernel make sure you change accordingly. Once you have built the kernel you will want to go in and customize it. The way you want to do that is through bitbake:
bitbake -c menuconfig linux_omap3_2.6.32 * I am currently running the psp kernel
Technically you do not need to reconfigure the kernel but I went in and added all i2c debugging and options that there were so as to make sure my kernel had anything it would need while working on this. I would recommend you do the same as well just so you can make sure as you go and add things on you have any functionality you need. Or say if you know future needs you want to add in you might as well set them up now so you have less chance of reconfiguring the kernel again later, other things to keep in mind are if you want to use a USB camera you will need to make sure you configure the kernel to use that as well (this is a not difficult process and if needed can post the way to get the camera and drivers and modules if your camera can work in linux should be fine). I also made sure to setup iptables properly. Also you might want to do any security configurations at this time as well. I will not go into any of that as its way out of the scope for here. Honestly there is a ton of different things for the kernel to keep in mind and this only BRIEFLY touches what you should do. And as this is going to be long as it is, I am trying to keep this slim in case there is not really much interest.
Now you will want to take your image you made and install it either on the nand or sd card. The first time you boot your image it can take anywhere from 10 to at the longest its taken for me was 75 min for the first boot, this is first boot only. For the sd card use at least a 8gb and if you want more room for HD space you can use a thumb drive your size of choice. 60 GB for me :)
Now if you want to change an the clock you will need to get into uboot you will want to reboot your system now and once it reboots hit enter in the 5 seconds you have. Now enter the following commands:
printenv ( This will show you your current environment variables you can take note for safety sake)
setnenv (Your new boot args or so on)
saveenv
restart
setnenv (Your new boot args or so on)
saveenv
restart
For both applications you will need a SparkFun logic level converter. Was the cheapest and most recommended to me for this. You need this because the header on the overo is 1.8v
I also chose to run an XBee and this setup to transmit my telemetry info back, basically a failsafe telemetry. So to do this I made basically a y harness. So that way you can connect the overo and XBee together.
Now for connecting it:
From the summit board 40 pin header take pins 9 rx and pin 10 tx and put those on to the logic level converter on their corresponding pins on the LV side. Now you will want to run pin 26 your 1.8v and 25 ground to the LV side of the converter. Now from the HV side of the converter board you will want to run a power and ground to it, I just ran a Y cable from what would go to the XBee and hook up your power and ground to the HV side and connect the TX of your AP to the RX pin on the HV side of the converter. Bingo thats it.
There are a bunch of great pins you can access on there, I am using the serial port for the AP as well as using the i2c interface.
Now from your overo a simple connection to read the stream is as follows:
#!/usr/bin/python
import serial
import sys
import struct
if len(sys.argv) !=3:
print "Usage: UAVser.py <seria lport> <baud>
ser = serial.Serial (sys.argv[1], sys.argv[2], timeout=None)
try:
while True:
sys.stdout.write(ser.read())
sys.stdout.flush()
finally:
ser.Close()
print "Closed"
This is nothing more than a test program to make sure you can get the serial stream on your overo.
If there is enough interest I can post more information, programs and maybe other tutorials with what I have done with adding a full blown computer on board with our AP's. Though basically everything I have written are either bash scripts or C, python and perl programs and none are anything to fancy, most of what I do on board is just using existing linux programs. I log everything to a single file and that goes into a database on the overo. Then my on board programs read the data from there and fills it in appropriately to the programs, while also keeping an entire running log. I have one program that collects the info from the AP and sends it back on a dedicated wifi link to be displayed on the GS laptop. I am running a basic USB webcam running a program I wrote that uses ffmpeg for now to stream the video and I also have it place some of the telemetry stream on top as a dirty OSD type setup. The video and OSD are nothing fancy and were just because I had a camera laying around and got frustrated with some other stuff one night and got it to work "good enough" for now. I also have a 4-port powered USB hub and 2 ALFA USB wifi adapters on top of the on board wifi on the overo, as well as the on board bluetooth and a USB bluetooth adapter. Currently the CPU usage on my overo with the video and if I have everything running which is 35 separate scripts or programs wifi related and 10 bluetooth related, and the on board wifi and bluetooth both running, sqlite making its DB I have only hit a max of 67% cpu usage with the chipset running 720mhz. There are more functionalities I have added as well but most would be of no interest to people here.
You can also hook up both AP's by means of i2c but its more complex to configure and you need to add code to the AP your using if you want to get the fully functionality out of the connection and the time and hassle to do so. I have run both AP's connected in both manners (serial port & i2c). Though I am have more time with the UAV Dev Board V2 than my Ardu setup in both configurations. Also if they are wanted I can post pictures of the connections
Thanks to:
Everyone here on the site who listened to my ramblings and helped me with my problems, Chris and Morli especially! A big thanks to Bill P. for making the DevBoard and Jordi for the Ardu :) a huge special thanks goes out to my son!
Sorry for the bad pics, I dont have a good camera at this time to take pictures. I will also post more configuration pictures in a reply in a few days when the camera shows up.
Comments
Theoretically yes you could. I have not used the ArduPilot in a long time so can not be more specific than that. I have moved on to my own AP platform from what I liked about a few different autopilots on the market last year and designed to be used for security audits.
Can you connect a gumstix and ArduPilot and send the ArduPilot a simple command and when the ArduPilot receives the command, it can push the command to the gumstix starting whatever the command tells it to?
I selected the ICD2 and used an Olimex compatible ICD2 programmer to program my UDB3. There was an issue. At 4.5V (they have an onboard regulated supply to 4.5V), Piklab did not program the UDB3 correctly. And in fact, on returning to Windows, the board was still "stuck" and could not be programmed. But with Bill's help, I applied 5V directly to the VCC pin on the edge of the board (close to the serial TX and RX) and then did a program erase under Windows. That recovered the Pic to a working condition. I then returned to LInux, and experiemented with using Piklab again, but this time forcing the onboard voltage to be 5V rather than 4.5 V .... with the same technique that I used under Windows. Piklab then programmed the board correctly. Since then, I have read the dspic programming specification, and strictly speaking you need 5V for a bulk erase. So I think we, as a project, have been operating slightly outside the spec when we program at 4.5V. I have now purchased a pickkit 2, and hope to experiment with that under Piklab and 4.5V. It may work, which will be easier.
Look forward to your compile recipe.
So you have two parts to jump now. A successful compile and link. And then a successful programing of the dspic.
I hope that all helps. Best wishes, Pete
I created a new user on my Linux system with the intention of re-creating the entire procedure that I had used to get my version working, in a new account. However, Microchip have put in a few more barriers to success. The original version 3_22 evaluation binaries are not available via their archive. So unless you already have them, you would not be able to re-produce my own Linux compile environment. (They are required to link in some of their proprietary libraries. e.g. standard C library (yes they have their own proprietary one), and maths libraries for matrix manipulation). So then I switched to the 3_24 version, but that is failing on the required patches that have to be applied to fix up some other things that Microchip have done with the newer source version.
If anyone want to follow this all through and give it a try for themselves, then a good link with instructions is :-
http://www.electricrock.co.nz/blog/microchip-c30/
If you get the compiler to compile, then please come back to me, and I'll post the Picklab recipe that I use (An xml file).
If we take this discussion further, then I suggest we start a fresh post / topic somewhere with the relevant heading.
Man I wish I could get hours in the air that would be some serious fun for me.
An extra 190mA is not bad at all. This might be fitted to a glider where flight times could be hours.
I have separate Rx and motor batteries. The Rx battery is 2s 1600mah.
Your comment on the GCS is interesting. I was heading towards using pixhawk GCS because of the MavLink protocol and control. It is a pity it is not fixed wing and cross platform compatible.
Regards Matt