Commit Graph

226 Commits

Author SHA1 Message Date
Andrew Tridgell c8a83e17d0 Plane: remove old AIR_START code
this was never used or tested
2013-07-22 12:50:01 +10:00
Andrew Tridgell 51b9cf3e76 Plane: move failsafe variables into a structure
this makes the logic a bit easier to follow
2013-07-22 12:50:00 +10:00
Andrew Tridgell 113bc20f8a Plane: added a new CRUISE flight mode
See
http://diydrones.com/group/apmusergroup/forum/topics/feature-request-hold-heading-mode

this fixes issue #438
2013-07-13 21:45:58 +10:00
Andrew Tridgell 826ad6c086 Plane: unlock roll and pitch when we enter ACRO mode 2013-07-13 12:34:34 +10:00
Andrew Tridgell f300df5fd1 Plane: added FS_LONG_TIMEOUT and FS_SHORT_TIMEOUT parameters
this is to address the issue raised here:

http://diydrones.com/forum/topics/ardupilot-circle-mode
2013-07-12 11:56:04 +10:00
Andrew Tridgell 608007361b Plane: added initial implementation of ACRO mode
rate based control with attitude locking
2013-07-11 09:10:41 +10:00
Andrew Tridgell d30dd7c3f1 Plane: only run TECS when in an auto-throttle mode
this prevents integrator buildup in user controlled modes
2013-07-05 14:55:22 +10:00
Andrew Tridgell 4a0c90246e Plane: make GPS UART blocking again 2013-06-11 18:50:23 +10:00
Andrew Tridgell 93cd0f9a31 Plane: switch to new AP_Scheduler
this gives us more accurate task scheduling in ArduPlane, plus better
monitoring of task timing (via SCHED_DEBUG)
2013-06-04 13:34:58 +10:00
Andrew Tridgell 4c9bc30f58 Plane: make it possible to change control channel ordering without reboot
this makes configuration a bit easier
2013-06-03 16:42:38 +10:00
Andrew Tridgell fb9bf21522 Plane: allow channel mapping of first 4 channels
this makes it easier to support DSM and SBUS radios
2013-06-03 16:23:48 +10:00
Andrew Tridgell 515d726ee0 Plane: use RC_Channel::rc_channel() instead of rc_ch[] 2013-06-03 16:23:48 +10:00
Andrew Tridgell f7697574db Plane: use the new airspeed driver interface
the choice of analog source is now in the airspeed driver
2013-06-03 11:51:09 +10:00
Andrew Tridgell d9bcfd913a Plane: reset attitude integrators on mode change 2013-06-01 22:29:38 +10:00
Andrew Tridgell eba7d6da9a Plane: removed the old crash_timer code
This code is less relevent with the new L1 navigation, and could cause
issues with the pilot not having control after a long dive.

Thanks to Soren for pointing out the issues

See issue #305
2013-05-28 11:19:28 +10:00
Andrew Tridgell a22f5e3bc4 Plane: enable wind estimation 2013-05-24 11:21:42 +10:00
Andrew Tridgell fdd509a7c1 Plane: move baro init earlier in startup
this ensures it is initialised when CLI takeover by MP happens

Thanks to Prof Avi Levi for reporting this bug
2013-05-06 10:57:57 +10:00
Andrew Tridgell 4e2b88f6e6 Plane: added ATT_CONTROLLER option to select attitude controller
set to 1 for the new APM_Control library
2013-05-05 21:51:09 +10:00
Andrew Tridgell 5ba171af9a Plane: fixed mavlink levelling
this was broken by a recent commit (after 2.72 was released)
2013-05-02 13:38:28 +10:00
Andrew Tridgell a019e3740e Plane: updates for new compass API 2013-05-02 12:48:14 +10:00
Andrew Tridgell de3fcbc413 Plane: removed the MANUAL_LEVEL option
levelling on every startup is far too error prone. This was just
another parameter that everyone changed.
2013-04-29 14:19:53 +10:00
Andrew Tridgell 2e5834cc7f Plane: print flight mode as string in logs 2013-04-20 15:18:10 +10:00
Andrew Tridgell c56f338fe0 Plane: convert to new logging system 2013-04-20 13:52:36 +10:00
Andrew Tridgell 79c6f32400 Plane: made variables static and remove initial rc overrides
minor code size savings
2013-04-15 14:46:01 +10:00
Andrew Tridgell 575f346e85 Plane: removed HIL_MODE_ATTITUDE
we really need full sensors for HIL with the L1 controller. The flight
is also _much_ better with sensors HIL.
2013-04-12 17:44:40 +10:00
Andrew Tridgell 11eb0cfce1 Plane: update for new AP_Navigation controller class
this switches ArduPlane over to use the L1 navigation controller, via
a generic nav_controller object pointer.

