ardupilot/Tools/scripts/convert_param_scale.py

56 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
'''
tool to convert parameter names and scales, useful for conversion for cm -> m and cdeg -> deg
this looks for files called *.param or *.parm
example:
Tools/scripts/convert_param_scale.py --scale 0.1 TRIM_ARSPD_CM AIRSPEED_CRUISE
'''
import os
import sys
from argparse import ArgumentParser
parser = ArgumentParser(description="parameter conversion tool")
parser.add_argument("--scale", default=1.0, type=float, help="scale factor")
parser.add_argument("--directory", default=".", help="directory to search")
parser.add_argument("old_name", default=None, help="old parameter name")
parser.add_argument("new_name", default=None, help="new parameter name")
args = parser.parse_args()
def process_file(fname):
needs_write = False
with open(fname, "r") as f:
lines = f.readlines()
for i in range(len(lines)):
line = lines[i]
if line.startswith(args.old_name):
a = line.split()
if len(a) == 2:
sep = ' '
else:
a = line.split(',')
if len(a) == 2:
sep = ','
else:
continue
v = float(a[1])
v *= args.scale
lines[i] = "%s%s%.2f\n" % (args.new_name, sep, v)
needs_write = True
if not needs_write:
return
print("Updating %s" % fname)
with open(fname, "w") as f:
for line in lines:
f.write(line)
for root, dirs, files in os.walk(args.directory):
for file in files:
if file.endswith(".parm") or file.endswith(".param"):
process_file(os.path.join(root, file))