Hi, my name is Astik Srivastava, and I’m thrilled to present the final update on my Google Summer of Code (GSoC) 2024 project: All in one system identification toolkit for Ardupilot. It was an amazing learning experience for me, and I hope this work will be beneficial for researchers and hobbyists alike.
Project Goals and Status
This project was divided into two subgoals, namely:
- Webtool design for log analysis and model extraction: The system identification toolbox is now a part of Ardupilot webtools for easier access and user friendly operation. The system identification workflow and algorithms are based on pyAircraftIden library. Several modification were made to the pyAircraftIden library to enable model estimation in a web environment. All those modifications are given here:
Development webtool: Pull request for intelligent estimation of initial values of parameters of transfer function and state space models by Astik-2002 · Pull Request #5 · xuhao1/pyAircraftIden · GitHub
The webtool will analyze the flight logs to return SISO transfer function model or SIMO state space model for the dynamics of the UAV.
The pr for inclusion of sysID toolkit with webtools is shared below:
System Identification toolkit for Ardupilot compatible vehicles: GSoC 2024 by Astik-2002 · Pull Request #178 · ArduPilot/WebTools · GitHub - Lua Script for frequency sweep generation for arduplane: Since ArduPlane does not have a system identification model like ArduCopter, I created a lua script that can be interfaced with the ArduPlane’s attitude controller to enable frequency sweeps either to the target rate values, or to the actuators for pitch and roll axis. The script can also be modified to give frequency sweep directly to the servo channel (helpful for yaw axis or throttle).
The pr for inclusion of lua script for frequency sweep is shared below:
AP_Scripting: plane doublet example modification by Astik-2002 · Pull Request #26472 · ArduPilot/ardupilot · GitHub
Work to be done
Although the toolkit has given accurate results in predicting models for UAVs, some work is still needed to improve the versatility of this toolkit.
-
MIMO state space model estimation: The state space estimation currently works only for single input-multi output systems. This is very limiting is the user is trying to analyze a coupled system (like a fixed-wing aircraft). The pyAircraftIden solver is not equipped for MIMO systems, so further research is required.
-
Non-linear systems: UAVs like VTOLs have nonlinear dynamics during certain parts of their flight regime. Since the toolkit deals with frequency response data, it is not equipped to identify nonlinearities in the dynamics of the UAVs.
-
Lua interfacing with ArduPlane attitude controller: The Lua script used for frequency sweep interfaces with the pitch and roll rate controller, but no such interface is available for yaw axis. This forces the user to inject the sweep directly to rudder servo channel for yaw axis, which is both more dangerous in real flight tests, and also might be infeasible for vehicles with multiple channels for yaw control (i.e. aircrafts with split ailerons for yaw control or with V-Tails)
In order to make this webtool as versitile as CIFER (available for MATLAB), these modifications need to be added to the current webtool.
Please find attached the list of commits during this project. I will be uploading documentation and tutorials on how to use the toolkit and the lua script in coming days.
WebTool Commits
pyAircraftIden commits
Ardupilot commits for lua scripts