Penn State University ArduPilot Project

I'm an undergrad EE student at Georgia Tech and this summer I'm working in an aerospace research lab at Penn Sate University, headed by Dr. Jack Langelaan. My project is to outfit a Zagi THL glider with an autopilot system. The reaserch is being funded by the NSF, and the aim is to work on developing open-source autopilot hardware and software, with a goal of having the drones do useful work, such as monitoring meteorological conditionsWe want our autopilot to be based around an IMU. We're using an IMU because we need a system that is more robust than the IR sensors that the ArduPilot is based around. This system will need to be able to stabilize the aircraft in heavy clouds, near mountains, and in other conditions that are likely to fool the IR sensors.We were initially planning on using the Sparkfun 6DOF V4, but due to the availability of the Vectornav VN100, we have decided to use that instead. Connecting either module to the ArduPilot presents a challenge because of the limited IO ports on the ATMega microcontroller. However, while the Sparkfun module only has a UART interface, the VN100 also has SPI, which should make it relatively easy to interface with.The VN100 implements an extended Kalman filter onboard, so we will get an attitude solution from the module, which we will use on the ArduPilot to stabilize the aircraft.Navigation will be accomplished using a GPS, in our case the u-blox 5 module from Sparkfun. This seems to be one of the best chipsets available today, and unlike NMEA, the ubx protocol provides vertical velocity data, which is useful for aircraft navigation.Our airframe is a Zagi THL glider. This is a flying wing, with elevons as the only control srufaces. This makes control of the aircraft slightly more difficult than with an Easystar, as it requires mixing of the control surfaces to execute a level turn. I've attached a photo below.I'll keep this post updated with my progress throughout the summer, and add more details about some of the pieces I'm working on.

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones

Comments

  • Damon Pipenberg

    I am using now and arduino Due to interface VectorNAV_100 in SPI mode
    below is the link of the hardware 
    I am sending a request in spi to read yaw pitch roll(registry 8)
    0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    but the output is coming as
    0x01, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    i even tried with other registry (0x13 etc) but the output is the same
    can u suggest where am i going wrong
    Below is the code uploaded to arduino due
    #include <SPI.h>
    /*
    code to read vectornav data via an arduino DUE SPI pins 
    */
    byte attitude[16]; // yaw, pitch, & roll
    int slaveSelectPin = 52; //52 or 4 or 10
    void setup() 
    {
      Serial.begin(115200); 
      SPI.begin(slaveSelectPin); 
    delay(1000);
      
      SPI.transfer(slaveSelectPin, 0x01, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x08, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
      SPI.transfer(slaveSelectPin, 0x00);
      
      delayMicroseconds(100);
    void loop() 
    {
          attitude[0] = SPI.transfer(slaveSelectPin, 0x01, SPI_CONTINUE);
          attitude[1] = SPI.transfer(slaveSelectPin, 0x08, SPI_CONTINUE);
          attitude[2] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[3] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[4] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[5] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[6] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[7] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[8] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[9] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[10] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[11] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[12] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[13] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[14] = SPI.transfer(slaveSelectPin, 0x00, SPI_CONTINUE);
          attitude[15] = SPI.transfer(slaveSelectPin, 0x00);
     
           for (int i = 0; i < 16; i++) 
          {
            Serial.write(attitude[i]);
          }
    }
  • Man, I'm jealous. I never got to work on fun projects like this when I was in school!
    What is your objective with the glider? Slope soaring or are you converting to electric motor? Have you guys looked at the Zagi 60 electric wing? More room and easier to see. Those autonomous flights are a real challenge on the eyes with a small plane.
  • Developer
    Actually the VN100 will be completely useless for your project. It doesn't account for Centripetal....has no way too....Doesn't know airspeed or GPS ground speed. It even says it in the manual....well kinda illudes to it. Unfortuneately you'll have to spend a ton of money or build an in house imu....hence why most go with the horizon sensors (thermalpiles). Sorry for the bad news.....
  • As I said above, we're using a Vectornav VN100 as the IMU, more specifically a AHRS. This has 3 axis of accelerometers, gyros, and magnetometers on a single PCB, and has a microcontroller on-board that implements an extended Kalman filter to estimate the attitude of the aircraft. Using this will make the project significantly easier, as this unit will perform the difficult calculations.

    We've considered Paparazzi, and actually have one in the lab, but have decided to go with ArduPilot for this. Part of the point of this project is to work in conjunction with hobbyists, and I think that ArduPilot is much more user-friendly that Paparazzi is. Arduino is a great environment for hobbyists to work with, as many do not have the time or desire to learn the details of a typical embedded programming language.
  • Nice project :)

    Are you going to pick Ardupilot with an IMU as a platform? Are you building one from scratch? I hope you know the Paparazzi project, which is already quite advanced and maybe more appropriate if you only have one summer?
  • Nice looking glider.
    The VN100 is a very nice piece of hardware too, alot of the hard work of implementing an IMU solution has been done for you in the EKF onboard the chip.
    Look forward to watching your progress. :)
This reply was deleted.