All Posts (14054)

Sort by
3D Robotics

A new Arduino library for GPS parsing

Looks like the Fathers of Arduino have smiled on us UAV guys. David Cuartielles, one of the core Arduino developers, has posted a very welcome set of GPS parsing routines that anyone can use: "I crafted three examples (basic, medium, advanced) featuring the use of different techniques to parse the GPS sentences. If you write something like a data logger, or a GPS toy, post your link here and I will be more than happy to include your code in the next revision of the library. Of course, if you found any errors or made any improvements, do the same thing. This code compiles for Duemilanove and Mega, without any alterations. It works fine with the processors ATmega168 and up. Uses about 300 Bytes of memory space and is documented inside the code. Ah … there is a README.txt you shouldn’t miss; it explains how NOT to use the library."
Read more…

EasyStar Mods - Spar Upgrade

The more equipment that is installed on the plane, the more load the wing will need to take. To prevent the wings from flexing too much, the plastic spar can be replaced with a carbon one.Materials:1. Hacksaw2. Masking tape3. Carbon rod (5/16" OD or 8 mm)4. Original sparProcess:1. Line up the two spars to get an idea of where you will have to cut the carbon spar.

2. Wrap the the location that you are going to cut the carbon spar with masking tape (only a few times around is necessary). The tape will prevent the carbon from fraying when it is cut.

3. Mark the carbon spar where it will be cut, using the plastic spar as a length reference.4. With the hacksaw, cut the carbon spar.

Read more…

EasyStar Mods - Spar Hole Reinforcement

Another simple modification to increase the spar holes strength. I notices that after just a few flights (and a few hard landings) that the spar holes in the wing started to stretch. To fix this problem, I reinforced the holes with fiber washers. (Note that these pictures were taken after I had already done this modification)Materials:1. Hobby knife2. CA3. Two fiber washers (5/16" ID x 3/4" OD)Process:1. Place the spar inside the hole and the washer around the spar so that the washer rest on the root end of the wing. The spar should be fully inserted into the wing so that the washer will be well centered.2. Make a shallow cut around the washer into the wing root to outline where the washer will be installed.

3. Remove foam as needed so that the washer will sit flush to the root end.4. Apply CA on the foam where the washer will be located. Install the washer and let dry.

Read more…

Predator by your own hands! Some help needed :)

Hi, my name is Justas, i am from Lithuania (a small country near Baltic sea), i am 19 years old, i am studying Informatics in Mykolas Romeris university. So, after a few years of flying in flight simulators i decided that i need to go to something more serious, and i found myself in RC. I have been flying with helicopters, gliders and planes. I never had one, so i decided to make one by myself. I could buy it, but for me, building something is even more interesting than using it! I didn't need long to decide what should it look like, for sure it's predator! I decided it because i am in Lithuanian volunteers army (not professional army, more for young people who associate their future with military), so it took my eye from first shot.Firstly it should be controlled manually (because of lack of money, hard time for non working student...), and in a few months after that it should be upgraded with ArduPilot, CoPilot and GPS to become a real UAV!For a while i am not going to annoy you with questions about ArduPilot, CoPilot and GPS (i'm a newbie in that).The first thing i am going to do is to build the main Predator, it's wingspan should be about 160cm or less. (what i want is to be enough to cary about 1kg, it would be a high resolution photo camera and a video camera).After long searches all i found that could be useful was this (didn't found a good quality scheme with V tail up):

predator-diagram.gif

So what i need is help from people who already did this, i'd have some questions like:1. What the material should be?2. What about measurements?3. What about wings construction?4. How to attach wings?Ant i would be wery hapy if someone who did this could share theyr experience, any photos and sketches(most important to me).I'm not very good sketcher, but i tried to show the construction of the main body that i'm thinking about, what do you think about that(just a sample, form isn't very similar to predators):

Impatiently waiting for any help! Thanks and see you soon ;)
Read more…
3D Robotics

