I've done a few few trips now on the PyPilot and I've collected some sets of gains. As suggested by Sean it seems as if D/P is constant; in fact that is my guide when adjusting the gains. However I need a calculator for this and still make typos with the number of zeros. I've trawled through other autopilot's manuals to see what user parameters are available in their settings. Based on this, I'm planning to change the described gainset prototype to become a bit more intuitive and usable front-end, given the cockpit load under which you typically have to operate it.
First, I want to select which of the P-parameters I will be using: P or PR, and the D-parameter: D or DD. Then, I want to give upper and lower limits for the P-parameter, and a factor for the D/P constant. Finally, I want to introduce a 'speed factor', which multiplies my boat speed to set the P-parameter within the given range. Then the boat speed dictates the P and D-factor, which I write back to pypilot's signalk database. Let's rename the D/P constant to a simple name, say, 'counter rudder'. I think speed factor and counter rudder are fixed to my rudder effectiveness resp. boat inertia and they should not change.
Then, when the circumstances change, there's one more overall gain that can be manually set, and that multiplies the chosen P and D parameter. Let's call this gain 'responsiveness'. At lowest value, 1, this signifies optimal use of energy; at higher values this makes the autopilot more assertive. Initially, I'd make a slider for it, or +- buttons, and set it manually.
I think eventually overall gain should in some way follow either the sea state (amplitude of imu.heave), the steadyness of the true wind (standard deviation of $WIMWV), or the wind angle/point of sail (average of $WIMWV). Which one is yet to be determined. A bit more reactive, it can also increase as the average error heading goes up.
Before I begin, any thoughts would be apprciated.
Old article, but might still provide some handles:
https://pearl.plymouth.ac.uk/handle/10026.1/1100
First, I want to select which of the P-parameters I will be using: P or PR, and the D-parameter: D or DD. Then, I want to give upper and lower limits for the P-parameter, and a factor for the D/P constant. Finally, I want to introduce a 'speed factor', which multiplies my boat speed to set the P-parameter within the given range. Then the boat speed dictates the P and D-factor, which I write back to pypilot's signalk database. Let's rename the D/P constant to a simple name, say, 'counter rudder'. I think speed factor and counter rudder are fixed to my rudder effectiveness resp. boat inertia and they should not change.
Then, when the circumstances change, there's one more overall gain that can be manually set, and that multiplies the chosen P and D parameter. Let's call this gain 'responsiveness'. At lowest value, 1, this signifies optimal use of energy; at higher values this makes the autopilot more assertive. Initially, I'd make a slider for it, or +- buttons, and set it manually.
I think eventually overall gain should in some way follow either the sea state (amplitude of imu.heave), the steadyness of the true wind (standard deviation of $WIMWV), or the wind angle/point of sail (average of $WIMWV). Which one is yet to be determined. A bit more reactive, it can also increase as the average error heading goes up.
Before I begin, any thoughts would be apprciated.
(2019-07-15, 02:57 PM)seandepagnier Wrote: [...], but I still plan on developing other pilots such as neural network approach because they have potential to do better than human steering which is not really possible with PID (unless human is tired)
Old article, but might still provide some handles:
https://pearl.plymouth.ac.uk/handle/10026.1/1100