执行 python Tools/px_process_airframes.py -v -a ROMFS/px4fmu_common/init.d --markdown build/px4_sitl_default/docs/airframes.md
执行 python Tools/px_process_airframes.py -v -a ROMFS/px4fmu_common/init.d --xml build/px4_sitl_default/docs/airframes.xml
接下来, 继续分析一下 px_process_airframes.py 程序, 摘抄如下
# PX4 airframe config processor (main executable file)## This tool scans the PX4 ROMFS code for declarations of airframes## Currently supported formats are:# * XML for the parametric UI generator# * Markdown for the PX4 dev guide (https://github.com/PX4/Devguide)##from __future__ import print_function
import sys
import os
import argparse
from px4airframes import srcscanner, srcparser, xmlout, rcout, markdownout
defmain():# Parse command line arguments
parser = argparse.ArgumentParser(description="Process airframe documentation.")
parser.add_argument("-a","--airframes-path",
default="../ROMFS/px4fmu_common",
metavar="PATH",help="path to source files to scan for parameters")
parser.add_argument("-x","--xml",
nargs='?',
const="airframes.xml",
metavar="FILENAME",help="Create XML file"" (default FILENAME: airframes.xml)")
parser.add_argument("-m","--markdown",
nargs='?',
const="airframes.md",
metavar="FILENAME",help="Create Markdown file"" (default FILENAME: airframes.md)")
default_image_path ='../../assets/airframes/types'
parser.add_argument("-i","--image-path",
default=default_image_path,
metavar="IMAGEPATH",help="HTML image path for Markdown (containing the airframe svg files)"" (default IMAGEPATH: "+default_image_path+")")
parser.add_argument("-s","--start-script",
nargs='?',
const="rc.autostart",
metavar="FILENAME",help="Create start script file")
parser.add_argument("-b","--board",
nargs='?',
const="",
metavar="BOARD",help="Board to create airframes xml for")
parser.add_argument('-v','--verbose', action='store_true',help="verbose output")
args = parser.parse_args()# Check for valid commandifnot(args.xml)andnot(args.start_script)andnot args.markdown:print("Error: You need to specify at least one output method!\n")
parser.print_usage()
sys.exit(1)# Initialize source scanner and parser
scanner = srcscanner.SourceScanner()
parser = srcparser.SourceParser()# Scan directories, and parse the filesif args.verbose:print("Scanning source path "+ args.airframes_path)ifnot scanner.ScanDir(args.airframes_path, parser):
sys.exit(1)# We can't validate yet# if not parser.Validate():# sys.exit(1)
param_groups = parser.GetParamGroups()# Output to XML fileif args.xml:if args.verbose:print("Creating XML file "+ args.xml)
out = xmlout.XMLOutput(param_groups, args.board)
out.Save(args.xml)# Output to markdown fileif args.markdown:if args.verbose:print("Creating markdown file "+ args.markdown)
out = markdownout.MarkdownTablesOutput(param_groups, args.board, args.image_path)
out.Save(args.markdown)if args.start_script:if args.verbose:print("Creating start script "+ args.start_script)
out = rcout.RCOutput(param_groups, args.board)
out.Save(args.start_script)if(args.verbose):print("All done!")if __name__ =="__main__":
main()
可以看到这里只是一个入口函数, 解析了一些用户选项, 然后通过srcscanner 和 srcparser 解析了 -a 选项给定的路径里的.hil 文件或者无扩展名的文件进行解析,这里摘录一个ROMFS/px4fmu_common/init.d/airframes/1001_rc_quad_x.hil 文件如下
#!/bin/sh
#
# @name HIL Quadcopter X
#
# @type Simulation
# @class Copter
#
# @maintainer Lorenz Meier <lorenz@px4.io>
#
sh /etc/init.d/rc.mc_defaults
set MIXER quad_x
set PWM_OUT 1234
if [ $AUTOCNF = yes ]
then
param set COM_DISARM_LAND 5
fi
param set SYS_HITL 1