Gentlenav

back to http://scratchpad.wikia.com/wiki/Uav_robotics

Preferred solution
Gentlenav Matrix pilot is the only project able to loiter an UavAirframes in a circle above a target, making the IMU dizzy proof. The code is GPL but neither Diydrones arducopter nor Openpilot have implemented the Gentlenav innovations. For Quad drones Openpilot seems to have a slight advantage over Diydrones arducopter. Gentlenav determined that that there is a 0.08sec delay in the magnetometer readings and compensated for this using feed-forward control and enabled automatic in-flight gyro calibration. Use the Ecilop quad frame from Gimballs.

As an UavAirframes circles in a spot its IMU gets 'dizzy', on the Openpilot and Diydrones arducopter forums discussing the problem they don't seem to be aware that this issue was solved by Gentlenav. The solution works DCM(directed cosine matrix), but not KalmanFilter.

In strong winds the effective airspeed measured by the air speed sensor differs from ground speed, Gentlenav solved this problem, using clever math maintaining a constant ground speed irrespective of wind speed. For UAV'S to be useful it must be able to loiter in a loop over a target for any point of time and be able to maintain a path in any direction at an angle to a strong cross wind. The UAV will have to point its nose in a direction away from its intended path to compensate for the wind, meaning the vector calculations integrating GPS and magnetometer readings will be different than if there were no wind. In no wind the nose of the UAV is pointed in the desired direction of travel. Openpilot, Diydrones arducopter and Gluon Pilot fixed wing code can't compensate for cross winds, their code only works in calm weather. Once this is fixed edit this page, anybody can edit a scratchpad page.

Mount magnetometer in wingtip away from any metal parts as far as possible. Matrixpilot does magnetometer calibration on the ground. Metal and magnetism interferes with the magnetometer.

Matrix pilot features

 * "Dead-reckoning" algorithm that provides high-bandwidth estimates of location and velocity.
 * Improved accuracy during sustained high rate turning
 * http://gentlenav.googlecode.com/files/WindEstimation.pdf
 * Self-aligning magnetometer . Allows one to mount the magnetometer in the wing tip away from magnetic noise in the center of the frame. See the forum discussion on diydrones from this link Gentlenav

Ardu pilot has not yet implemented these features and neither it seems openpilot. Gyro saturation occurs during rotations, which Gentlenav solved.

Quad test frame
http://groups.google.com/group/uavdevboard/browse_frm/thread/8fdbccd17b9f2a5d Test frame used for quads

Dead reckoning

 * http://www.diydrones.com/profiles/blogs/a-simple-deadreckoning
 * http://groups.google.com/group/uavdevboard/browse_frm/thread/60086c3843ef8de

There are two "hard" problems still on my list of things to solve. One of them is relevant to your question. The two problems are:

1. Measuring accelerometer offsets and calibration in flight. 2. Performing centrifugal compensation without assuming angle of attack and side-slip. (Somewhat useful for fixed wing, very useful for quads.)

I have the theory for the solutions to both problems. Now I just have to implement.

The first problem is the major contributor to error in dead-reckoning. (You are correct, noise is not the major problem any more, because of our high sampling rate.) Solving it would provide improved performance across the board, including more accurate dead-reckoning.

Fixed wing, Matrix pilot best solution
http://groups.google.com/group/uavdevboard/browse_frm/thread/27b434d9940e0d40


 * Major IMU improvements, including "dizzy-proofing", automatic inflight gyro calibration, and compensation for magnetometer latency.
 * - Live camera tracking of one UDB from another.
 * - User-configurable OSD layouts.
 * - Full support for the DIYDrones MediaTek GPS.
 * - Maintain minimum ground speed. The speed control loop is now based on the smaller of ground speed and air speed.
 * - Improvements to inverted stabilization.
 * - Improvements to the Flight Analyzer tool.
 * - More bug fixes.
 * Antenna tracking of plane is done from ground using UDB with magnetometer.

Sustained rotations
http://diydrones.com/profiles/blogs/sustained-rotations-pushing?id=705844%3ABlogPost%3A429539&page=2#comments

Anyway, version 949 of MatrixPilot in the code repository contains the improvements that have been made to compensate for the errors that arise during sustained high rate rotations. With it, you can spin around any axis at 500 degrees/second for as long as you like.

http://frankhermes.com/

http://www.rocketelectronics.com/

Mavlink
http://groups.google.com/group/uavdevboard/browse_thread/thread/53e1b94e6a3f6ce0/0928616bd915a43c?lnk=gst&q=mavlink#0928616bd915a43c

