⚠️ For most users: You don’t need to customize these files. This section is intended for advanced users, integrators, and developers who need to extend or modify the configuration workflow.
The ArduPilot Methodic Configurator uses several configuration files to manage and visualize vehicle parameters. These files are crucial for the tool’s operation and are organized in a specific directory structure.
The ArduPilot Methodic Configurator relies on the following key files:
Intermediate Parameter Files (.param): Located in the vehicle-specific directory with two-digit prefixes (e.g., 02_imu_setup.param).
These contain the parameters configured in each step and are editable plain text files.
Each file modifies a small subset of the flight controller’s 1200+ parameters, enabling a stepwise configuration approach that reduces errors and improves traceability.
Configuration Steps File (configuration_steps_*.json): Defines the workflow, documentation, explanations, and advanced behavior for each parameter file.
Searched first in the vehicle-specific directory, then in the application’s installation directory.
Default Parameter Values File (00_default.param): Located in the vehicle-specific directory.
Automatically downloaded from the flight controller via MAVFTP or extracted from a .bin log file when creating a new project.
If broken or missing regenerate with:
extract_param_defaults bin_log_file.bin > 00_default.param
ArduPilot parameter documentation file (apm.pdef.xml): Contains parameter documentation and metadata in XML format.
Searched in this order: vehicle directory → installation directory → automatically downloaded from the internet.
Generate from ArduPilot source code if needed:
cd ardupilot
./Tools/autotest/param_metadata/param_parse.py --vehicle ArduCopter --format xml
cp apm.pdef.xml /path/to/your/vehicle/directory
Vehicle Components File (vehicle_components.json): Located in the vehicle-specific directory.
Stores information about all vehicle components (flight controller, frame, battery, ESC, motors, propellers, receivers, GNSS, telemetry, etc.)
including their connectivity, specifications, firmware versions, and notes.
Used for deriving parameter values based on component specifications and validating configuration compatibility.
Created manually or imported from templates.
Vehicle Image File (vehicle.jpg): Located in the vehicle-specific directory.
Optional photograph or diagram of the vehicle displayed in the GUI for visual reference during configuration.
Helps users identify the correct vehicle and its physical layout during setup.
Each intermediate parameter file is a plain text file, editable with ArduPilot Methodic Configurator or any common text editor like Notepad++, nano, or VS Code.
File contents:
Comments start with the # character.
Example:
# Arming with Rudder enable/disable
# Allow arm/disarm by rudder input. When enabled arming can be done with right rudder, disarming with left rudder.
# 0: Disabled
# 1: ArmingOnly
# 2: ArmOrDisarm
ARMING_RUDDER,0 # We find it safer to use only a switch to arm instead of through rudder inputs
The configuration steps file is a JSON file that defines the workflow, documentation, and advanced behavior for each intermediate parameter file. It serves as the central control mechanism for how the Methodic Configurator processes vehicle configuration steps.
The configuration steps file contains two main top-level objects:
steps: Defines configuration for each parameter file (e.g., 02_imu_temperature_calibration_setup.param)phases (optional): Groups steps into logical phases for better user organization{
"steps": {
"NN_step_name.param": {
// Step configuration here
}
},
"phases": {
"Phase Name": {
"description": "Phase description",
"start": 2
}
}
}
Follow these guidelines when creating or modifying configuration steps:
why and why_now fields are crucial for user understanding. Be clear and specific.blog_url and wiki_url are still valid.derived_parameters with expressions rather
than forcing fixed values.derived_parameters, use vehicle_components.get() and fc_parameters.get() with default values to prevent errors.old_filenames to maintain backward compatibility with existing projects.Each step in the configuration file can include the following fields. Start with the Required Fields for every step, then add Optional Fields as needed for advanced features.
why: Explains the purpose and importance of this configuration step.
Example:
"why": "The IMU drift is temperature dependent and can cause gyro and/or accel inconsistent errors"
why_now: Explains why this step needs to be performed at this specific point in the configuration sequence.
Example:
"why_now": "You need to cool down the FC to perform this calibration. It is easier to do before the FC is mounted in the vehicle"
blog_text: Short text describing the step for blog/documentation references.
Example:
"blog_text": "IMU (Inertial Measurement Unit) temperature calibration setup"
blog_url: URL to the blog or documentation page for this step.
https://)Example:
"blog_url": "https://ardupilot.github.io/MethodicConfigurator/TUNING_GUIDE_ArduCopter#41-setup-imu-temperature-calibration"
wiki_text: Short text describing the step for wiki references.
Example:
"wiki_text": "IMU Temperature Calibration"
wiki_url: URL to the ArduPilot wiki documentation for this step.
Example:
"wiki_url": "https://ardupilot.org/copter/docs/common-imutempcal.html"
external_tool_text: Name of an external tool needed for this step (can be empty string if not needed).
Examples:
"external_tool_text": "Mission Planner"
"external_tool_text": "autotune"
Example (no tool needed):
"external_tool_text": ""
external_tool_url: URL to download or access the external tool (can be empty string if not needed).
Example:
"external_tool_url": "https://ardupilot.org/copter/docs/configuring-hardware.html"
mandatory_text: Indicates whether the step is mandatory or optional with percentages.
^[0-9]{1,3}% mandatory \([0-9]{1,3}% optional\)$Examples:
"mandatory_text": "100% mandatory (0% optional)"
"mandatory_text": "80% mandatory (20% optional)"
"mandatory_text": "0% mandatory (100% optional)"
auto_changed_by: Name of the tool or process that automatically modifies these parameters.
Examples:
"auto_changed_by": "Mission Planner"
"auto_changed_by": "FlowCal"
"auto_changed_by": "" // Empty if no tool auto-changes these parameters
autoimport_nondefault_regexp: Array of regular expressions to match parameters for automatic import if they have non-default values.
Example:
"autoimport_nondefault_regexp": [
"BRD_HEAT_.*",
"INS_TCAL_OPTIONS",
"TCAL_ENABLED"
]
forced_parameters: Parameters that are set to fixed values without user modification.
New Value: The value to set (number or string)Change Reason: Explanation of why this value is forcedExample:
"forced_parameters": {
"INS_TCAL1_ENABLE": {
"New Value": 2,
"Change Reason": "Activates the temperature calibration for IMU 1 at the next start"
},
"LOG_DISARMED": {
"New Value": 1,
"Change Reason": "Gather data for offline IMU temperature calibration while the FC is disarmed"
}
}
derived_parameters: Parameters whose values are calculated based on other data (component specifications, expressions, etc.).
New Value: An expression or formula to calculate the value (as a string)Change Reason: Explanation of the derivationExample:
"derived_parameters": {
"INS_TCAL2_ENABLE": {
"New Value": "2",
"Change Reason": "Activates the temperature calibration for IMU 2 at the next start"
},
"BRD_HEAT_TARG": {
"New Value": "65",
"Change Reason": "Reasonable for most places on this planet"
},
"BATT_CAPACITY": {
"New Value": "vehicle_components['Battery']['Specifications']['Capacity mAh']",
"Change Reason": "Total battery capacity specified in the component editor"
},
"ATC_ACCEL_P_MAX": {
"New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))",
"Change Reason": "Derived from vehicle component editor propeller size"
}
}
vehicle_components['Battery']['Specifications']['Capacity mAh']fc_parameters['PARAM_NAME'] or fc_parameters.get('PARAM_NAME', default_value)if...else expressionsmax(), min(), round(), log(), conditional expressions with if...elsejump_possible: Allows users to skip ahead to another step under certain conditions.
Example:
"jump_possible": {
"04_board_orientation.param": "IMU temperature calibration reduces the number of possible 'Accel inconsistent' and 'Gyro inconsistent' errors.\nIMU temperature calibration is optional.\n\nDo you want to skip it?"
}
old_filenames: List of previous filenames for this step (for migration purposes).
Example:
"old_filenames": ["11_mp_setup_mandatory_hardware.param"]
rename_connection: Expression to dynamically rename a connection based on component data.
Example:
"rename_connection": "vehicle_components['RC Receiver']['FC Connection']['Type']"
download_file: Downloads a file from the internet to the local vehicle project directory.
source_url: URL to download from (must start with https://)dest_local: Local filename to save asExample:
"download_file": {
"source_url": "https://raw.githubusercontent.com/ArduPilot/ardupilot/Copter-4.5/libraries/AP_Scripting/applets/VTOL-quicktune.lua",
"dest_local": "VTOL-quicktune.lua"
}
upload_file: Uploads a file from the vehicle project directory to the flight controller.
source_local: Local filename to uploaddest_on_fc: Destination path on flight controller (must start with /APM/)Example:
"upload_file": {
"source_local": "VTOL-quicktune.lua",
"dest_on_fc": "/APM/Scripts/VTOL-quicktune.lua"
}
plugin: Loads a specialized plugin window for this step.
name: Plugin name ("motor_test" or "battery_monitor")placement: Where to display ("left" or "top")Examples:
"plugin": {
"name": "motor_test",
"placement": "left"
}
"plugin": {
"name": "battery_monitor",
"placement": "left"
}
instructions_popup: Displays a popup message when the user enters this step.
type: Dialog type ("info" or "warning")msg: The message to displayExamples:
"instructions_popup": {
"type": "info",
"msg": "This step is optional, only perform it if your vehicle is tiny, huge, or its motor outputs oscillate"
}
"instructions_popup": {
"type": "warning",
"msg": "Propeller size has a big influence on the vehicle dynamics. Ensure you have specified the correct propeller diameter in the component editor."
}
Phases group related steps into logical sections of the configuration workflow.
Phase fields:
description: Required. Describes the purpose of this phaseoptional: Optional boolean. Whether the entire phase is optionalstart: Optional integer. The starting step number of this phaseExample:
"phases": {
"IMU temperature calibration": {
"description": "Temperature calibration for accurate sensor readings",
"start": 2
},
"Basic mandatory configuration": {
"description": "Core vehicle configuration required for safe operation",
"start": 4
},
"Optical flow calibration": {
"description": "Optional advanced positioning",
"optional": true,
"start": 50
}
}
The vehicle-specific default configuration steps files can be used as example/inspiration:
The vehicle components file (vehicle_components.json) is a JSON file located in the vehicle-specific directory that stores comprehensive information
about all vehicle components and their configurations.
It serves as the central data source for component specifications, connections, and firmware versions used by the Methodic Configurator.
The vehicle components file is used to:
The vehicle components file follows a strict JSON schema defined in vehicle_components_schema.json.
It contains the following top-level properties:
{
"Format version": 1,
"Program version": "x.x.x",
"Configuration template": "Template Name",
"Components": {
"Flight Controller": { /* flight controller details */ },
"Frame": { /* frame details */ },
"Battery Monitor": { /* battery monitor details */ },
"Battery": { /* battery details */ },
"ESC": { /* ESC details */ },
"Motors": { /* motor details */ },
"Propellers": { /* propeller details */ },
"RC Receiver": { /* RC receiver details */ },
"RC Transmitter": { /* RC transmitter details */ },
"Telemetry": { /* telemetry module details */ },
"GNSS Receiver": { /* GNSS receiver details */ }
}
}
Each component can include the following properties:
Each component type may have specialized specifications:
Battery:
Motors:
Propellers:
Frame:
The vehicle components file can be edited in several ways:
The recommended way for most users:
vehicle_components.json fileFor advanced users who want to edit directly:
vehicle_components.json fileOne of the key features of the vehicle components file is the ability to derive flight controller parameters automatically based on component specifications.
In the configuration_steps_*.json file, you can reference component data:
"derived_parameters": {
"BATT_CAPACITY": {
"New Value": "vehicle_components['Battery']['Specifications']['Capacity mAh']",
"Change Reason": "Total battery capacity from component editor"
},
"ATC_ACCEL_P_MAX": {
"New Value": "max(10000,(round(-2.613267*vehicle_components['Propellers']['Specifications']['Diameter_inches']**3+343.39216*vehicle_components['Propellers']['Specifications']['Diameter_inches']**2-15083.7121*vehicle_components['Propellers']['Specifications']['Diameter_inches']+235771, -2)))",
"Change Reason": "Derived from propeller size specifications"
}
}
The application validates the vehicle components file to ensure:
If validation errors are found, the application displays clear error messages indicating which components or properties need correction.
The vehicle image file (vehicle.jpg) is an optional photograph or diagram stored in the vehicle-specific directory that provides
a visual reference of the vehicle during configuration.
.jpg extension)vehicle_components.json, .param files, and configuration steps)When creating or providing a vehicle image:
.jpg format with at most 400x400 pixelsvehicle_components.jsonvehicle.jpg for the application to locate it automaticallyIf vehicle.jpg is missing: