Archive for the ‘Ardupilot’ Category

2012 AUVSI USUAS Results

The 10th annual Undergraduate Student Unmanned Aerial Systems competition hosted by AUVSI’s seafarer chapter concluded last week.  Teams from across the United States, Canada, India, and Turkey converged on Webster naval airfield for several days of autonomous competition.

Final standings

  1. Universite de Sherbrooke
  2. Embry-Riddle (UARE)
  3. California State at Northridge
  4. Delhi Technical University
  5. Cornell University
  6. North Carolina State University
Best Journal – University of Texas at Austin
Best Oral Brief – Kansas State University
Best Mission – Universite de Sherbrooke


Listed here are some of the autopilots used by various schools.  If you know what autopilots any other schools were using please comment below.


  • North Carolina State University
  • Mississippi University
  • Kansas State University
  • Kansas State University (Pomona)
  • Cornell University
  • New Delhi University


  • Universite de Sherbrooke
  • Great Mills High School
  • Utah State (Rotary)


  • Rutgers University
  • Embry Riddle Prescott

Servo Sin Wave

Automatic code generation is a powerful tool that when combined with Simulink promises important benefits to students and highly complicated applications alike.  Mathworks distributes an Arduino Blockset for Simulink.  The Arduino platform is a desirable to use because of its simple architecture and available hardware.  These hardware options include the ArdupilotMega (APM) which includes sensors and pinouts that will make it easier to integrate into a future aerial vehicle.

While the 2012a version only requires the base Matlab and Simulink packages, NCSU does not currently provide the 2012a version to students.  Instead the 2011a version was used since it was available.  It is not expected that there will be problems using the work done with 2011a in the 2012a release.

The base Arduino blockset includes blocks for Analog and Digital I/O as well as serial communication.  To take full advantage of the capabilites of the APM, additional blocks for SPI, I2C, PPM, and Servos are needed.  Development of a servo blocks has been the focus of this last week.

  The new blocks, shown in blue, allow for the configuration and control of servos attached to the APM.  An interesting note  is that although the APM only has 8 servo lines broken out on the side, there are an additional 3 lines (PL3, PB5, and PE3) that can be configured to output PWM commands. These lines are broken out from the APM base-board, but are not available on the sensor-shield “Oilpan”.

With just the blocks from the base, shown in yellow, and the new servo blocks it is already possible to access quite a few of the APM’s functions.  The demonstration program shown above commands two servos through a sin wave motion.  Data is read from the serial port allowing for the functionality of Servo 1 to be switched between sin wave and center position.

This is not an echo


Digi, the manufacturer of zigbees, provides a useful tool for configuring and testing the units.  One feature of this tool is a “Range Test”.  The test is based on the concept of a loop back.  A certain packet is sent from the local zigbee to a remote zigbee.  The remote zigbee then echos the packet back.  By comparing the packet sent to the packet received errors can be detected.  The inclusion of an RSSI measurement makes the tool even more useful.

However, when running the tool with the Ardupilot Mega (v1.02) code running a range test the results returned where abysmal.  An investigation into the code revealed the code shown below.  The critical section is shown in bold where the author choose to copy the default packet into the code and simply transmit it every quarter of a second.  The abysmal results from running the range test were caused by the radios being configured at a different baud rate than the author had assumed.  Additionally, when running the rssi test a delay was introduced which resulted in the tool seeing terrible packet corruption.

test_xbee(uint8_t argc, const Menu::arg *argv)
		// Timeout set high enough for X-CTU RSSI Calc over XBee @ 115200
		// Default 32bit data from X-CTU Range Test
		if(Serial.available() > 0){
			return (0);

Shown here is a simple implementation of an actual loop back.  This change has been adopted by the Ardupilot project and should be available in the next release.

test_xbee(uint8_t argc, const Menu::arg *argv)
                int incomingByte;
                      incomingByte =;
		if(Serial.available() > 0){
			return (0);
Return top