3sat shooting
We did some test flights today for the German TV 3sat. The shots will be aired in March this year. Just a couple of days before the shooting we got our very own FLIR PS thermal camera, yay.
Some footage of the shooting:
random ramblings of randomness
We did some test flights today for the German TV 3sat. The shots will be aired in March this year. Just a couple of days before the shooting we got our very own FLIR PS thermal camera, yay.
Some footage of the shooting:
// $Id$
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
struct opt_t {
char* opt;
char* arg;
};
int opt_parse(int argc, char *argv[], const char * optstring) {
//Specifying the expected options
//The two options l and b expect numbers as argument
while ((option = getopt(argc, argv, optstring /*"apl:b:"*/)) != -1) {
switch (option) {
case 'd':
printf("Database: %s\n", optarg);
break;
default:
printf("Huh?");
return EXIT_FAILURE;
}
}
return 0;
}
int main(int argc, char** argv) {
const char* opts = "d:";
int r = opt_parse(argc, argv, opts);
return r;
}
After several successful firmware uploads from the Arduino IDE via Arduino Uno as ISP programmer to an ATtiny85 it suddenly stopped to work.
I have not figured out why this happens, a friend of mine has the same problem and couldn't find what caused it neither.
Long story short, the work around is to use Arduino IDE to compile the sketch and avrdude directly to do the uploading.
$ avrdude -P /dev/ttyACM0 -p t85 -c avrisp -b 19200 \
-v -F -U flash:w:pulse_in.cpp.hex

This is our new status display of the Service Monitoring System I have built up during the last years. My cow-orkers keep forgetting to act upon warnings. I thought I could add some extra motivation for fixing errors in a timely manner (note the nice sound it makes :) ).
A little bit of python, a little bit of *nix voodoo glued together with a bash script - done.
I personally prefer to use mavproxy and it's example utilities (such as mavgraph.py). It should be ported to windows by now. More info about mavproxy on diydrones.com.
Randy Mackay made some nice instructional videos on analyzing APM log files with Mission Planner and Microsoft Excel (basically any spreadsheet tool will do as long as it understands delimited text files).
First, the onboard logs are always available except if the APM is destroyed, for example, in a crash. This video shows how to analyse the onboard logs of an ArduPilot Mega board:
For those new to APM, Randy explains in more detail how to obtain the onboard logs of an APM 2.5. Make sure to connect your APM board via USB to the computer and you might use APM Mission planner to download the onboard logs:
Telemetry log files (*.tlog) provide much more information than onboard logs. The telemetry logs can be analysed in Mission Planner as well. Here a short overview on ho to work with tlogs in mission planner:
Finally I made some progress on the r/c camera control. A fairly simple and cheap solution is to solder cables to the power button of a cannon camera. Hook these up to an ATtiny85 (45 would probably do as well). The ATtiny reads a PPM signal from an r/c receiver and switches the camera on or off accordingly.
ATtiny pin layout:

Schema:

Demo:
ATTiny Code (C++ Arduino):
/** * Read PPM signal * * Decode r/c receiver PPM servo signal and turn lights on * according to stick position. * * $Id$ */ // pin setup #define PIN_PPM 0 #define PIN_POS1 4 unsigned long duration, lastgood = 0; int position = 0; void setup() { pinMode(PIN_PPM, INPUT); pinMode(PIN_POS1, OUTPUT); digitalWrite(PIN_POS1, LOW); } void loop() { // the length of the pulse (in microseconds) or 0 if no pulse // started before the timeout (unsigned long) duration = pulseIn(PIN_PPM, HIGH, 20000); if (duration == 0) duration = lastgood; else lastgood = duration; position = map(lastgood, 1000, 2000, 0, 1); if (position > 0) digitalWrite(PIN_POS1, HIGH); else digitalWrite(PIN_POS1, LOW); }
--[[ rem 2013-01-13 by Simon Wunderlin, ResearchDrones LLC @title ResearchDrones Fast Interval @param a = interval (sec/10) @default a 10 --]] function camera_close() click "display" sleep(1000) click "display" sleep(1000) shut_down() sleep(5000) end --[[ f = get_usb_power(1) if f == 1 then camera_close() end ]]-- --shoot() repeat start = get_tick_count() press("shoot_half") repeat sleep(50) until get_shooting() == true click("shoot_full") release("shoot_half") sleep(a*100 - (get_tick_count() - start)) until ( false )
In December 2012 Remo and I were invited to do a technology demonstration in the National Park Odzala, in the Republic of Congo (not DRC).
It was an interesting field trip, the first time for us being out there with researchers.
Out of this 9 day trip, only 2 days could be spent on flying, testing and training. The rest of the time we spent on airplanes, hotels and most of it in a Jeep driving roughly 1600km from the airport to the national park on more or less something we would call roads.
View Odzala National Park, Congo in a larger map
The 3 nights in the field we spent in a camp of the Forrestry Administration in Mbomo (1.5h away from our flying site).
Here a short video of the test flights we were conducting in the Savannah in the middle of the national park.
On the 3rd January we have been conducting test flights with 2 different thermal imaging cameras in Switzerland.
We have been using an FLIR (forward looking) and a NEC F30 (downward looking) on the current UAV platform connected to a long range video transmission system.
The FLIR HS-324 produced quiet good results
At 0:30 and 1:38 there can people and cars be seen standing on the runway. This footage was taken from around 100m above the ground.
Some cars and people standing on the runway can be seen at 0:50, 1:12 and 1:30.
I am currently on the search for a simple way to graph and analyze ArduPilot Mega telemetry logs. APM uses mavlink as protocol.
Andrew Tridgel has written a nice python library for the mavlink protocol which is called (who would have guessed?) pymalink.
pymavlink comes with a couple of examples which are quiet usefull (check the pymavlink/examples folder).
mavlogdump.py will generate an ASCII representation of the binary data structs. This outpu can be easily converted with sed, grep, awk, etc. for analysis in other programs.
mavplot.py can be used to graph data from the file.
I am currently analyzing a crash of a fixed wing drone. It's far away and all I have is a telemetry log file. mavplot.py could nicely display, that the drone stalled shortly after the takeoff, still unsure why.
mavplot.py example usage:
$ pymavlink/examples/mavgraph.py --planner --mav10 sander.tlog \
VFR_HUD.airspeed 'VFR_HUD.groundspeed' '(SERVO_OUTPUT_RAW.servo1_raw-1000)/100' \
'(SERVO_OUTPUT_RAW.servo2_raw-1000)/100' '(SERVO_OUTPUT_RAW.servo3_raw-1000)/100' \
'(SERVO_OUTPUT_RAW.servo4_raw-1000)/100' ATTITUDE.roll ATTITUDE.pitch ATTITUDE.yaw \
'VFR_HUD.alt/10'
Last weekend we have been visiting the Netherlands to train Sander, a brave young biology scientist. Sander is planning to monitor Chimpanzees in Gabon with our Drone.
This time we got everything right. The autopilot was working perfectly, performing automatic take-offs and landings. The cameras shot quiet sharp images.
The current solution is able to carry quiet some payload, approx. 1kg. The planned endurance on this airframe is 1h. It is fully autonomous and the flight can be planned with a laptop through a map and then be uploaded to the drone.
Here are some impressions from the flight training and testing in Holland: