Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ardupilot
GitHub Repository: Ardupilot/ardupilot
Path: blob/master/Tools/scripts/convert_param_scale.py
9317 views
1
#!/usr/bin/env python3
2
3
# flake8: noqa
4
5
'''
6
tool to convert parameter names and scales, useful for conversion for cm -> m and cdeg -> deg
7
8
this looks for files called *.param or *.parm
9
10
example:
11
Tools/scripts/convert_param_scale.py --scale 0.1 TRIM_ARSPD_CM AIRSPEED_CRUISE
12
'''
13
14
import os
15
import sys
16
17
from argparse import ArgumentParser
18
19
parser = ArgumentParser(description="parameter conversion tool")
20
21
parser.add_argument("--scale", default=1.0, type=float, help="scale factor")
22
parser.add_argument("--directory", default=".", help="directory to search")
23
parser.add_argument("old_name", default=None, help="old parameter name")
24
parser.add_argument("new_name", default=None, help="new parameter name")
25
26
args = parser.parse_args()
27
28
def process_file(fname):
29
needs_write = False
30
with open(fname, "r") as f:
31
lines = f.readlines()
32
for i in range(len(lines)):
33
line = lines[i]
34
if line.startswith(args.old_name):
35
a = line.split()
36
if len(a) == 2:
37
sep = ' '
38
else:
39
a = line.split(',')
40
if len(a) == 2:
41
sep = ','
42
else:
43
continue
44
v = float(a[1])
45
v *= args.scale
46
lines[i] = "%s%s%.2f\n" % (args.new_name, sep, v)
47
needs_write = True
48
if not needs_write:
49
return
50
print("Updating %s" % fname)
51
with open(fname, "w") as f:
52
for line in lines:
53
f.write(line)
54
55
for root, dirs, files in os.walk(args.directory):
56
for file in files:
57
if file.endswith(".parm") or file.endswith(".param"):
58
process_file(os.path.join(root, file))
59
60