Temperature effects
http://groups.google.com/group/uavdevboard/browse_frm/thread/7db4ac62f410787d

Calibration

 * http://groups.google.com/group/uavdevboard/browse_frm/thread/76a17e323375294d  Wind compensation
 * http://groups.google.com/group/uavdevboard/browse_frm/thread/48da77786706c41e Elevon calibration

Channel reversing

 * http://groups.google.com/group/uavdevboard/browse_frm/thread/e7d2c2f9ecd2a111 Swap Aileron and Elevator
 * http://groups.google.com/group/uavdevboard/browse_frm/thread/a430392169762a7e Peter Hollands discusses issue further

Losing GPS lock
http://groups.google.com/group/uavdevboard/browse_frm/thread/60086c3843ef8de

In clear weather devoid of fog, IR sensing Paparazzi uavav]] provides wing leveling control. When flying in clouds or fog and over mountains the IR control fails. Gentlenav IMU works in any weather, over any terrain. Combine Paparazzi_uav and Gentlenav in a UAV, using Gentlenav as the primary means of control and correlate it with IR on losing GPS lock.

Board orientation
http://groups.google.com/group/uavdevboard/browse_frm/thread/917bb38696d7b5b6 GPS orientation and installation of boards

Asymmetric elevator response
http://groups.google.com/group/uavdevboard/browse_frm/thread/48da77786706c41e

confirm with ground testing with your settings that there is asymmetric response to roll. That is what is expected from ROLL_ELEV_MIX, to produce some up elevator during a turn. The only thing you need to figure out is what you want it set for.

In flight PID tuning, raise slew rate of controls
http://www.diydrones.com/profiles/blogs/in-flight-tunable-gain In flight PID tuning and http://www.diydrones.com/profiles/blogs/in-flight-tunable-gain?id=705844%3ABlogPost%3A180450&page=2#comments. Describes modding the servo for better IMU control, but that under manual control will be harder.

I have made some modifications to the MatrixPilot code to do tests on In flight tunable gain. If this is further refined, it will be possible to do tuning of P/D gains on roll, pitch and yaw axis while in flight. The idea is that the gains can be tuned with a spare button on your RC transmitter one after the other (separately) while you fly the plane in stabilized mode. The gain you want to tune is gradually increased until oscillation is seen at max desired airspeed and then reduced back somewhat to ensure stability on that axis with that gain. My code mods is a hack at the moment, but this is just to illustrate the concept

Ric - the servos I'm using on my Funjet http://www.diydrones.com/profiles/blogs/gt200kmh-funjet-the-fastest are those (0.068 at 60° / 6V). http://www.hobbyking.com/hobbyking/store/uh_listCategoriesAndProducts.asp?idCategory=84. They are well centering and generally well suited. Centering is a main must, because high speed and bad centering isn't worth a penny (not forgetting leverage accuracy and free play). Those servos are small and light enough (10.9g), not needing high voltage (HV 380 12V !?) and, not least, cheap.

Ric is correct, centering is important. Which reminds me, there is a mechanical technique that you can use to raise the effective slew rate of the controls. You can use leverage to reduce the required deflection at the servo. You use the holes in the servo arm that are far from the center, and the holes on the control surface arm that are close to the surface. This increases the effective control gain without bumping into the rate limit. Of course, if you use this technique, you must eliminate all "free play" in the mechanical linkage, and the manual control will not be easy. But the control stabilization will be better.

Matlab - I did some Matlab simulations for "John Mac" while we were trying to get heading hold working for his helicopter. We had a "damping" feedback gain turned too high, it was pushing a servo into rate limiting, I finally figured it out with some simulations. There are two nonlinear blocks in Matlab's simulink library that do a nice job of capturing the most important features of the deflection of a control surface that is driven by a servo: a "Saturation" block, followed by a "Rate Limiter" block. You set the saturation block to represent the limits of the deflection. You set the rate limiter block to represent the maximum slew rate. Once you have the deflection of the control surface, you can compute everything else from the model of the airplane dynamics.

