PX4启动脚本分析

2024-08-31 06:32
文章标签 分析 启动 脚本 px4

本文主要是介绍PX4启动脚本分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

启动脚本是一个神奇的东西,它能够识别出你对应的飞机类型,加载对应的混控器,选择对应的姿态、位置估计程序以及控制程序,初始化你需要的驱动程序。下面来分析下。

图片总结

启动代码的分析必定少不了这张图,不知道是谁整理出来的,非常棒!下面的分析会结合源代码rcS以及这张图进行。

图片可能有点大,可以保存图片到本地仔细研究。

代码分析

启动脚本位于Firmware\ROMFS\px4fmu_common\init.d\rcS。不同的版本启动脚本,不过不大部分都差不多

#
# Start CDC/ACM serial driver
# 启动串口驱动
sercon#
# Default to auto-start mode.
# 默认模式为自动启动
set MODE autostartset TUNE_ERR ML<<CP4CP4CP4CP4CP4
set LOG_FILE /fs/microsd/bootlog.txt#
# Try to mount the microSD card.
# 尝试挂载SD卡
# REBOOTWORK this needs to start after the flight control loop
if mount -t vfat /dev/mmcsd0 /fs/microsd
then# Start playing the startup tune# 挂载成功发出对应的声音tone_alarm start
else#挂载失败播放对应的音乐并重新挂载tone_alarm MBAGPif mkfatfs /dev/mmcsd0thenif mount -t vfat /dev/mmcsd0 /fs/microsdthenecho "INFO  [init] MicroSD card formatted"elseecho "ERROR [init] Format failed"tone_alarm MNBGset LOG_FILE /dev/nullfielseset LOG_FILE /dev/nullfi
fi

 首先启动的串口驱动,然后设置了一些变量,比启动模式为自启动模式,设置日志文件存放的位置。然后挂载SD卡。如果挂载成功则播放对应的提示音,如果挂载失败则播放失败的提示音并重新挂载。

为了看清整个架构这里截图。下面开始查看SD卡中是否有启动脚本,如果有的话则执行启动脚本,并设置模式为custom启动,这样63到996的代码就不会执行了。启动完成之后会清空一些变量,并通过mavlink发送一条消息。下面开始讲述自动启动的流程。

	## Start the ORB (first app to start)# 启动UORBuorb start## Load parameters# 加载参数set PARAM_FILE /fs/microsd/paramsif mtd startthenset PARAM_FILE /fs/mtd_paramsfiparam select $PARAM_FILEif param loadthenelse#加载失败了则reset参数if param resetthenfifi## Start system state indicator# 启动系统的LED等if rgbled startthenelseif blinkm startthenblinkm systemstatefifi# Currently unused, but might be useful down the road#if pca8574 start#then#fi

 这里完成uorb的启动、参数的加载、系统LED的启动等操作。

	# Set AUTOCNF flag to use it in AUTOSTART scripts# 该参数默认为0.为1的话表示复位除RC以外的参数if param compare SYS_AUTOCONFIG 1then# Wipe out params except RC*param reset_nostart RC*set AUTOCNF yeselseset AUTOCNF no## Release 1.4.0 transitional support:# set to old default if unconfigured.# this preserves the previous behaviour# 检查下BAT_N_CELLS,如果为0,设置成默认的3if param compare BAT_N_CELLS 0thenparam set BAT_N_CELLS 3fifi## Set default values# 设置一些默认值set HIL noset VEHICLE_TYPE noneset MIXER noneset MIXER_AUX noneset OUTPUT_MODE noneset PWM_OUT noneset PWM_RATE noneset PWM_DISARMED noneset PWM_MIN noneset PWM_MAX noneset PWM_AUX_OUT noneset PWM_AUX_RATE noneset PWM_ACHDIS noneset PWM_AUX_DISARMED noneset PWM_AUX_MIN noneset PWM_AUX_MAX noneset FAILSAFE_AUX noneset MK_MODE noneset FMU_MODE pwmset AUX_MODE pwmset MAVLINK_F defaultset MAVLINK_COMPANION_DEVICE /dev/ttyS2set EXIT_ON_END noset MAV_TYPE noneset FAILSAFE noneset USE_IO yes

 这里主要完成对一些参数的默认值设置。下面的分析简要的就略过好了,分析一些比较有用的代码。

	## Set parameters and env variables for selected AUTOSTART# if param compare SYS_AUTOSTART 0thenelse#执行自启动脚本#启动脚本里根据启动代号选择对应的程序,程序和ROMFS/px4fmu_common/init.d/目录下#的机型文件一样,这些程序会运行对应的脚本,比如rc.fw_default,rc.mc_default#同时选择对应的混控器sh /etc/init.d/rc.autostartfiunset MODE

