Software Wish List

__TOC__	Please use the Discussion tab at the top of the page, as appropriate.
This page is only kept for reference!
Please use our issue tracker for reporting bugs, requesting new features or to list things currently in progress (or planned).
== Introduction ==
After you played around with the GCS, the Airborne code, tested it and used all it's possibilities, sometimes you get this feeling... "I would like to have more!". The first thing to do is to ask in the mailinglist if it is already possible. The next great thing would be to create what you think is lacking and give it back to the community so it could be part of the project in the future. If you are not that gifted yet, you could present your ideas here. Other enthusiastic Paparazzi developers could read this and think: "YEAH, now that is a really cool idea and I will start working on it right away!". Therefore, since everyone can improve a part of the project, note here what you would like to see added or improved in the software.
== Ground Station Suggestions ==
# Module to make papazzi messages available in QGroundControl http://qgroundcontrol.org/ (Suggested by OpenUAS)
# Integration with module for OpenJAUS, see for already available code http://code.google.com/p/openjaus/ (Suggested by OpenUAS)
# Support for stanag 4586 compliance, see http://www.innuvativesystems.com/stanag_4586_primer.html (Suggested by OpenUAS)
# Support for standard map files like GeoTiff, .tab and .map. Using the .xml method manually is rather time consuming and frustrating when you already have standard georeferenced images.
# Divide the flight plan into 3 separate files (Suggested by Jeremy)
#* Takeoff/Landing - flight plan blocks describing the complex routines and using altitudes and waypoints from the User file
#* Generic - a file that users should never need to edit, containing circles, rectangles, figure-8's, and surveys that appear on command when GCS buttons are pressed. Altitude/locations could be relative to the User file
#* User - Here we can specify fixed or dynamic Home point and add complex routines or simply save certain basic routines. 
#*(NOTE: All of this is already possible, investigate time in discovering what paparazzi already can do now e.g. see Flight Plan Procedures)
# The possibility to use multiple ground modem connected to a single ground station. The RSSI could be use to dynamically choose which currently has the best signal. This would allow the use of different antennas on each of the modems or have antenna pointing in different directions(?Possibly more hardware related) - Something similar, but with more flexibility, has been created. See Redundant_Communication.
# PFD - the horizon and the sky shouldn't move only the main line. Because we are on the ground and we really need to see the roll angle of the UAS and not the real PFD like on a real airplane. And we could also see, the pitch angle, to see if the UAS is climbing or going down. Another way this could be done is to use a 3D model of the plane like procerus does on there ap. For those unfamiliar with this it is like you are in the view point of like 5m behind the plane. This might give the user just enough of a model to help fly back under manual control or at least have a better understanding of the orientation. This idea is good one but it should not replace the current pfd but rather be an option to use in the gcs. (NOTE: Already possible, via Papgets it is possible to add all kinds of such types of information. Also for a 3D plane view this is already possible, just bind you output to FlightGear)
# Language packs for the GCS - English, French, German, Italian, Spanish, Portuguese, ... (azoreanuav(at)gmail.comI would like to make the portuguese pack, but I neet help how to do it.)
# Flashing via modems - (NOTE: Already possible)
== Airborne Software Suggestions ==
Add your ideas here what you would like to see added or improved in the airborne software
=== Stability ===
* Auto-tuning of gains
*: It would make paparazzi very user friendly if the airframe could tune itself. It should be possible to set the gains on the ground to some generic value and let the autopilot do the tuning in the air. The autopilot would give step functions on different inputs (actuators, target values) and measure the response of the airframe. One at a time, of course. Based on this response measurement the autopilot can tune the control gains itself. For safety reasons this auto-tuning function would run only on safe flight altitude.
=== Navigation ===
* Flight plan stage sensing 
*: Carrot should continue past the waypoint toward the next point, but the point should not be officially acknowledged until the plane has passed it. This way we can have smooth, intelligent navigation while still considering waypoint triggers such as still-photo, sensor drop, or throttle off. 
NOTE: Can already be done by setting the approaching_time attribute. This value helps to decide when the target is reached. It can be set to 0 to go over the target waypoint. see Flightplan documentation
=== Other ===
# Revised autopilot modes (Jeremy)
#* I propose a restructuring of the modes as follows - create 3 top-level modes: Man, Stab,and Auto, each with an appended autonomous sub-mode (i.e. Man/Climb, Stab/Kill, Auto/Landing, etc.) This will give the operator much more information and a much better indication of what the plane will do when switched to autonomous mode in a concise manner. Furthermore, I see an advantage in having simple behaviors like Climb, Landing, etc. be defined as sub-modes so that operator is always alerted of changes such as Descent or can easily configure trim, gains, and payload options in the airframe file (i.e. if mode = Landing then retract camera, turn off video system, use landing trim, etc.)
#* Sub-modes
#* Ground - The default boot mode. In this mode the throttle is locked at 0% or not armed at all (no PWM signal), stability is disabled (servos locked in neutral position), and video power is off, but flight plan blocks are processed. This will improve safety and aid in lost plane retreival as the servos, and video will not drain the battery if landing detection is implemented. Ground mode should exit only if Takeoff is manually triggered.
#* Takeoff - 3 possible triggers: GCS button, GPIO button, or R/C throttle. Checks for error modes and desired climb, then arms/unlocks throttle, initates "Takeoff" flight plan block, and instantly deroutes to Climb mode. Deroutes to Descent mode without unlocking throttle if not OK. Takeoff could simply be a flag rather than a "mode".
#* Climb - Triggered anytime "aggressive climb" is active
#* Descent - Triggered anytime "aggressive descent" is active
#* Nav - Normal level flight
#* Landing - Same as Nav but using the "Landing" flight plan block and any airframe gains/trims/payload options as defined in airframe.xml
#* Kill - Triggered manually - locks throttle at 0% and uses pitch/roll settings from Airframe.xml. 
# Error sub-modes
#* No GPS - A temporary mode using pitch/roll settings from airframe.xml
#* Home - Triggered by distance in Auto mode or by distance/RC loss in Stab mode (after n seconds, as defined in airframe.xml). Exits upon manual block/mode change requests from the GCS and cannot be re-initiated for 30 seconds.
# Continually broadcast last known location
#* AP should continue to broadcast the last known GPS coordinate in the event of GPS loss. (i.e. upside-down crashed plane should continue to send last known position in case it was out of data range prior to the crash.)
#* (NOTE: Possible by adding for example a module that grabs current coordinates at e.g. .1 Hz and if in flightplan <while cond="!GpsFixValid()"/> send whatever you want)
# Ability to upload waypoints in flight
#* I know this has been discussed a few times but it would be nice to at least have the option to upload waypoints and blocks and be able to change blocks in flight. This is risky but most Autopilot's do have this feature now and it would be nice if the user could make this decision. 
#* (NOTE: A possible current solution is by adding duplicate waypoints very close and if needed move these while in flight.)
# Radio Control of UAS through Data Link
#* This simply means that instead of hacking an RC receiver to output it to the autopilot board why not hook your RC transmitter up through your computer and use the data link for RC. This would be nice especially with all the new RC range issues the 2 layer tiny 2.11 has brought on. Also it would be nice because RC interference would be eliminated. Please comment on this and tell me what you think
#* (NOTE: Already possible)
#* (Response: Sort of possible. The only work that has been done in this direction is by Martin and was done with a Joystick which only worked in Auto1 mode (setting the set points for the AP). This is not a full solution. What i am proposing is that the RC Radio is plugged into the GCS directly and then sends the command (PPM) signals directly to the AP. This would allow for the user to control the aircraft in manual and AUTO1. Consult any commercial AP and you will notice that this is the one glaring feature which is missing from PPRZ. In addition adding this feature would allow for longer range FPV flying. Please correct me (with links) if i am wrong. 
# Precision Surveying
#* It would be nice to have a survey function that could survey a sector and also be told what coordinates to begin the survey on. Another useful feature would be to have the plane sense when it is done surveying the whole area so it could move to the next block. I know that the entering the survey can be done in a roundabout method by defining a waypoint at the entry point and then going to it but defining it in the survey function would allow for more precise survey since that first sweep would already be defined and then would not be affected by if the plane went into the survey function at weird spot or something.
#* (NOTE: Already possible, see the Polygon Survey and use it smartly
== Current Code and Build ==
If you have any suggestions to improve the current:
* Sourcecode
* Build process
* Code repository
* Tools used
...give your suggestions here. Better still, start working on what you can, and add your information to the Wiki and start a discussion in the mailing list.
== JAUS Support ==
The Joint Architecture for Unmanned Systems (JAUS) is the premiere interoperability standard for unmanned systems. This standard originated in the Joint Robotics Program, a U. S. Department of Defense Office in 1998 and since has migrated to an open, commercial standard. JAUS has been adopted by the Society of Automotive Engineers, Aerospace Standards Division. Use of the standard is required in major Department of Defense programs and it is used in a variety of commercial and industrial applications worldwide.
It would be good to investigate how we could add a compatibility layer.
== X-plane HITL Support ==
For an example las on
http://code.google.com/p/gentlenav/wiki/HardwareInLoop
Hector: I used X-Plane in the past for HITL porposes. You have to be carefull as I have not read the next in anywhere.
As far as I know, simulation time step is not fixed in X-Plane and it depends on
your fps. If you are performing navigation and control algorithms with a time-step fixed, this issue can ruin the behaviour of your avionics.
I was talking in the IRC with experienced users in X-Plane, and they have written a pluggin to setup the time-stamp (or limiting the fps, X-Plane does not do that by default, only to monitor refreshment), and it does not work as expected always. Also X-Plane physics introduces "artifacts" sometimes ruining your inertial measurements.
Resuming, X-Plane (commercial version) is not aimed for HITL, for this question, they have the FAA certified version (more expensive of course :P).
Category:Software