Pilot links

 * http://www.diydrones.com/profiles/blogs/excellent-performance-by-uav#comments Bill Premerlani gentlenav MatrixPilot code, .h file, documentation, cameras used, purchase detials etc. Here are the two advantages of the Invensense 500 degree/second gyros over the LISY gyros. Tests have shown that the Invensense gyros are practically vibration-proof. This makes them suitable for helicopters and for planes that use internal combustion engines. With a 3.3 volt power supply, the 500 degree/second Invensense gyros will actually not saturate up to about 720 degrees per second. This is more than double the range of the 300 degree/second LISY gyros, and makes the Invensense gyros suitable for acrobatic maneuvers, such as two complete barrel rolls in 1 second, without saturating the gyros.


 * http://diydrones.com/profiles/blogs/gt200kmh-funjet-the-fastest


 * http://code.google.com/p/gentlenav/wiki/MatrixPilot


 * http://code.google.com/p/uavexpansionboard/downloads/list Add on to matrixpilot


 * http://groups.google.com/group/uavdevboard-commits


 * http://groups.google.com/group/uavdevboard?lnk=srg


 * http://groups.google.com/group/UAVHeliBoard?hl=en Helicopter code


 * http://code.google.com/p/gentlenav/wiki/OpenLogConnection


 * http://diydrones.com/profiles/blogs/acromaster-as-uavdevboard Acromaster plance using uavdevboard


 * http://www.diydrones.com/profiles/blogs/invensense-ixz500-gyros-flown?id=705844%3ABlogPost%3A177096&page=1#comments


 * http://www.diydrones.com/profiles/blogs/arduimu-quadcopter-part-ii#comments ArduIMU based Quadrocopter


 * http://www.diydrones.com/profiles/blog/list?user=3n7oxlg4fanvy Jose Julio blog on ArduIMU Quad


 * http://groups.google.com/group/uavdevboard


 * http://www.pololu.com


 * http://www.diydrones.com/forum/topics/kalman-filtering-code-for?xg_source=activity Jamie Kalman filter code


 * http://www.diydrones.com/page/uav-devboard


 * http://www.diydrones.com/profiles/blogs/replacing-fma-with-a-6dof-imu?id=705844%3ABlogPost%3A100725&page=2#comments


 * http://www.rcgroups.com/forums/showthread.php?t=1057001

DCM and Kalman differences and complements. The AHRS algotithm is based on DCM update proposed by William Premerlani in DIYDRONES. http://www.sparkfun.com/products/9980 purhcase board from Sparkfun

http://groups.google.com/group/uavdevboard

http://code.google.com/p/gentlenav/

Usenet post1
https://groups.google.com/group/uavdevboard/browse_frm/thread/cb766781b7bb757b

There are a series of technical discussions here relating to UDB and

MatrixPilot. By using oversampling at 8000 samples per second, we are able to achieve 14 bit resolution for gyro and accelerometer signals. Regarding in-flight autocalibration of the gyros, you might want to read this posting  . With regard to absolute accuracy for camera aiming, the limiting effects are errors in the reference vectors used for drift compensation. Accuracy is rather good (sorry, but I cannot give you hard numbers on that, but probably within a couple of degrees) if the plane is flying straight and level at constant speed. But if it is turning a lot or changing speed, the error could be more than that, because of centrifugal effects. I am presently working on a method, described here http://diydrones.com/forum/topics/an-improved-method-for-accounting-for-acceleration-in-gyro-roll

to reduce the error due to acceleration. There are other things to consider in estimating the performance of camera aiming. I consider Peter Hollands to be the expert on that subject, perhaps he will comment. Best regards, Bill Premerlani

Electric motor calibration
https://groups.google.com/group/uavdevboard/browse_frm/thread/8fdbccd17b9f2a5d

In my work with VFD AC Motor Drives during the installation of a new motor we run the controller through an automated test that determines the varous response characteristics/dynamics of the motor to calibrate the Drive. Would it be unreasonable to bring the flying craft to a safe hover with some type of default PID settings then have the controler make micro bursts of throttle inputs to the various motors allowing the sensors on board to measure the torque and various rational offsets needed? This could make it easy for us to be able make adjustments for changing the dynamics of our crafts (changing battery size or type, adding or removing equipment/cameras or such, unballanced payloads) with out the painful experimentation of readjusting PID's. Is this something you see being able to incorporate in the future?

---

I have taken the first steps in the direction of what you are suggesting. I am able to measure the LaPlace transform of the tilt dynamics from the available data, without having to disturb the controls in any way. Attached is the result for my draganflier.

download https://groups.google.com/group/uavdevboard/attach/f1262cbb41e41da5/draganFlierTiltImpulseFunction.pdf?part=4

Loitering
https://groups.google.com/group/uavdevboard/browse_frm/thread/4a39758ad7783616