In my application I want the speed to be as fast as possible at all times, right at the limit of the vehicle capability. If I set a cruise speed below the top speed of the boat and give the flight controller authority over the throttle, it will throttle the engine to slow the vehicle at times. This is unacceptable. Experience shows that the fastest lap times are achieved with the throttle wide open at all positions on the course.
If instead I command a cruise speed higher than the vehicle capability, it would continually impose proportional and integral gain error of varying magnitudes. I think this would compromise stability and the ability to stay on path.
Am I correct in my analysis? If so, what way can I set up the flight controller to react to whatever speed the boat happens to achieve at any point in time and still maintain tight control to smoothly hold it on path between waypoints?
Are you saying you that on the course you are running, you can navigate even the turns with the full throttle at all times or does your boat need to slow down at turns?
Also, do you have steering with a rudder or something independent of the throttles or is your steering accomplished by differential throttling of left and right thrusters?
If you can run at full throttle all the time and if steering is independent of the throttles, I think giving a cruise speed in excess of boat capability is fine. The PID will have high error terms but that shouldn’t matter.
If your steering and speed are tied together as in skid-steer steering, then I think you probably need to be slower than full throttle at turns to give the steering controller some throttle to work with above and below the travel speed. You may be able to accomplish this with the WP_SPEED parameter.
Just my 2 cents that may be worth less than 2 cents!
There is a concept called “Integral Windup” that used to plague some PID controllers (mostly old analog ones) in industrial applications. If the Ardupilot PID suffers from that, then having the speed setpoint above the capability of the engines may not work. If integral error term keeps climbing as you have the speed setpoint out of range of what the throttle can achieve, then when you lower the setpoint, the controller may have to unwind that error term over time, so your boat would not slow down quickly. However, I bet the ArduPilot developers have that problem solved! https://en.wikipedia.org/wiki/Integral_windup
Unless you are doing something advanced that I don’t know about (or I don’t understand the question), there is no timing related to path following, so ArduPilot does not expect the vehicle to be at any given point at any given time. It will just work its way along the path at whatever speed it is moving.
One thing I’d like to add is that it is better to use the WP_SPEED to set the default speed for the mission rather than modifying the CRUISE_SPEED. The reason is that the CRUISE_SPEED (along with CRUISE_THROTTLE) is the basis of the throttle control… so changing them affects the speed controller. WP_SPEED simply sets the target speed and does not affect the controller.
If the WP_SPEED is set higher than the vehicle can physically manage, it will just drive at it’s top speed. Setting the CRUISE_SPEED above the vehicle’s actual physical abilities will cause some troubles especially in more manual modes like Acro.
Randy, so WP_SPEED controls the speed during the entire mission? I was under the impression that CRUISE_SPEED controlled speed between waypoints and WP_SPEED took effect at some radius around waypoints.
That’s right, WP_SPEED is the target maximum speed for the entire mission. The “lane based speed control” feature will slow the vehicle if it thinks it needs to to keep within WP_OVERSHOOT of the line between waypoints.
OK, just to be sure: The L1 navigation algorithm uses vehicle speed to calculate angle Nu2 and distance L1. These in turn affect the lateral acceleration demand. This is the measured speed from Kalman filter, not one of the commanded speeds (waypoint or cruise), right?