DOI: 10.5061/dryad.280gb5n2g
title: Data and code from: Body oscillations couple with wing flapping to reduce aerodynamic power in wild silkmoth flight

description: The data includes 3D kinematic recordings and wing and body morphometrics
 from 9 specimens across four silkmoth species during forward flight. The
 dataset enables investigation of how coupled wing and body movement affect
 aerodynamic forces and energy efficiency in silkmoth flight. It also
 supports phase relationships between body pitch and wing sweep that
 enhance lift and thrust while reducing power requirements. Details of each
 folder in the repository are as follows: Individual kinematics
 data (A. io: 4 wingstrokes; A. luna: 3 wingstrokes; A. polyphemus: 2
 wingstrokes; H. euryalus: 4 wingstrokes) are stored in the folder
 'Data_kinematics_individuals' and presented as Fourier fit
 coefficients in .mat files. Averaged representative kinematics data are
 stored in the folder 'Data_kinematics' and presented as Fourier
 fit coefficients in .mat files. Individual morphometrics data (A. io: 3
 specimens; A. luna: 3 specimens; A. polyphemus: 2 specimens; H. euryalus:
 1 specimen) are stored in the folder
 'Data_morphometrics_individuals' and presented as .csv
 spreadsheets. Averaged representative morphometrics data are
 stored in the folder 'Data_morphometrics' and presented as .csv
 spreadsheets. Code for Figure 3 plots is included in the folder
 "Code_Plots_Figure_3" as MATLAB file
 'main_plots_Figure_3.m'. Code for all other plots is
 included in the folder "Code_Plots_all_other" and can all be run
 from the MATLAB file 'main_analysis.m'. Before running this
 file, set the 'ind_i' parameter as 1, 2, 3 or 4 to select one of
 the four silkmoth species in the study.
