5 Mar 2013

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:


24 Feb 2013

Example using getopt from C


// $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;
}

13 Feb 2013

Problems programming ATtiny85 from Arduino IDE

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.

Compiling

Compiling code for ATtiny85/45 in Arduino IDE requires that the hardware definitions of these chips are installed in Arduino IDE:

Once the code is compiled it can be found in /tmp/build[0-9]*.tmp/*.hex on a *nix platform (C:\Windows\temp\... probably on windows, check the Arduino IDE manual).

Once the location of the hex file is known, I copy it to a safe place (data in the temp folder are purged occasionally).

Arduino as ISP

I am using Arduino Uno as programmer. For this wot work the arduino must be flashed with an already available sketch called: ArduinoISP (found under Examples).

Once this sketch is uploaded, the Arduino Uno works as In System Programmer and can be hooked up to your ATtiny device. The Arduino Uno is the used as "bridge" between your USB port on the computer and the tiny, as well as power supply.


Uploading

Using avrdude with the following parameters worked out of the box for me on a virgin ATTiny85 from linux:
$ avrdude -P /dev/ttyACM0 -p t85 -c avrisp -b 19200 \
          -v -F -U flash:w:pulse_in.cpp.hex



4 Feb 2013

nag-o-meter



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.



APM log analysis



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:


31 Jan 2013

2012 WWW Fuller Symposium, Washington DC



Dr. Lian Pin Koh from ETH Zürich speaks about the application of drones (small, autonomous Aircrafts) for biologic conservation:


A ResearchDrone's MAJA is featured at 16:31.

28 Jan 2013

/dev/null

i just figured where all the stuff that is piped to /dev/null goes to.


16 Jan 2013

APM Camara control print

The first prototype, lets put this into a drone.


15 Jan 2013

APM Camera power control & CHDK intervalometer

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);
}



Intervalometer Code (lua):

--[[
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 )

12 Jan 2013

ResearchDrones Deployments



View Deployments in a larger map

ResearchDrones in Congo

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.

5 Jan 2013

ResearchDrones test flights with thermal imaging cameras

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.

10 Oct 2012

Analyzing mavlink packages

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'
 

The nice thing about these tools is, that parameters can contain python expressions which means, all the values can be adjusted to a specific need.


25 Sept 2012

Magick numbers

yay, one of my posts just hit 2600 views ;)

13 Sept 2012

Flying the ResearchDrones UAV in Holland

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: