In the realm of ArduPilot scripting, efficient parameter management is crucial for optimal performance. LUA scripts offer a powerful avenue for accessing and modifying ArduPilot parameters, and in this guide, we'll delve into advanced techniques to streamline this process and boost script efficiency.
Optimizing Parameter Access
While LUA scripts inherently possess the capability to access and modify ArduPilot parameters, the conventional method of using name searches can be sluggish. To circumvent this, we recommend employing the Parameter user data method, significantly enhancing speed and efficiency.
local SCR_ENABLE = Parameter() -- Creates a parameter object
SCR_ENABLE:init('SCR_ENABLE') -- Retrieves the physical location in parameters memory
local parameter = SCR_ENABLE:get() -- Retrieves and assigns the parameter's value
By utilizing the Parameter object, you eliminate the need for time-consuming name searches, ensuring swift parameter retrieval.
Advanced Access Methods
ArduPilot scripting provides a range of methods for parameter access and modification. Understanding these methods is pivotal for efficient script execution.
param:get(name)
: Retrieves the value of a parameter.param:set(name, value)
: Sets the value of a parameter without storing it in non-volatile memory.param:set_and_save(name, value)
: Sets the value and saves it in non-volatile memory.param:set_default(name, value)
: Changes the default value of a parameter.
These methods, when applied judiciously, empower scripts to interact seamlessly with ArduPilot parameters.
Adding Parameters Dynamically
In addition to manipulating existing parameters, LUA scripts can dynamically introduce new parameters. These dynamically added parameters behave similarly to firmware parameters but with a nuanced distinction. Unlike firmware parameters, dynamically added ones persist through parameter resets and firmware changes.
Creating a Parameter Group
Harness the power of parameter groups to organize and manage script-specific parameters efficiently. The following example demonstrates the creation of a parameter group with individual parameters.
local PARAM_TABLE_KEY = 72
assert(param:add_table(PARAM_TABLE_KEY, "AERO_", 30), 'Could not add param table')
assert(param:add_param(PARAM_TABLE_KEY, 1, 'TRICK_ID', 0), 'Could not add param1')
assert(param:add_param(PARAM_TABLE_KEY, 2, 'RPT_COUNT', 0), 'Could not add param2')
This approach facilitates systematic parameter organization within scripts, enhancing overall script clarity and functionality.
Understanding Parameter Persistence
Parameters in ArduPilot are defined in firmware, each with a name, default value, and value type. During boot-up, the firmware initializes RAM variables for each parameter. Crucially, dynamically added parameters persist through resets, making them valuable assets for persistent script functionality.
Leveraging Parameter Objects
While LUA scripts can access any parameter by name, doing so inefficiently entails a time-consuming string name search. To expedite this process, leveraging Parameter objects is recommended.
local TRICK_ID = Parameter()
TRICK_ID:init('AERO_TRICK_ID')
local trick_id = TRICK_ID:get()
By initializing a Parameter object, direct access to the named parameter's location is achieved, optimizing performance.
Conclusion
Mastering advanced techniques for ArduPilot parameter management is essential for efficient LUA scripting. By optimizing parameter access, employing advanced methods, dynamically adding parameters, and understanding their persistence, scripts can achieve unparalleled efficiency and functionality. This guide serves as a comprehensive resource for elevating your ArduPilot scripting prowess.