Note that the nav_controller controls all types of navigation now,
including level flight and heading hold. This provides a cleaner
abstraction than the old method of special case navigation handling

Pair-Programmed-With: Paul Riseborough <p_riseborough@live.com.au>
2013-04-12 12:48:09 +10:00
Andrew Tridgell dfb14d760b Plane: added HIL_SERVOS option
this allows for real servo output in HIL
2013-03-30 14:38:43 +11:00
Andrew Tridgell 7db7d7db77 Plane: change FBWB altitude control algorithm
this makes FBWB much less sensitive to airframe tuning. When the
elevator stick first goes neutral it locks in the current altitude as
the target altitude. When the elevator stick is off neutral, it moves
the target altitude in proportion to the elevator, at a rate goverened
by the new FBWB_CLIMB_RATE parameter

This prevents the aircraft from slowly drifting in altitude in FBWB,
and gives a more intuitive control mechanism for altitude.

Thanks to Chris Miser from Falcon UAV for help in designing this
change
2013-03-28 10:27:25 +11:00
Randy Mackay c2055557f5 Plane: add support for GPS fix type 2D 2013-03-27 11:41:51 +09:00
Andrew Tridgell 87c6545ac6 Plane: don't trigger GCS failsafe if GCS never connected
The we have never received a heartbeat message from the GCS then don't
use the lack of heartbeat to trigger a failsafe event
2013-03-09 13:48:39 +11:00
Andrew Tridgell 0a0b51cc63 Plane: reset AHRS trim after a level operation 2013-02-20 11:56:02 +11:00
Andrew Tridgell 9f70c6c70d Plane: make CIRCLE mode hold altitude
this will prevent us losing a lot of altitude during the initial
failsafe phase
2013-02-11 13:52:25 +11:00
Andrew Tridgell 28352b3548 Plane: ensure ahrs.init() is called 2013-01-13 17:32:48 +11:00
Andrew Tridgell 86f667f6cc Plane: added new SERIAL0_BAUD parameter
this is useful on PX4
2013-01-13 07:39:40 +11:00
Andrew Tridgell 9e0096ddb5 Plane: fix handling of sensors HIL startup 2013-01-04 12:34:35 +11:00
Andrew Tridgell b6295c12e1 Plane: fixes for new AP_Relay interface 2013-01-02 10:18:45 +11:00
Andrew Tridgell edad43611d Plane: reset last heartbeat time on startup completion
this gives more time for the GCS to send its first heartbeat
2012-12-26 08:46:36 +11:00
Andrew Tridgell cf8e648558 CLI: fixed accel setup
disable mavlink callback in CLI
2012-12-24 08:51:33 +11:00
Andrew Tridgell d54c6989ab Plane: fixed the last build warnings
we now build with no warnings for APM1, APM2 and SITL. Yay!
2012-12-20 22:46:48 +11:00
Andrew Tridgell feca411943 Plane: added new TRAINING mode
this mode gives manual control when the roll or pitch is within the
set limits (the same limits as FBW mode), and prevents the pilot from
flying beyond those limits, essentially a "attitude limited manual"
mode
2012-12-20 22:41:58 +11:00
Andrew Tridgell 18db7b2efd GPS: move _port setting to init()
this is needed to avoid constructor ordering dependencies
2012-12-20 14:52:32 +11:00
Pat Hickey c441f02426 ArduPlane: init DataFlash obj 2012-12-20 14:51:37 +11:00
Pat Hickey a14621534c ArduPlane: port from hal.dataflash to old DataFlash api 2012-12-20 14:51:36 +11:00
Pat Hickey 92b0c302f2 ArduPlane: Ported to AP_HAL 2012-12-20 14:51:36 +11:00
Andrew Tridgell 1104287aa2 Plane: use enum FlightMode in more places 2012-12-01 08:15:48 +11:00
Andrew Tridgell a6d8dbeac2 Plane: update ArduPlane for new ins interface 2012-11-30 07:15:18 +11:00
Andrew Tridgell a87394fff2 Plane: don't do accel calibration in HIL mode
this should fix the hang on startup
2012-11-25 21:53:37 +11:00
Andrew Tridgell 56e4cbfb1d Plane: allow reboot on APM1, and add reboot to main CLI menu 2012-11-24 18:20:37 +11:00
Andrew Tridgell 84300c85d6 APM: make it possible to run the CLI on any serial port 2012-11-21 21:41:34 +11:00
Michael Oborne a5e3ce4655 remove cli planner mode - no longer used 2012-11-21 07:45:45 +08:00
rmackay9 ef727bbb3c ArduPlane: move to use new INS library instead of IMU library 2012-11-07 19:21:03 +09:00
rmackay9 8c6fd340d7 AP_AHRS: added scheduler parameter to init
Required by the AP_AHRS_MPU6000 class which needs to disable timed processes that could interfere with it's communication with the mpu6000
2012-09-29 13:51:21 +09:00
Andrew Tridgell 37cb56f3e1 APM: save another few bytes 2012-09-18 13:58:50 +10:00
Andrew Tridgell 12dc2e79cf APM: save 100 bytes of memory
remove flight_mode_strings array
2012-09-18 13:58:49 +10:00
Andrew Tridgell 4d4a95501f APM: updates for new GPS detection 2012-09-17 14:45:47 +10:00
Michael Oborne 94f956a0ca fix AP attitude hil - with randys help 2012-09-15 16:47:18 +08:00
Andrew Tridgell 7e672628ea APM: removed the GPS_enabled flag
this fixes using GPS_PROTOCOL to specify a specific GPS with a GPS
that takes a few updates before it works (eg. needing baud rate
changes).