description: # Data and code from: Body oscillations couple with wing flapping to
 reduce aerodynamic power in wild silkmoth flight **Dataset DOI**:
 [https://doi.org/10.5061/dryad.280gb5n2g](https://doi.org/10.5061/dryad.280gb5n2g)  **Authors**: Usama Bin Sikandar, Brett R. Aiello, Simon Sponberg  **Journal**: *Journal of the Royal Society Interface* (accepted, 2025)   ## Overview This repository contains data and analysis code for the research paper "Body oscillations couple with wing flapping to reduce aerodynamic power in wild silkmoth flight" by authors Usama Bin Sikandar, Brett R. Aiello, and Simon Sponberg. This research paper has been accepted for publication in the Journal of the Royal Society Interface in 2025. It contains experimental kinematics and morphometrics data from four species of wild silkmoths, along with MATLAB code used to model, analyze, and visualize how body oscillations interact with wing flapping to reduce aerodynamic power. ## Species Indexing (also used for `ind_i` variable across the entire code) 1: *Automeris io* (AI) 2: *Actias luna* (AL) 3: *Antheraea polyphemus* (AP) 4: *Hyalophora euryalus* (HE) ## File and Folder Structure ### Data_Sikandar_et_al_2025.zip ### Data_kinematics_individuals/ Contains `.mat` files with individual wingstroke kinematic parameters **Files and Descriptions**: - `AI_01_01_5_FourierCoeffs_01.mat`: A. io specimen ID 1, flight 1, wingstroke 1 - `AI_01_02_5_FourierCoeffs_01.mat`: A. io specimen ID 1, flight 2, wingstroke 1 - `AI_31_01_5_FourierCoeffs_01.mat`: A. io specimen ID 31, flight 1, wingstroke 1 - `AI_32_01_5_FourierCoeffs_01.mat`: A. io specimen ID 32, flight 1, wingstroke 1 - `AL_20_01_5_FourierCoeffs_01.mat`: A. luna specimen ID 20, flight 1, wingstroke 1 - `AL_22_01_5_FourierCoeffs_01.mat`: A. luna specimen ID 22, flight 1, wingstroke 1 - `AL_23_01_5_FourierCoeffs_01.mat`: A. luna specimen ID 23, flight 1, wingstroke 1 - `AP_01_04_5_FourierCoeffs_01.mat`: A. polyphemus specimen ID 01, flight 4, wingstroke 1 - `AP_03_02_5_FourierCoeffs_01.mat`: A. polyphemus specimen ID 03, flight 2, wingstroke 1 - `HE_03_01_5_FourierCoeffs_01.mat`: H. euryalus specimen ID 03, flight 1, wingstroke 1 - `HE_03_01_5_FourierCoeffs_02.mat`: H. euryalus specimen ID 03, flight 1, wingstroke 2 - `HE_03_03_5_FourierCoeffs_01.mat`: H. euryalus specimen ID 03, flight 3, wingstroke 1 - `HE_03_03_5_FourierCoeffs_02.mat`: H. euryalus specimen ID 03, flight 3, wingstroke 2 **Variables in each file**: - `a_phi`, `b_phi`: Wing sweep angle (φ) Fourier coefficients (radians) - `a_theta`, `b_theta`: Wing deviation angle (θ) Fourier coefficients (radians) - `a_alpha`, `b_alpha`: Wing pitch angle (α) Fourier coefficients (radians) - `a_chi`, `b_chi`: Body pitch angle (χ) Fourier coefficients (radians) - `a_beta`, `b_beta`: Stroke plane angle (β) Fourier coefficients (radians) - `a_u`, `b_u`: Forward velocity Fourier coefficients (m/s) - `a_v`, `b_v`: Lateral velocity Fourier coefficients (m/s) - `a_w`, `b_w`: Vertical velocity Fourier coefficients (m/s) - `f`: Wingbeat frequency (Hz) - `chi`, `beta`, `beta_roll`: Mean body and stroke plane angles (radians) ### Data_kinematics/ Contains `.mat` files of species-averaged wingstroke kinematics as Fourier coefficients. **Files**: - `AI_00_00_0_FourierCoeffs_01.mat`: A. io representative species-averaged kinematics - `AL_00_00_0_FourierCoeffs_01.mat`: A. luna representative species-averaged kinematics - `AP_00_00_0_FourierCoeffs_01.mat`: A. polyphemus representative species-averaged kinematics - `HE_00_00_0_FourierCoeffs_01.mat`: H. euryalus representative species-averaged kinematics **Variables in each file**: - `a_phi`, `b_phi`: Wing sweep angle (φ) Fourier coefficients (radians) - `a_theta`, `b_theta`: Wing deviation angle (θ) Fourier coefficients (radians) - `a_alpha`, `b_alpha`: Wing pitch angle (α) Fourier coefficients (radians) - `a_chi`, `b_chi`: Body pitch angle (χ) Fourier coefficients (radians) - `a_beta`, `b_beta`: Stroke plane angle (β) Fourier coefficients (radians) - `a_u`, `b_u`: Forward velocity Fourier coefficients (m/s) - `a_v`, `b_v`: Lateral velocity Fourier coefficients (m/s) - `a_w`, `b_w`: Vertical velocity Fourier coefficients (m/s) - `f`: Wingbeat frequency (Hz) - `chi`, `beta`, `beta_roll`: Mean body and stroke plane angles (radians) ### Data_morphometrics_individuals/  `.csv` files with body and wing morphometrics for individual specimens.  **Files**: - `AI_01_4_CW_BEoutput.csv`: A. io specimen ID 1 - `AI_31_a_2020_05_13_CW_BEoutput.csv`: A. io specimen ID 31 - `AI_32_a_2020_05_13_CW_BEoutput.csv`: A. io specimen ID 32 - `AL_20_1_CW_BEoutput.csv`: A. luna specimen ID 20 - `AL_22_1_CW_BEoutput.csv`: A. luna specimen ID 22 - `AL_23_1_CW_BEoutput.csv`: A. luna specimen ID 23 - `AP_01_1_CW_BEoutput.csv`: A. polyphemus specimen ID 1 - `AP_03_1_CW_BEoutput.csv`: A. polyphemus specimen ID 3 - `HE_03_CW_BEoutput.csv`: H. euryalus specimen ID 3 **Relevant parameter names in each column**: - `BandWmass`: Total mass of body + wings (grams) - `bodyL`: Body length (m) - `wingL`: Wing length (m) - `mean_chord`: Mean chord length (m) - `r_position`: positions of wing strip centroids along the spanwise direction (m) - `stripL`: length of each wing strip (m) - `MCL_strip`: mean chord length of each strip (m) - `LE_pa`: position of the center of the leading edge center of each strip (m) - `L1`: distance between the body center of mass and the right wing hinge (m) - `hc_pa`: position of the center of the half-chord position of each strip (m) - `wingarea`: Wing area per wing (m²) - `r_2_r_ND`: Nondimensional radius of the second moment of area - `wingmass`: Wing mass per wing (g) - `qc_pa`: position of the center of the quarter-chord position of each strip (m) ### Data_morphometrics/ `.csv` files with averaged morphometrics per species. **Files**: - `AI_00_0_CW_BEoutput.csv`: A. io species-averaged morphometrics - `AL_00_0_CW_BEoutput.csv`: A. luna species-averaged morphometrics - `AP_00_0_CW_BEoutput.csv`: A. polyphemus species-averaged morphometrics - `HE_00_0_CW_BEoutput.csv`: H. euryalus species-averaged morphometrics **Relevant parameter names in each column**: - `BandWmass`: Total mass of body + wings (grams) - `bodyL`: Body length (m) - `wingL`: Wing length (m) - `mean_chord`: Mean chord length (m) - `r_position`: positions of wing strip centroids along the spanwise direction (m) - `stripL`: length of each wing strip (m) - `MCL_strip`: mean chord length of each strip (m) - `LE_pa`: position of the center of the leading edge center of each strip (m) - `L1`: distance between the body center of mass and the right wing hinge (m) - `hc_pa`: position of the center of the half-chord position of each strip (m) - `wingarea`: Wing area per wing (m²) - `r_2_r_ND`: Nondimensional radius of the second moment of area - `wingmass`: Wing mass per wing (g) - `qc_pa`: position of the center of the quarter-chord position of each strip (m) ### Code_Plots_Figure_3/ **Files**: - `main_plots_Figure_3.m`: Generates plots for Figure 3 in the manuscript. ### wingKinParamsBEM_tmvr_normd_SM_SpAvgd.xlsx **Description**: Species-averaged data for modeling and plotting. These are averaged flight kinematic and morphometric parameters for each species. - `Species`: Species name (AI, AL, AP, HE) - `WS#`: Wingstroke number - `mass`: Total mass (body + wings) (grams) - `R`: Wing length (m) - `r_2`: Radius of second moment of area (normalized by wing length) - `c_mean`: Mean wing chord (m) - `u_mean`, `u_amp`: Forward velocity mean and amplitude (m/s) - `w_mean`, `w_amp`: Vertical velocity mean and amplitude (m/s) - `chi mean`, `chi amp`: Body pitch angle mean and amplitude (radians) - `beta mean`, `beta amp`: Stroke plane angle mean and amplitude (radians) - `beta_roll`: Stroke plane roll (tilt) angle (radians) - `phi_mean`, `phi_amp`: Wing sweep angle: mean and amplitude (radians) - `alpha_mean`, `alpha_amp`: Wing pitch (feathering) angle mean and amplitude (radians) - `theta_mean`, `theta_amp`: Wing deviation angle mean and amplitude (radians) ### Code_Plots_all_other/ Contains MATLAB scripts for aerodynamic modeling and all other figure generation. **Files and Descriptions**: - `main_analysis.m`: Master script; runs complete analysis and generates all figures in the manuscript (except Figure 3) for selected species via `ind_i = 1 to 4` - `BE_full_5.m`: Core blade element model with aerodynamic + inertial force calculation - `run_models_all.m`: Executes the model across species - `calcWingKinsMeanAmp_2.m`: Computes mean and amplitude of kinematic waveforms - `drawDownstroke.m`: Annotates plots with downstroke phases - `findDownstrokeEdges.m`: Identifies time points of downstroke in cycle - `giveWingKinsTrimCSV.m`: Converts trimmed kinematics to `.csv` format - `normalizeVect.m`: Normalizes vector magnitudes - `plotWithMinMaxBounds.m`: Plots curves with min/max bounds - `plotWithTransparentCurves.m`: Transparent curve plotting for error bands - `plot_all_wTrimRanges.m`: Plots individuals with trim range annotations - `readFileNames.m`: Utility to parse filenames from folders - `scaleSinusoid.m`: Scales sinusoids to match fit params - `rescaleSinusoid.m`: Rescales sinusoids to match fit params - `rescaleTime.m`: Normalizes time vectors over wingbeat - `w2b.m`: Transforms vectors from wing to body frame - `wingShapeOutline.m`: Plots wing outlines from morphometric data The following files are the copies of species-averaged parameters from Data_morphometrics and Data_kinematics folders: - `AI_00_00_0_FourierCoeffs_01.mat`: A. io representative species-averaged kinematics - `AL_00_00_0_FourierCoeffs_01.mat`: A. luna representative species-averaged kinematics - `AP_00_00_0_FourierCoeffs_01.mat`: A. polyphemus representative species-averaged kinematics - `HE_00_00_0_FourierCoeffs_01.mat`: H. euryalus representative species-averaged kinematics - `AI_00_0_CW_BEoutput.csv`: A. io species-averaged morphometrics - `AL_00_0_CW_BEoutput.csv`: A. luna species-averaged morphometrics - `AP_00_0_CW_BEoutput.csv`: A. polyphemus species-averaged morphometrics - `HE_00_0_CW_BEoutput.csv`: H. euryalus species-averaged morphometrics ### wingKinParamsBEM_tmvr_normd_SM_individuals.xlsx **Description of relevant variables**: Individual specimen data for modeling and plotting. These are measured flight kinematic and morphometric parameters for each silkmoth specimen. - `Species`: Species name (AI, AL, AP, HE) - `Ind#`: Individual specimen number - `Trial#`: Flight trial number - `WS#`: Wingstroke number - `mass`: Total mass (body + wings) (grams) - `R`: Wing length (m) - `r_2`: Radius of second moment of area (normalized by wing length) - `c_mean`: Mean wing chord (m) - `u_mean`, `u_amp`: Forward velocity mean and amplitude (m/s) - `w_mean`, `w_amp`: Vertical velocity mean and amplitude (m/s) - `chi mean`, `chi amp`: Body pitch angle mean and amplitude (radians) - `beta mean`, `beta amp`: Stroke plane angle mean and amplitude (radians) - `beta_roll`: Stroke plane roll (tilt) angle (radians) - `phi_mean`, `phi_amp`: Wing sweep angle: mean and amplitude (radians) - `alpha_mean`, `alpha_amp`: Wing pitch (feathering) angle mean and amplitude (radians) - `theta_mean`, `theta_amp`: Wing deviation angle mean and amplitude (radians) ### wingKinParamsTrim_tmvr_SM.xlsx **Description**: Contains trial-based trimming results for modeling aerodynamic forces and torques across wingstrokes for four silkmoth species. - `Species`: Species name (AI, AL, AP, HE) - `Ind#`: Individual specimen ID number - `Trial#`: Flight trial number - `WS#`: Wingstroke number - `Trim result`: Flag indicating success or failure of aerodynamic trimming - `Trim #`: Index of the trimming attempt - `mass`: Total mass (body + wings) (grams) - `R`: Wing length (m) - `r_2`: Radius of second moment of area (normalized by R) - `c_mean`: Mean wing chord (m) - `u_mean`, `u_amp`: Forward velocity mean and amplitude (m/s) - `w_mean`, `w_amp`: Vertical velocity mean and amplitude (m/s) - `d wbf`: Wingbeat frequency offset to trim from species-averaged value (Hz) - `d chi mean`, `d chi amp`: Body pitch angle mean and amplitude offset to trim from species-averaged values (radians) - `d beta mean`, `d beta amp`: Stroke plane angle mean and amplitude offset to trim from species-averaged values (radians) - `d beta_roll sp`: Stroke plane roll (tilt) angle offset to trim from species-averaged value (radians) - `d phi_mean`, `d phi_amp`: Wing sweep angle mean and amplitude offset to trim from species-averaged values (radians) - `d alpha_mean`, `d alpha_amp`: Wing pitch (feathering) angle mean and amplitude offset to trim from species-averaged values (radians) - `d theta_mean`, `d theta_amp`: Wing deviation angle mean and amplitude offset to trim from species-averaged values (radians) - `d k_D`: Drag coefficient offset to trim from species-averaged value - `d k_L`: Lift coefficient offset to trim from species-averaged value - `d k_R`: Rotational coefficient offset to trim from species-averaged value - `d k_A`: Added mass coefficient offset to trim from species-averaged value - `error`: Root-mean-square error in cost function from perfect equilibrium (unitless) - `Fx mean`, `Fx amp`: Aerodynamic force in x-direction: mean and amplitude (N) - `Fy mean`, `Fy amp`: Aerodynamic force in y-direction: mean and amplitude (N) - `Fz mean`, `Fz amp`: Aerodynamic force in z-direction: mean and amplitude (N) ## Software Requirements  - **MATLAB R2024b** - Curve Fitting Toolbox - Signal Processing Toolbox - Statistics and Machine Learning Toolbox - **Microsoft Excel** (for `.csv` and `.xlsx` files) ## Data Sources Partially derived from: - [https://doi.org/10.5061/dryad.fj6q573v7](https://doi.org/10.5061/dryad.fj6q573v7) - [https://doi.org/10.5061/dryad.3ffbg79jp](https://doi.org/10.5061/dryad.3ffbg79jp) ## Contact **Usama Bin Sikandar**  [usamabinsikandar@gmail.com](mailto:usamabinsikandar@gmail.com)