A big code release tonight--this is the full setup that won the Sparkfun autonomous vehicle competition. Along with general improvements to the code, this is the entire package of autopilot, setup utility and ground station code. It's a full Unmanned Aerial System, not just a UAV! ArduPilot 2.1
  • All the features of ArduPilot 2.0 plus...
  • Supports XY sensor in diagonal postion
  • Requires Z sensor [UPDATE: FMA is no longer carrying those. While we sort out alternative sources, you can buy them from Dean Goedde for $40 (scroll down for price list)
  • Controls throttle if airspeed sensor is attached via the ArduPilot expansion board.
  • Supports desktop setup utility for waypoints and autopilot settings. (Waypoints are no longer manually entered in the code. They can only be entered with this utility.)
  • Last version of the code to support the original ATMega168-based board. Future versions will require the new ATMega328-based board.
  • Field setup procedures are here
  • Get it here
If you are using the expansion board and airspeed sensor, to control the throttle you must solder a wire from digital pin 8 to "MUX IN 3" Desktop setup utility

  • Add waypoints manually; utility displays them on Google Maps
  • Set max altitude, speed, circle radius
  • Set elevator, aileron/rudder trim
  • More features coming
  • Get it here ("ArduPilotConfigUtility")
When using this utility for the first time with ArduPilot, click Write before anything else in order to format the EEPROM. Also, ensure that the "Set RTS on close" box is checked in your serial port's advanced properties (control panel/device manager), as described in our Arduino debugging tips) Ground station

  • Requires free Labview runtime engine and serial drivers (install both. Note: if you've already installed Lego's Mindstorms NXT software you may find you've got a driver conflict, because it's based on LabView, too. Uninstall the Mindstorms software first.)
  • Works with Xbee wireless modules
  • Displays real-time attitude, speed, altitude, current waypoint, heading, distance to next waypoint, etc
  • Displays real time position on Google Earth
  • Get it here
  • Source code is here
Read more…

Here's a modification of original ArduPilot, running on Arduino Pro Mini.I'm just posting photos for now, since there's still lots of things to do for my planes to fly. Maybe when things are tuned, I'll post also modified code.My first testing or original ArduPilot few weeks ago was disaster, I tried to see my plane to see directly follow path, so I skipped slow testing of everything in small steps. Result was plane out of control, flying away to distance. Later I found it using bike, 1.5 km away. I had luck that time, I could have some $350 flown away, or maybe breaking someone's roof. Anyway, my previous plane was not flying nice, so this one is replacement, and it flies good in manual mode.

See the Arduino Pro Mini, compared to ArduPilot. It's smaller, and it lacks mux and failsafe chips. So great care must be done for switching between autopilot/manual modes on main cpu. Luckily tests show that it can be done relatively nicely using interrupts, so if main program control locks, interrupts still keep running, providing the possibility to gain control over plane.

Arduino Pro Mini on left, ArduPilot board on right.So far I play with FMA copilot replacement, implementing just stabilization. 6 RC channels are read, and 4 are written, the code can pass 4 channels through unmodified, or read them and mix with other values.
Read more…

EasyStar Mods - Wing Root Magnets

In this modification, magnets are installed into the wing root. This modification was inspired by the tendency for the wings to vibrate themselves apart during flight. Since simply pinning the wings in place (either mechanically or with adhesive) would not allow the wings to be compliant during a hard landing, magnets seemed like a good substitution. The process for installing the magnets in the wing root is very similar to the process for installing magnets in the canopy (see my previous post, "EasyStar Mods - Magnetic Canopy"). (Note that these pictures were taken after I had already done this modification)Materials:1. EasyStar RC plane2. Hobby knife3. Epoxy or CA4. Four neodymium magnets (I used 0.25" diameter, 0.125" thick; in retrospect, going one size up to 0.375" might be better)Process:1. In one wing, cut two small holes using the hobby knife for the magnets to fit into. The holes should be located near the forward and aft part of the root. The hole depth should be sufficiently deep to allow the magnets to be flush to the surface.2. Install the magnets by bonding them in place with either CA or epoxy. I used CA and have had no problem with them coming out.

3. After the adhesive has dried, cover the magnets with a piece of wax paper and snap 2 new magnets on top of them. Insert the spar into the wing (breaking through the wax paper). Slide the other wing over the spar and push down so that the magnets leave an impression in the wing. This will ensure proper placement of the magnets in the second wing.

4. Cut small holes in the second wing where the impressions were made and put adhesive in the holes.5. Replace the wing so that the magnets fit into the holes. I feel that this method is better than dropping the magnets into the holes since it guarantees that the magnets have the correct orientation.6. Once the adhesive has dried, separate the wings and peel off the wax paper.
Read more…

Possible useful UAV programming codes

UAV codes.pdfI am only about 4 hours into my "self-induced" C++ tutorial course starting from "what is a programming language?" So I cannot determine with great certainty how useful the included codes in the attached project may be. I hope that it would help some of you way ahead of me in the programming department.Would appreciate any feedback on the usability of these codes...
Read more…
T3
The mystery of the 12 second latency in the dynamic response of the EM406 GPS is solved.Recently, I stirred up a debate about whether or not the EM406 has a 12 second latency or not. A few of us were seeing a 12 second latency. The majority of EM406 users were not seeing it.It turns out that the dynamic performance of the EM406 depends on which interface you use, NMEA or binary. If you use binary, there is a 12 second latency, then a 3 second "smoothing" transient.If you use NMEA, there is a smoothing transient only. The NMEA interface to the EM406 provides dynamic performance as good as the LOCOSYS or the ET312.It is my speculation that "track smoothing" is turned on in the EM406 for the binary interface, and either it is always on, or I have not figured out how to turn it off. If anyone knows how to turn track smoothing off in the binary interface for the EM406, please let me know so that I do not have to scrap my binary interface and start over on a NMEA interface.
Read more…
3D Robotics

ArduPilot isn't just for planes--it's a great board for robot cars, too. At least three of the rovers in the Sparkfun Autonomous Vehicle Competition used our board for their vehicles, where it was just acting as a 2D autopilot. Nathan Siedle, the CEO of Sparkfun, used a modified ArduPilot board for his rover and others used the board stock. Like almost all the rovers, regardless of what board they used, they went awry at one corner or another, due to waypoint, software or sensor errors or just wild out of controlness (see above). The one rover that finished the course used a custom Atmega32 board. Next year I'd expect more rovers to finish the course, just like DARPA road race. I also expect more of them to use ArduPilot: it's the easiest way to add RC and GPS to Arduino. You just need to program them right! (photo from Makezine)
Read more…

EasyStar Mods - Magnetic Canopy

This is a pretty simply modification to the canopy to replace the plastic tabs with magnets. Once done, it is quick and simple to get the canopy on and off and, as a bonus, it makes a neat snapping sound when you put the canopy back on. The process is straightforward. (Note that these pictures were taken after I had already done this modification)Materials:1. EasyStar RC plane2. Hobby knife3. Epoxy or CA4. Four neodymium magnets (I used 0.25" diameter, 0.125" thick; in retrospect, going one size up to 0.375" might be better)Process:1. Remove the plastic tabs by cutting around them with a hobby knife and then pulling them out.2. Cut small holes in the canopy area of the fuselage to fit the magnets into. Install the magnets (I installed mine near the front, as shown) by bonding them in place with either CA or epoxy. I used CA and have had no problem with them coming out.

3. After the adhesive has dried, cover the magnets with a piece of wax paper and snap 2 new magnets on top of them. Replace the canopy and push down so that the magnets leave an impression in the canopy. This will ensure proper placement of the magnets in the canopy.

4. Cut small holes in the canopy where the impressions were made and put adhesive in the holes.5. Replace the canopy on the fuselage so that the magnets fit into the holes. I feel that this method is better than dropping the magnets into the holes since it guarantees that the magnets have the correct orientation.

6. Once the adhesive has dried, remove the canopy and peel off the wax paper.

Read more…
In this other post, I wrote I intended to use the interrupt based NewSoftSerial llibrary for Arduino. Many of us know that the standard SoftSerial library comming with Arduino is not usable as is. Some tried out interrupt based serial to gain an additional serial IO on ArduPilot, but there are negative feedback about usability. As usual, I wanted to discover by myself!3689314587?profile=originalMy intention was similar and is determined by my airframe setup. As the diagram shows, I load two ArduPilot boards into my plane, one (apA) as autopilot and the second (apB) for some additional tasks. One such task is parsing NMEA GPS sentences to my video OSD, an Inspire OSD, which requests 4 different NMEA sentences to fully exploit all its functions (GPGGA, GPRMC, GPRTE, and GPRMB). With the route information, the OSD can show distance and direction to next waypoint (left/right arrow and associated angle). This OSD was specifically made to be linked to the Garmin Geko handheld GPS which spits the necessary NMEA sentences out of the box. An EM-406 can also be used as is, but then, there is no waypoint functionality available.I use a LS20031 GPS running at 57600bds, spitting two NMEA sentences necessary for ArduPilot (GGA and RMC). It is connected to ArduPilot board apA and this direct connection is utterly important for autopilot navigation. So how to share the GPS running at 57600 with the OSD reading "only" at 38400bds?My goal is to connect my GPS to apA AND to my second ArduPilot board (apB). apB will read the GPS at 57600 and write GGA and RMC sentences as is to the OSD at 38400. For this function, apB is just a bauds rate adapter. Additionally, apB will also use processed data received from apA (next waypoint, etc) to assemble/emulate RMB and RTE NMEA sentences which will also be sent to the OSD.For developing and testing purpose, I replaced the apB with my Duemilanove Arduino board. For a start, I connected the GPS data output to Arduino. I set up a new sketch instantiating two software serial IO ports:- gpsRx(12, 98): Rx on pin 12 et Tx on non-existing pin 98, used only to receive from GPS; speed 57600bds;- osdTx(99, 13): Rx on non-existing pin 99 and Tx on pin 13, used only to send to OSD; speed 38400bds.I replaced the OSD with my FTDI breackout board to monitor the result on the laptop. For the sake of educating myself, I also implemented an 2x16 characters backlit LCD I wanted to try out (it is displaying the number of GPS readings; not useful but nice to make work for a first time).After many trials and error, I managed to get a decent result in the output. I'll write more on my experimenting later. For now, here's just an illustration of the test setup.Added 2009_05_02:After more evening work, I made some progress. My current setting is:- ArduPilot A board: autopilot functions, ArduPilot ver. 1 code, reading GPS uart serial input at 38400 at 2Hz, parsing fix_position, current destination waypoint, waypoint distance and bearing all together in a special NMEA-like format ($APDAT, 1, 1, 1324, 244*) to uart serial out at 2Hz.- ArduPilot B board: other functions, custom code, reading GPS over uart serial input at 38400 at 2Hz, reading ArduPilot A $APDAT sentences over NewSoftSerial input at 38400 at 2Hz, parsing GPS NMEA sentences (GGA, RMC) to video on screen display at 38400 uart serial out at 2Hz, adding an emulated waypoint navigation sentence ($GPRMB) with the data received from ArduPilot A, together with the GPS sentences to OSD.- Inspire OSD- XbeeCurrently, I am adding the reading of Xbee 868 headtracking data over NewSoftSerial at 38400, which is not so easy. the decoding code works as a stand alone, but not yet integrated as I want it in my ArduPilot B code. The difficulty is to have the Xbee headtracker data read as they arrive (ie only when updates are necessary to respect limited duty cycle of xbee 868) while reading other data from GPS or navigation ArduPilot which are sent at 2Hz frequency. In fact, when implementing NewSoftSerial, one has to take care of doing a full reading and buffering of data on one soft serial input before being able to read and buffer another data stream on a second soft serial input. Whenever you call a begin on a NewSoftSerial input instance, it flushes the buffer of the other instance. Being able to do that tricky back and forth from one input to the other without loosing data is not easy, but not impossible.I try to keep the loop free for new headtracker data for as long as possible within a 500 millisecond cycle. But in that cycle, a full reading (and processing) of the 2 GPS NMEA sentences and of the short APDAT sentence must be achieved too.For now, I continue tweaking to see where the different function calls are to be placed best to achieve a smooth cycle with all necessary tasks done. It's a bit of a struggle with trial and error, with a lot and a lot of code uploading to see if it behaves better or not (or if it behaves at all!).I hope to reach a solution in the coming days, because my iron-on shrink cover for my Kadet arrived a few days ago and I'd like to cover that plane now. My UAV will receive a nice color scheme with metallic dark red, some transparent dark red, some clear, some light grey, some metallic anthracit grey, some cub yellow and finally some chrome strips! Or maybe some less...IN PROGRESS
Read more…