This makes it easier to use an APM1-1280 with more features enabled
2012-09-11 13:37:34 +10:00
Andrew Tridgell 0812fc4890 APM: reboot only works on the APM2 2012-09-10 11:50:48 +10:00
Andrew Tridgell cb88681914 APM: added support for MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN
this allows for remote reboot of APM
2012-09-10 11:42:30 +10:00
Andrew Tridgell a446a7a9ed APM: allow serial buffer size to be configured
very useful for packet forwarding setups
2012-09-08 10:06:35 +10:00
Andrew Tridgell dcbd0fbd44 APM: cleanup throttle suppression code and don't use airspeed to unsupress
this removes the throttle suppression when any of the conditions are
met once, as otherwise flying slow below 10m could zero the throttle.

It also removes the use of airspeed for disabling throttle
supression. Otherwise a strong gust of wind can cause ArduPlane to
try to takeoff!
2012-08-28 20:18:23 +10:00
Andrew Tridgell d445482ace APM: added optional use of new APM_Control library
thanks to Jon Challinger for the new controllers!
2012-08-22 12:45:14 +10:00
uncrustify a8e5900624 uncrustify ArduPlane/system.pde 2012-08-21 19:19:51 -07:00
Andrew Tridgell 6d11940ada AHRS: removed Quaternion build support from APM/ACM/rover 2012-08-22 10:42:21 +10:00
Andrew Tridgell c960db7af5 APM: allow for separate calibration of airspeed/barometer
this is useful just before takeoff, to account for temperature changes
2012-08-15 19:49:09 +10:00
Andrew Tridgell 9fea3e3ac1 APM: pass airspeed sensor to AHRS 2012-08-11 08:57:44 +10:00
Andrew Tridgell dc47074dbd MAVLink: removed the need for Mavlink_compat.h
we have now fully transitioned to MAVLink 1.0, so we no longer need
the compatibility layer and the old names in the code
2012-08-09 12:22:46 +10:00
Andrew Tridgell a823c9ceae APM: removed cli slider and dipswitch options
use mavlink/eeprom for all config
2012-08-08 12:12:29 +10:00
rmackay9 06e35820e5 ArduPlane: allow MPU6000's DMP to be used for attitude estimation.
Enable by adding this line to APM_Config.h:
#define DMP_ENABLED ENABLED
2012-07-28 19:50:40 +09:00
Andrew Tridgell de3c9ce56d Airspeed: change APM to use new AP_Airspeed library
the next step is AHRS dead reckoning
2012-07-16 11:21:50 +10:00
Andrew Tridgell 58fd91165f APM: fixed some build warnings and type errors 2012-07-06 19:59:18 +10:00
Andrew Tridgell 82ede937e7 AnalogSource: convert analogRead() calls to the new API
this should give us much better analog values, plus save a bunch of
CPU time
2012-07-01 15:01:05 +10:00
Andrew Tridgell 3a2594fa1a APM: ArduPlane updates for new compass interface 2012-06-27 16:01:50 +10:00
Andrew Tridgell 2934b4173b APM: set_centripetal() is now set_fly_forward()
this controls more than just centripetal correction
2012-06-27 16:01:49 +10:00
Andrew Tridgell 940d994efb GPS: Use appropiate GPS_ENGINE settings in APM, ACM and rover 2012-06-10 16:36:18 +10:00
Andrew Tridgell a684bddbda GPS: open the GPS serial port with a 256 byte buffer
the UBLOX needs more than 128 bytes for reliable parsing
2012-06-08 16:42:03 +10:00
Andrew Tridgell 87ed39ea46 APM: use set_blocking_writes(false) when we have done ground start 2012-03-30 17:46:20 +11:00
Andrew Tridgell b4107d35e8 MAVLink: raise the serial transmit buffer size to 256 bytes
the 128 byte serial transmit buffer was causing significant problems
with queueing of mavlink messages. With 256 bytes we can fit a lot
more messages out in each pass of the code, which makes telemetry more
efficient

As we discussed on the dev call, we now have enough free ram for this
to be worthwhile
2012-03-30 17:46:20 +11:00
Andrew Tridgell 4c4c38f69a APM: Added MANUAL_LEVEL option
when MANUAL_LEVEL is set to 1, we don't do accelerometer levelling at
startup, and instead used the values saved in the EEPROM. This makes
it easier to do levelling on the bench, or once for a series of
flights for the day
2012-03-29 12:39:53 +11:00
Andrew Tridgell 8afd196907 APM: adapt ArduPlane for AHRS framework 2012-03-19 17:29:02 +11:00
Andrew Tridgell 7a9b3d3388 Quaternion: show "Quaternion test" on startup if enabled 2012-03-10 10:34:29 +11:00
Andrew Tridgell 367947fd33 HWSTATUS: if we don't know the voltage, report it as zero
this will tell us if board_voltage() is really working
2012-03-10 10:34:28 +11:00
Andrew Tridgell b20084af7d APM: added board_voltage() function 2012-03-02 15:48:27 +11:00
Andrew Tridgell 0248b48d30 allow MAG_ENABLE to be changed in flight
this disables the compass in DCM if MAG_ENABLE is changed in
flight. Without this we would use a fixed yaw once the compass is
disabled

This also makes sure we don't pass the compass to DCM till we have
done a read. This ensures we have a good compass fix for the initial
DCM heading
2012-02-25 14:51:09 +11:00
Andrew Tridgell 95ef9206dc DCM: renorm_sqrt_count is now called renorm_range_count 2012-02-23 08:16:08 +11:00
Andrew Tridgell bc0ed62aa9 adapt mainline APM code to AP_Param 2012-02-13 16:22:51 +11:00
Andrew Tridgell 1a861b3de5 allow for lower serial baud rates
not many people will use less than 9600 baud, except for those wanting
to test extreme range radios, which is what I'm trying to do :-)
2012-02-04 19:07:18 +11:00
Doug Weibel 9846822748 Bug fix for compass.
This is a fix for an interesting bug when a DCM matrix reset was added to the ground start.  This bug only showed up if (A) a ground start were performed after an air start or due to use of the "Calibrate Gryo" action, (B) if the current orientation were sufficiently different from 0/0/0, and (C.) if the particular magnetometer had sufficiently large offsets.  Why did resetting the DCM matrix to 0/0/0 pitch/roll/yaw at ground start cause a bug?  The magnetometer offset nulling determines the proper offsets for the magnetometer by comparing the observed change in the magnetic field vector with the expected change due to rotation as calculated from the rotation in the DCM matrix.  This comparison is made at 10Hz, and then filtered with a weight based on the amount of rotation to estimate the offsets. Normally it would take considerable time at normal in-flight rotation rates for the offset estimate to converge. 

If a DCM matrix reset occurs when the offset nulling algorithm is up and running, the algorithm sees the DCM reset as a instantaneous rotation, however the magnetic field vector did not change at all.  Under certain conditions the algorithm would interpret this as indicating that the offset(s) should be very large.  Since the "rotation" could also have been large the filter weighting would be large and it was possible for a large erroneous estimate of the offset(s) to be made based on this single (bad) data point.

To fix this bug methods were added to the compass object to start and stop the offset nulling algorithm.  Further, when the algorithm is started, it is set up to get fresh samples.  The DCM matrix reset method now calls these new methods to stop the offset nulling before resetting the matrix, and resume after the matrix has been reset.
2012-01-12 14:44:24 -07:00
Andrew Tridgell cdd5589498 I2c: default to 5ms timeout, and faster bus speed
we will slow down the speed when we get a failure
2012-01-04 16:36:47 +11:00
Andrew Tridgell 3cb96fb8af APM: convert to new I2C library 2011-12-28 20:41:53 +11:00
Andrew Tridgell 8d87aa41b9 APM: Update for DataFlash changes 2011-12-28 16:00:49 +11:00
Doug Weibel 8e17b8d6d4 Correct a bug in throttle failsafe feature 2011-12-24 15:34:31 -07:00
Andrew Tridgell 5e347854c3 setup the main loop failsafe after RC library is setup 2011-12-23 11:13:01 +11:00
Andrew Tridgell 26d5d3c385 fixed HIL build 2011-12-21 23:31:39 +11:00
Andrew Tridgell 29fa78214b APM: added failsafe support
we now pass all channels through at 50Hz if the main loop stops
running, regardless of why. This gives us a reasonable failsafe, as
long as the low level RC library is still working, and interrupts
don't get completely disabled.
2011-12-21 23:31:39 +11:00
Andrew Tridgell f25ee899f3 APM: run mavlink loop while erasing logs 2011-12-18 10:19:52 +11:00
Andrew Tridgell df094ce463 fixed airspeed sensor for ArduPlane on APM2
we were trying to use a non-existant ADC chip!
2011-12-17 07:29:09 +11:00
Andrew Tridgell b9a88aac32 geofence: added FENCE_TRIGGERED_PIN
this allows for a digital pin to be set high when the geofence
triggers. This pin can be connected to an external failsafe device
2011-12-17 07:29:08 +11:00
Andrew Tridgell 1998908a05 DCM: reset the DCM matrix after a ground start 2011-12-13 21:33:07 +11:00
Andrew Tridgell 483bef35e5 IMU: update ACM and APM for flash_leds change in IMU init 2011-12-13 18:19:41 +11:00
Andrew Tridgell 07dba4eff7 desktop: fixed Wire.begin() build problem 2011-12-12 15:14:55 +11:00
Pat Hickey a99a1dbc9a ArduPlane: update AP_Baro construtors and initializers 2011-12-11 15:21:10 -08:00
Pat Hickey f3ad7f3af8 Wire and SPI Init: move to sketch system.pde from libraries
* Wire.begin removed from AP_Baro_BMP085::init()
* SPI.begin  removed from AP_Baro_MS5611::init()
* SPI.begin  removed from AP_InertialSensor_MPU6000::hardware_init()

* Both Wire.begin and SPI.begin added very early in init_ardupilot in
  ArduCopter/system.pde and ArduPlane/system.pde
