Thank you very much, Yuri. I have seen a lot of your videos and Kenny’s videos. They are inspirational!
Thank you for the suggestion of increasing ATC_STR_ANG_P. I will give it a try if weather permits.
Also thank you for the suggestion on zeroing out the initial PID terms. I did try that, and estimated the max capable turn rate first (the gz value on the Tuning graph of the Mission Planner main screen). I have two unexplained results or issues:
-
The gz value shows that my rover can only turn at around 25 degrees per second, which is much lower than I expected as it seems that my rover can easily complete a 360-degree turn in less than 6 seconds. This is really just for curiosity and is not big deal at all.
-
The bigger issue I am trying to solve is to make the rover to turn “confidently” and without overshooting. I did set the ACRO_TURN_RATE and the ATC_STR_RAT_MAX to around 25 degree determined from the above. Then I zeroed out ATC_STR_RAT_P, I, and D and started ATC_STR_RAT_FF with a low value then gradually increased it. I got two additional unexpected results:
a. When I set ATC_STR_RAT_FF to 0.8, which was close to the PID.Tar (as shown the 2nd picture of my previous post), the rover overshoots violently, sometimes overshooting 360 degrees, before correcting itself.
b. When I set the FF to a much lower value at 0.2, as shown on the 3rd picture of my prior post, the rover hesitates and undershoots the pivot turns, having to complete two small pivot turns before getting a say 60 degree turn. The FF value in this case is much lower than the PID.Tar, which is very counter intuitive.
In both of those cases, PID.Act appears to lagged the PID.Tar and the PID.Act overshoots then over corrects compared with the PID.Tar. I have tried multiple FF values, but no luck so far.
Is there a way to make an educated guess of the ATC_STR_RAT_FF value based on the physical characteristics of the rover? If there is, I will appreciate some guidance here.
I have tried the following and got ATC_STR_RAT_FF to be ~0.35; but it didn’t do the trick for me. Given the ATC_STR_RAT_FF can be greater than 1, I am not sure the method below is correct either.
I also read another post here, Documentation of how to calculate ATC_STR_RAT_FF for Rover · Issue #8323 · ArduPilot/ardupilot · GitHub, unfortunately I am at a lost in reading the AR_AttitudeControl source code without much knowledge of the architecture of the Ardupilot source code.
Thank you very much again for the tips. Any additional advice will be very much appreciated.