I am impressed by the latest developments on ArduPilot. I wasnt expecting that ArduPilot would dump Nuttx and move to Chibios. I like it I couldnt agree more with the reasoning as laid out in the Youtube video
I really like this new approach with use of Chibios as a true RTOS and also targetting the cheap FC boards that are out there. It really uses the hardware efficiently at last and opens up Ardupilot again to the masses. I was never very impressed with Nuttx but when I was using official ArduPilot, rightly or wrongly I didnt get any feeling that there was much interest in moving away from it. I am glad I was wrong about that!
That was a major reason that I started work my own board Ardupilot Flight Controller with on-chip OSD because, though I like Ardupilot, I felt there was a major gap between the Pixhawk and the type of cheap flight controller that I wanted.
The new official approach using Chibios fills the gap quite nicely. I havent used Chibios but it looks to have at similar performance to FreeRTOS that I used and the readymade drivers cut out a lot of work.
I like the use of the script to fit the software to the hardware. It looks similar to STM32Cube, which works well. Hopefully I will try it out on my own board at some stage soon.
So full marks to the dev team for that.
I still have some major gripes with ArduPilot. Here is the main one. and which is why I dont see me going back to using Ardupilot at the moment.
I think that the mixing is way too primitive.
On my my fork of ArduPilot on my SkyHook Discovery, I wanted to be able to automatically adjust the trim for different flight modes. The Crow flaps need proportional elevator trim as they are applied and I also wanted to be able to ignore Crow flap in auto modes etc and to be able to automatically dump Crow if useful throttle was applied in case I had to abort a landing. Unfortunately in the Official ArduPilot, trying to achieve any of that is just hopeless. I had a quick look recently and I still don’t see much has changed.
The approach I used in my ArduPlane fork was to strip out most of the current servo code in the ArduPlane App and end up with just 4 generic hopefully self explanatory Ardupilot provided functions as follows:
plane.get_roll_demand()
plane.get_thrust_demand()
plane.get_pitch_demand()
plane.get_yaw_demand()
These are in common units, which represent some torque value to apply to the relevant axis between -1 and 1
Note that these “demands” know nothing about servos. It is then up to the mixer implementation to convert these values into useful control outputs
Here are various mixers That I have made based on this idea
A simple “wing” mixer
The mixer for the Skyhook Discovery
Sitl mixer
These have all flown in reaity or in the sim of course
Not also how the mixers stand alone in one file rather than being scattered over many source files
regards
Andy Little