mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-21 16:18:29 -04:00
SITL: new sitl-on-hw.py script
this makes it easier to build SITL on hardware for a wide range of frames
This commit is contained in:
parent
fdd0d0ae53
commit
87a220991b
91
libraries/SITL/examples/on-hardware/sitl-on-hw.py
Executable file
91
libraries/SITL/examples/on-hardware/sitl-on-hw.py
Executable file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
'''
|
||||
script to build a firmware for SITL-on-hardware
|
||||
see https://ardupilot.org/dev/docs/sim-on-hardware.html
|
||||
'''
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
from argparse import ArgumentParser
|
||||
parser = ArgumentParser("SITL on hardware builder")
|
||||
parser.add_argument("--board", default=None, help="board type")
|
||||
parser.add_argument("--vehicle", default=None, help="vehicle type")
|
||||
parser.add_argument("--frame", default=None, help="frame type")
|
||||
parser.add_argument("--simclass", default=None, help="simulation class")
|
||||
parser.add_argument("--defaults", default=None, help="extra defaults file")
|
||||
parser.add_argument("--upload", action='store_true', default=False, help="upload firmware")
|
||||
|
||||
args, unknown_args = parser.parse_known_args()
|
||||
|
||||
extra_hwdef = None
|
||||
|
||||
def run_program(cmd_list):
|
||||
'''run a program from a command list'''
|
||||
print("Running (%s)" % " ".join(cmd_list))
|
||||
retcode = subprocess.call(cmd_list)
|
||||
if retcode != 0:
|
||||
print("FAILED: %s" % (' '.join(cmd_list)))
|
||||
global extra_hwdef
|
||||
if extra_hwdef is not None:
|
||||
extra_hwdef.close()
|
||||
os.unlink(extra_hwdef.name)
|
||||
sys.exit(1)
|
||||
|
||||
extra_hwdef = tempfile.NamedTemporaryFile(mode='w')
|
||||
extra_defaults = tempfile.NamedTemporaryFile(mode='w')
|
||||
|
||||
def hwdef_write(s):
|
||||
'''write to the hwdef temp file'''
|
||||
extra_hwdef.write(s)
|
||||
|
||||
def defaults_write(s):
|
||||
'''write to the hwdef temp file'''
|
||||
extra_defaults.write(s)
|
||||
|
||||
def sohw_path(fname):
|
||||
'''get path to a file in on-hardware directory'''
|
||||
return os.path.join(os.path.dirname(os.path.realpath(__file__)), fname)
|
||||
|
||||
if args.vehicle == "plane":
|
||||
extra_hwdef_base = "plane-extra-hwdef-sitl-on-hw.dat"
|
||||
defaults_base = "plane-default.param"
|
||||
else:
|
||||
extra_hwdef_base = "extra-hwdef-sitl-on-hw.dat"
|
||||
defaults_base = "default.param"
|
||||
|
||||
# add base hwdef to extra_hwdef
|
||||
hwdef_write(open(sohw_path(extra_hwdef_base), "r").read() + "\n")
|
||||
|
||||
# add base defaults to extra_defaults
|
||||
defaults_write(open(sohw_path(defaults_base), "r").read() + "\n")
|
||||
|
||||
if args.defaults:
|
||||
defaults_write(open(args.defaults,"r").read() + "\n")
|
||||
|
||||
if args.simclass:
|
||||
hwdef_write("define AP_SIM_FRAME_CLASS %s\n" % args.simclass)
|
||||
if args.frame:
|
||||
hwdef_write('define AP_SIM_FRAME_STRING "%s"\n' % args.frame)
|
||||
|
||||
extra_hwdef.flush()
|
||||
extra_defaults.flush()
|
||||
|
||||
configure_args = ["./waf", "configure",
|
||||
"--board=%s" % args.board,
|
||||
"--extra-hwdef=%s" % extra_hwdef.name,
|
||||
"--default-param=%s" % extra_defaults.name]
|
||||
configure_args.extend(unknown_args)
|
||||
run_program(configure_args)
|
||||
|
||||
build_cmd = ["./waf", args.vehicle]
|
||||
if args.upload:
|
||||
build_cmd.append("--upload")
|
||||
|
||||
run_program(build_cmd)
|
||||
|
||||
# cleanup
|
||||
extra_hwdef.close()
|
||||
|
Loading…
Reference in New Issue
Block a user