这里执行rc.autostart脚本,启动脚本里根据启动代号选择对应的程序,程序和ROMFS/px4fmu_common/init.d/目录下的机型文件一样,比如4011_dji_f450、3033_wingwing等脚本,在这些脚本里面主要选择对应机型的混控器,设置PID的参数,设置PWM的通道数、DISARMED值等等,最主要的是会运行对应机型的,比如rc.fw_default(固定翼),rc.mc_default(旋翼)。在rc.fw_default脚本里面,会设置一些其他参数,比如飞机类型、返航高度、PWM的频率、占空比最小值、最大值等等。

	# Override parameters from user configuration file# 从用户配置文件中重写参数set FCONFIG /fs/microsd/etc/config.txtif [ -f $FCONFIG ]thenecho "Custom: $FCONFIG"sh $FCONFIGfiunset FCONFIG## If autoconfig parameter was set, reset it and save parameters# 如果autoconfig参数设置了的话,则重设参数if [ $AUTOCNF == yes ]thenparam set SYS_AUTOCONFIG 0fiunset AUTOCNFset IO_PRESENT no#USER_IO是飞控中的协处理器if [ $USE_IO == yes ]then## Check if PX4IO present and update firmware if needed# 检查PX4io是否启动并更新固件if [ -f /etc/extras/px4io-v2.bin ]thenset IO_FILE /etc/extras/px4io-v2.binelseset IO_FILE /etc/extras/px4io-v1.binfi#启动PX4io并进行CRC校验if px4io checkcrc ${IO_FILE}thenecho "[init] PX4IO CRC OK" >> $LOG_FILEset IO_PRESENT yeselse#校验不通过说明CPU的程序是第一次烧写或者有更新tone_alarm MLL32CP8MB#启动px4io,,基于安全考虑关掉PWMif px4io startthen# try to safe px4 io so motor outputs dont go crazyif px4io safety_onthen# success! no-opelse# px4io did not respond to the safety commandpx4io stopfifiif px4io forceupdate 14662 ${IO_FILE}thenusleep 500000if px4io checkcrc $IO_FILEthenecho "PX4IO CRC OK after updating" >> $LOG_FILEtone_alarm MLL8CDEset IO_PRESENT yeselseecho "PX4IO update failed" >> $LOG_FILEtone_alarm $TUNE_ERRfielseecho "PX4IO update failed" >> $LOG_FILEtone_alarm $TUNE_ERRfifiunset IO_FILEif [ $IO_PRESENT == no ]thenecho "PX4IO not found" >> $LOG_FILEtone_alarm $TUNE_ERRfifi

 这里会重设一些参数,同时启动协处理器,检查CPU的程序是否是第一次烧写或者有更新。

	# waypoint storage# REBOOTWORK this needs to start in parallel# 启动简易数据服务,为航迹规划、电子围栏提供支持if dataman startthenfi## Sensors System (start before Commander so Preflight checks are properly run)# 传感器系统启动sh /etc/init.d/rc.sensors# Needs to be this early for in-air-restarts# 启动commanderif [ $OUTPUT_MODE == hil ]thencommander start -hilelsecommander startfi## Start CPU load monitor# 启动CPU负载监视器load_mon start

这里的功能和注释上写的一样。主要的有传感器的启动,这里的启动脚本和 Firmware\ROMFS\px4fmu_common\init.d\ rc.sensors脚本一样,主要完成传感器的初始化,比如气压计、加速度计、陀螺仪等等。

	#看看是否有必要启动光流if ver hwcmp PX4FMU_V2then# Check for flow sensor - as it is a background task, launch it lastpx4flow start &fiif ver hwcmp PX4FMU_V4then# Check for flow sensor - as it is a background task, launch it lastpx4flow start &fiif ver hwcmp MINDPX_V2thenpx4flow start &fi# Start MAVLink# 启动USB转串口的mavlinkmavlink start -r 800000 -d /dev/ttyACM0 -m config -x## Logging# 启动日志if ver hwcmp PX4FMU_V1thenif sdlog2 start -r 30 -a -b 2 -tthenfielseif param compare SYS_LOGGER 0then# check if we should increase logging rate for ekf2 replay message loggingif param greater EKF2_REC_RPL 0thenif sdlog2 start -r 500 -e -b 18 -tthenfielseif sdlog2 start -r 100 -a -b 9 -tthenfifielseset LOGGER_ARGS ""if param compare SDLOG_MODE 1thenset LOGGER_ARGS "-e"fiif param compare SDLOG_MODE 2thenset LOGGER_ARGS "-f"fiif logger start -b 12 -t $LOGGER_ARGSthenfiunset LOGGER_ARGSfifi

然后启动光流、启动日志、启动mavlink

 

	## Fixed wing setup# 固定翼设置if [ $VEHICLE_TYPE == fw ]thenif [ $MIXER == none ]then# Set default mixer for fixed wing if not definedset MIXER AERTfiif [ $MAV_TYPE == none ]then# Use MAV_TYPE = 1 (fixed wing) if not definedset MAV_TYPE 1fiparam set MAV_TYPE $MAV_TYPE# Load mixer and configure outputs# 加载混控器以及配置PWM输出sh /etc/init.d/rc.interface# Start standard fixedwing apps# 启动固定翼需要的应用程序,包含姿态、位置估计,姿态、位置控制sh /etc/init.d/rc.fw_appsfi

接下来根据飞机是固定翼、旋翼、直升机等,选择性的执行代码,比如这里如果是固定翼,会执行rc.interface脚本,它主要完成混控器的 设置和PWM输出等功能。然后执行rc.fw_apps脚本,这里里面会启动固定翼对应的姿态、位置估计程序和控制程序,着陆检测等

同理其他飞机类型,比如旋翼、直升机的流程也差不多,最后启动通用的导航程序。到这里就大致的分析完了。

参考资料

1、shell脚本学习

2、CFZ明大佬的分析

3、虾米大佬的分析

这篇关于PX4启动脚本分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123152

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程