在px4启动文件RCS中,可以看到对autostart文件的读取


#
# Set parameters and env variables for selected AUTOSTART.
#
if ! param compare SYS_AUTOSTART 0
then. ${R}etc/init.d/rc.autostart
fi

在固件编译前,我们找不到这个文件,完成固件编译后,会出现在
/home/user/PX4-Autopilot/build/px4_fmu-v5_default/etc/init.d/rc.autostart文件中,打开该文件,能看到(内容过长只截取一段):

if param compare SYS_AUTOSTART 13002
then
set AIRFRAME 13002_firefly6
fi
if param compare SYS_AUTOSTART 13010
then
set AIRFRAME 13010_claire
fi
if param compare SYS_AUTOSTART 13012
then
set AIRFRAME 13012_convergence
fi
if param compare SYS_AUTOSTART 13030
then
set AIRFRAME 13030_generic_vtol_quad_tiltrotor
fi
if [ ${AIRFRAME} != none ]
then
. /etc/init.d/airframes/${AIRFRAME}//当选择不同机架,则会自动读取对应机架的文件
else
echo "ERROR  [init] No file matches SYS_AUTOSTART value found in : /etc/init.d/airframes"
param set SYS_AUTOSTART 0
tone_alarm ${TUNE_ERR}
fi
unset AIRFRAME

这里就有两种方式可以选择不同机架,1、在参数表修改SYS_AUTOSTART参数,该参数直接对应不同的机架文件;2、在机架表里自行寻找
我们可以打开4001 X型四轴,进行探究

. ${R}etc/init.d/rc.mc_defaults
set MIXER quad_x
set PWM_OUT 1234

. ${R}etc/init.d/rc.mc_defaults我们对该文件进行追踪

set VEHICLE_TYPE mc
param set-default IMU_GYRO_RATEMAX 800
param set-default NAV_ACC_RAD 2
param set-default RTL_RETURN_ALT 30
param set-default RTL_DESCEND_ALT 10
param set-default PWM_MAIN_MAX 1950
param set-default PWM_MAIN_MIN 1075
param set-default PWM_MAIN_RATE 400
param set-default GPS_UBX_DYNMODEL 6
set MIXER_AUX pass
set PWM_AUX_OUT 1234

也是对参数进行设置,其中set VEHICLE_TYPE mc这行代码很重要,在别的机架文件中也会用到,该参数代表了后续需要运行什么机架的应用程序。
返回到RCS文件中,我们能看到下面代码

 ## If autoconfig parameter was set, reset it and save parameters.#if [ $AUTOCNF = yes ]thenparam set SYS_AUTOCONFIG 0fi

当SYS_AUTOCONFIG设置过一遍以后,就不再运行。再往下能看到对不同飞行器启动文件的加载。

 ## Configure vehicle type specific parameters.# Note: rc.vehicle_setup is the entry point for rc.interface,#       rc.fw_apps, rc.mc_apps, rc.rover_apps, and rc.vtol_apps.#. ${R}etc/init.d/rc.vehicle_setup

然后在rc.vehicle_setup文件中,我们能看到

#!/bin/sh
#
# Vehicle configuration setup script.
#
# NOTE: Script variables are declared/initialized/unset in the rcS script.
##
# Fixed wing setup.
#
if [ $VEHICLE_TYPE = fw ]
thenif [ $MIXER = none ]then# Set default mixer for fixed wing if not defined.set MIXER AERTfiif [ $MAV_TYPE = none ]then# Set a default MAV_TYPE = 1 if not defined.set MAV_TYPE 1fi# Set the mav type parameter.param set MAV_TYPE ${MAV_TYPE}# Load mixer and configure outputs.. ${R}etc/init.d/rc.interface# Start standard fixedwing apps.. ${R}etc/init.d/rc.fw_apps
fi#
# Multicopter setup.
#
if [ $VEHICLE_TYPE = mc ]
thenif [ $MIXER = none ]thenecho "MC mixer undefined"fiif [ $MAV_TYPE = none ]then# Set a default MAV_TYPE = 2 if not defined.set MAV_TYPE 2# Use mixer to detect vehicle typeif [ $MIXER = coax ]thenset MAV_TYPE 3fiif [ $MIXER = hexa_x -o $MIXER = hexa_+ ]thenset MAV_TYPE 13fiif [ $MIXER = hexa_cox ]thenset MAV_TYPE 13fiif [ $MIXER = octo_x -o $MIXER = octo_+ ]thenset MAV_TYPE 14fiif [ $MIXER = octo_cox -o $MIXER = octo_cox_w ]thenset MAV_TYPE 14fiif [ $MIXER = tri_y_yaw- -o $MIXER = tri_y_yaw+ ]thenset MAV_TYPE 15fifi# Set the mav type parameter.param set MAV_TYPE ${MAV_TYPE}# Load mixer and configure outputs.. ${R}etc/init.d/rc.interface# Start standard multicopter apps.. ${R}etc/init.d/rc.mc_apps
fi

针对不同的飞行器,都会有对应的MAV_TYPE,一些常规的构型都会和MIXER进行对应。要不就需要写在机架中,类似13001,在其文件中我们能看到如下参数

param set-default VT_TYPE 0
set MAV_TYPE 19
set MIXER vtol_tailsitter_duo
set PWM_OUT 123456

在确定好MAV_TYPE参数后,将会进入rc.interface对混控文件进行更新

#!/bin/sh
#
# Script to configure control interfaces.
#
#
# NOTE: environment variable references:
#  If the dollar sign ('$') is followed by a left bracket ('{') then the
#  variable name is terminated with the right bracket character ('}').
#  Otherwise, the variable name goes to the end of the argument.
#set OUTPUT_CMD pwm_out
set MIXER_AUX_FILE none
set MIXER_EXTRA_FILE noneset OUTPUT_DEV none
set OUTPUT_AUX_DEV /dev/pwm_output1
set OUTPUT_EXTRA_DEV /dev/pwm_output0#
# If mount (gimbal) control is enabled and output mode is AUX, set the aux
# mixer to mount (override the airframe-specific MIXER_AUX setting).
#
if param greater -s MNT_MODE_IN -1
thenif param compare -s MNT_MODE_OUT 0thenset MIXER_AUX mountfi
fi#
# Set the default output mode if none was set.
#
if [ $OUTPUT_MODE = none ]
thenif [ $USE_IO = yes ]then# Enable IO output only if IO is present.if [ $IO_PRESENT = yes ]thenset OUTPUT_MODE ioif param greater -s DSHOT_CONFIG 0thenset OUTPUT_CMD dshotfifielseif param greater -s DSHOT_CONFIG 0thenset OUTPUT_MODE dshotset OUTPUT_CMD dshotelseset OUTPUT_MODE pwm_outfifi
fi#
# If OUTPUT_MODE = none then something is wrong with setup and we shouldn't try to enable output.
#
if [ $OUTPUT_MODE != none ]
thenif [ $OUTPUT_MODE = hil -o $OUTPUT_MODE = sim ]thenif ! pwm_out_sim start -m $OUTPUT_MODEthentune_control play errorfifiif [ $OUTPUT_MODE = uavcan_esc ]thenif param compare UAVCAN_ENABLE 0thenparam set UAVCAN_ENABLE 3fifiif [ $OUTPUT_MODE = io ]then. ${R}etc/init.d/rc.iofiif [ $OUTPUT_MODE = $OUTPUT_CMD -o $OUTPUT_MODE = io ]thenif ! $OUTPUT_CMD startthenecho "$OUTPUT_CMD start failed"tune_control play errorfifi## Start IO for RC input if needed.#if [ $IO_PRESENT = yes ]thenif [ $OUTPUT_MODE != io ]then. ${R}etc/init.d/rc.iofifi
fiif [ $MIXER != none -a $MIXER != skip ]
then## Load main mixer.#if [ $MIXER_AUX = none -a $USE_IO = yes ]thenset MIXER_AUX ${MIXER}fiif [ "$MIXER_FILE" = none ]thenif [ -f ${SDCARD_MIXERS_PATH}/${MIXER}.main.mix ]then# Use the mixer file from the SD-card if it exists.set MIXER_FILE ${SDCARD_MIXERS_PATH}/${MIXER}.main.mixelse# Try out the old convention, for backward compatibility.if [ -f ${SDCARD_MIXERS_PATH}/${MIXER}.mix ]thenset MIXER_FILE ${SDCARD_MIXERS_PATH}/${MIXER}.mixelseset MIXER_FILE /etc/mixers/${MIXER}.main.mixfififiset OUTPUT_DEV /dev/pwm_output0if [ $OUTPUT_MODE = uavcan_esc ]thenset OUTPUT_DEV /dev/uavcan/escfiif mixer load ${OUTPUT_DEV} ${MIXER_FILE}thenecho "INFO  [init] Mixer: ${MIXER_FILE} on ${OUTPUT_DEV}"elseecho "ERROR  [init] Failed loading mixer: ${MIXER_FILE}"tune_control play -t 18 # tune 18 = PROG_PX4IO_ERRfielseif [ $MIXER != skip ]thenecho "ERROR  [init] Mixer undefined"tune_control play -t 18 # tune 18 = PROG_PX4IO_ERRfi
fiif [ $MIXER_AUX != none ]
then## Load aux mixer.#if [ -f ${SDCARD_MIXERS_PATH}/${MIXER_AUX}.aux.mix ]thenset MIXER_AUX_FILE ${SDCARD_MIXERS_PATH}/${MIXER_AUX}.aux.mixelseif [ -f /etc/mixers/${MIXER_AUX}.aux.mix ]thenset MIXER_AUX_FILE /etc/mixers/${MIXER_AUX}.aux.mixfifiif [ $MIXER_AUX_FILE != none ]then# Append aux mixer to main device.if param greater SYS_HITL 0thenif mixer append ${OUTPUT_DEV} ${MIXER_AUX_FILE}thenecho "INFO  [init] Mixer: ${MIXER_AUX_FILE} appended to ${OUTPUT_DEV}"elseecho "ERROR  [init] Failed appending mixer: ${MIXER_AUX_FILE}"fifiif [ -e $OUTPUT_AUX_DEV -a $OUTPUT_MODE != hil ]thenif mixer load ${OUTPUT_AUX_DEV} ${MIXER_AUX_FILE}thenecho "INFO  [init] Mixer: ${MIXER_AUX_FILE} on ${OUTPUT_AUX_DEV}"elseecho "ERROR  [init] Failed loading mixer: ${MIXER_AUX_FILE}"fielseecho "INFO  [init] setting PWM_AUX_OUT none"set PWM_AUX_OUT nonefi# for DShot do not configure pwm valuesif [ $OUTPUT_CMD != dshot ]then# Set min / max for aux out and rates.if [ $PWM_AUX_OUT != none ]then# Set PWM_AUX output frequency.if [ $PWM_AUX_RATE != none ]thenpwm rate -c ${PWM_AUX_OUT} -r ${PWM_AUX_RATE} -d ${OUTPUT_AUX_DEV}fifififi
fiparam set PWM_AUX_OUT ${PWM_AUX_OUT}if [ $OUTPUT_MODE = pwm_out -o $OUTPUT_MODE = io ]
thenif [ $PWM_OUT != none ]then# Set PWM output frequency.if [ $PWM_MAIN_RATE != none ]thenpwm rate -c ${PWM_OUT} -r ${PWM_MAIN_RATE}fifi
fiparam set PWM_MAIN_OUT ${PWM_OUT}if [ $EXTRA_MIXER_MODE != none ]
thenif [ -f ${SDCARD_MIXERS_PATH}/${MIXER_EXTRA}.aux.mix ]then# Use the mixer file from the SD-card if it exists.set MIXER_EXTRA_FILE ${SDCARD_MIXERS_PATH}/${MIXER_EXTRA}.aux.mixelse# Try out the old convention, for backward compatibility.if [ -f ${SDCARD_MIXERS_PATH}/${MIXER_EXTRA}.mix ]thenset MIXER_EXTRA_FILE ${SDCARD_MIXERS_PATH}/${MIXER_EXTRA}.mixelseset MIXER_EXTRA_FILE /etc/mixers/${MIXER_EXTRA}.aux.mixfifiif mixer load ${OUTPUT_EXTRA_DEV} ${MIXER_EXTRA_FILE}thenecho "INFO  [init] Mixer: ${MIXER_EXTRA_FILE} on ${OUTPUT_EXTRA_DEV}"elseecho "ERROR  [init] Failed loading mixer: ${MIXER_EXTRA_FILE}"tune_control play -t 20fiif [ $PWM_EXTRA_OUT != none ]then# Set PWM output frequency.if [ $PWM_EXTRA_RATE != none ]thenpwm rate -c ${PWM_EXTRA_OUT} -r ${PWM_EXTRA_RATE}fifi
fiunset OUTPUT_CMD
unset MIXER_AUX_FILE
unset MIXER_EXTRA_FILEunset OUTPUT_DEV
unset OUTPUT_AUX_DEV
unset OUTPUT_EXTRA_DEV

在该文件中,将会对mixer文件进行读取,并进行更新,然后进行app应用的启动

px4机架和混控文件读取相关推荐

  1. px4直升机混控逻辑整理

    目录 一.直升机混控矩阵的介绍: 二.源代码解读 一.直升机混控矩阵的介绍: 直升机混控: 直升机混控将三个控制输入(roll,pitch,thrust)组合为四个输出(斜盘伺服系统和主电机ESC设置 ...

  2. 从XML文件读取数据绑定到列表控件2

    ComponentArt.Web.UI控件绑定所用XML,同时用于DropDownList的绑定,XML如下: <SiteMap>   <item Text="标题一&qu ...

  3. 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) ....

    可视化webpart基础开发--TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 作者:miragesky2049 原文地址:http://blog.csdn.net/mirages ...

  4. C#下使用第三方开源控件读取Excel文件的内容

    使用了两个开源控件读取Excel文件的内容,不需要安装Excel或Office,开发环境可能需要vs2008(2005没测试过) NPOI,       读取xls文件(Excel2003及之前的版本 ...

  5. .net精简框架集下的ini文件读取(C#)

    无论是.net框架集还是.net精简框架集都能非常完美的支持XML文件,并且微软也强烈建议用xml文件取代ini文件,但是在工控领域大部分的工程都是采用ini文件配置的系统信息的. 以前的隧道管理系统 ...

  6. c#大文件读取和写入数据库

    c#大文件读取和写入数据库(带进度条的源代码) 最近一个项目需要将大文件写入和读取到数据库,觉得可能很多人也需要相关得东西,所以就将代码帖出来 protected int state = 0; //表 ...

  7. Visual C++利用互斥量同步线程实现文件读取进度条

    忘了原文的位置了. 一.前言 文件读取进度条的实现可以有很多种方法,常用的是在读取文件的过程中隔一定时间向对话框发送消息以控制进度条的位置,但是这种方法很难确定隔多少时问发送一个消息,因为文件的大小是 ...

  8. 应用服务器Glassfish任意文件读取漏洞

    catalogue 1. 前言和技术背景 2. Glassfish安装配置 3. 漏洞利用 4. 漏洞缓解(修复) 1. 前言和技术背景 0x1: GlassFish是什么 GlassFish 是用于 ...

  9. Android开发笔记(二十五)assets目录下的文件读取

    AssetManager工具类 assets目录用于存放应用程序的资产文件,该目录下的文件不会被系统编译,所以无法通过R.*.*这种方式来访问.Android专门为assets目录提供了一个工具类As ...

最新文章

  1. Oracle 数据库名、实例名、服务名详解
  2. r语言删除csv中na行_r语言,csv数据,提取特定行
  3. docker-ce版本私有仓库搭建
  4. 最推荐的深度学习课程
  5. FreeMarker学习2
  6. Oracle 分区表(一)
  7. 使用Python的twisted和socket模块实现端口的负载分发
  8. linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
  9. 电脑系统重装后没有声音怎么办​
  10. crontab java 乱码_crontab 任务程序执行乱码的问题
  11. Win10更新提示0x8024402f错误的解决方法
  12. git cherry-pick 多个commit_Git使用爬坑记录
  13. 电厂供配电模拟实训系统QY-GPD03
  14. 拍牌系统改版html5,开启上海拍牌的日子,有点玩人的系统,一会快一会慢
  15. 出入库管理系统-精致版
  16. mysql中输入没反应_mysql数据库插入无反应问题
  17. 湘大校内好项目,现诚寻可靠的创业合伙人
  18. 商品表(spu)、规格表(sku)设计
  19. node.js+uniapp计算机毕业设计安卓移动LYQ电子商城APP(程序+APP+LW)
  20. 【STM32H7】第5章 RTX5操作系统移植(MDK AC6)

热门文章

  1. 有画快说番外篇-张聪-专题视频课程
  2. oracle系列软件,oracle软件系列下载地址
  3. 搜狗输入法--自定义短语配置文件
  4. FB、WhatsApp群发消息在2022年到底有多热门?
  5. SQL难学吗,有什么好的学习建议?(转载)
  6. 网页dom元素过多为什么会导致页面卡顿
  7. Word控件Spire.Doc 转换教程(十八): 将 RTF 转换为图像并重置图像分辨率
  8. html5 驾考 答题样式,考驾照答题软件
  9. Android APP一键退出的方法总结分析
  10. 刘强东隐退:卸任京东CEO