2011-12-11 15:21:10 -08:00
Pat Hickey f2652d23bf ArduPlane: calibrate accel with imu.init_accel after imu.init
* complements commit 73418559, where init_accel was eliminated
  from AP_IMU_INS::init cold start.
2011-12-10 13:32:47 -08:00
Doug Weibel b03de3095e Add DataFlash.Init before doing a forced log erase on eeprom reset.
Add progress indication during log erase
2011-11-28 19:42:27 -07:00
Pat Hickey f7a9b8a563 ArduPlane: LED digital writes use LED_OFF and LED_ON 2011-11-25 20:00:19 -08:00
Andrew Tridgell 86927ac0a5 ArduPlane: rename purple to APM2 2011-11-25 20:00:19 -08:00
Andrew Tridgell 7def0e98e8 USB-MUX: auto-switch telemetry port based on UXB mux for ArduPlane
when USB is unplugged, switch baud rate to the SERIAL3_BAUD rate from
EEPROM
2011-11-25 20:00:19 -08:00
Andrew Tridgell ca76f6d0ec purple: add the remaining hw defines for purple hardware 2011-11-25 20:00:18 -08:00
Andrew Tridgell 1e41b4b2b0 timer_scheduler doesn't exist in HIL_MODE_ATTITUDE 2011-11-25 20:00:18 -08:00
Andrew Tridgell 3d175c449e adc.Init() takes timer_scheduler 2011-11-25 20:00:17 -08:00
Pat Hickey bad177bfdc removed old commented out code 2011-11-25 20:00:17 -08:00
Pat Hickey ad0cac670c purple: added new parameters needed for new library APIs
new APIs pass in timer_scheduler. We also to init the isr_registry
2011-11-25 20:00:17 -08:00
Andrew Tridgell 89d2f0f849 mod barometer.Init() based on hardware 2011-11-25 20:00:15 -08:00
Andrew Tridgell 4933c5bcdd zero airspeed on ground start when initiated by MAVLink
If the users asks for a new calibration, that should include the
airspeed sensor
2011-11-21 20:29:18 +11:00
Doug Weibel f752c4b799 Change to logging file system.
This commit is somewhat temporary as I have come up with a better scheme and will be modifying this.  Just making this commit in case I need to roll back
2011-11-17 21:25:51 -07:00
Andrew Tridgell 1118d26f03 fixed "Free RAM" display on bootup 2011-10-28 21:34:10 +11:00
Andrew Tridgell 5a44298d57 CLI: enable "hit enter 3 times" support for CLI
if you hit enter 3 times before you send any mavlink packets, we will
enter CLI mode
2011-10-27 21:54:07 +11:00
Andrew Tridgell e7e8165bc7 don't initialise DataFlash if logging is disabled
this fixes HIL without an IMU
2011-10-09 22:08:59 +11:00
Andrew Tridgell 63ac6bcd94 use memcheck_available_memory() instead of freeRAM()
this gives a more accurate view of free memory
2011-10-09 22:08:59 +11:00
Andrew Tridgell e61d742345 GCS: make the two GCS links gcs0 and gcs3
the artifical separation between 'gcs' and 'hil' just leads to
confusion. This also simplifies the code a bit more, and saves us a
bit more text
2011-09-19 11:04:02 +10:00
Andrew Tridgell 220b941e31 removed some more dead messages, and convert MSG_* to an enum
this make it safer to add a new message while keeping deferred queue
the right size
2011-09-19 11:04:02 +10:00
Andrew Tridgell 3f37cce6c7 remove unused MESSAGE_COMMAND_LIST 2011-09-19 11:04:02 +10:00
Andrew Tridgell 9baab490f1 HIL: first step in simplifying the HIL/GCS code
this gets rid of the messy #ifdefs around HIL_PORT, and removes
non-MAVLink GCS and HIL support
2011-09-19 11:04:01 +10:00
Amilcar Lucas 227ce0a92d Merge some small misc improvements from APM_Camera branch 2011-09-17 20:25:31 +02:00
Andrew Tridgell e0dc1271d6 imported ArduPlane from ArduPilotMega svn 2011-09-09 11:29:39 +10:00