PX4模块设计之十:PX4启动过程

本文详细介绍了PX4飞行控制器从硬件上电到应用初始化的启动过程,包括飞控硬件上电、硬件初始化、bootloader初始化、系统初始化和应用初始化等阶段。在每个阶段,都提到了可能遇到的问题及解决方法,如电源正负极接反、硬件故障检测、固件刷写等。此外,还提及了SD卡配置文件的作用和结构,以及如何自定义启动脚本和混控器配置。
摘要由CSDN通过智能技术生成

PX4飞控启动过程从逻辑的角度看,分为以下几个阶段:

  1. 飞控硬件上电
  2. 飞控硬件初始化
  3. 飞控bootloader初始化
  4. 飞控系统初始化
  5. 飞控应用初始化

通常来说,购买飞控板、外围传感器等,在正确组装和连线的情况下,需要最为关注的是飞控应用初始化阶段。作为购买的硬件,其他阶段只要正确按照使用手册操作,一般不会有太大的问题。

注1:硬件厂家对于开发的飞控板子调试,最重要的1、2、3、这几块的ICT测试,确保硬件质量OK。后面才是应用软件的移植(常说的porting)以及调优。

注2:这里我们作为使用者(非硬件制造厂家)对每个阶段做一个简单的介绍,并结合实际情况给出可能出现的问题,以及寻找答案的工种(硬件,软件)。

1. 【硬件】飞控硬件上电

这个阶段如果不注意,容易出现硬件损坏。最为重要的注意事项:

  1. 电源正负极不要接反;
  2. 电源输入/输出不要出现短路;

注:很多电脑的USB口子都有电源保护功能(即使短路也不会将板子和电脑烧坏,请先确认USB口是否有这个保护功能),可以先通过有保护功能的USB口进行上电检查,确保没有短路或者反接的问题。

后续只要新增硬件,都要进行相关检测,确保硬件上电瞬间冒烟损坏硬件,通常购买的硬件(电调、LED灯带、GPS、图传、摄像头等等)。

2. 【硬件】飞控硬件初始化

炸机或者出现冒烟等情况导致上电后无响应,就要注意硬件初始化到哪里(电池、电调、飞控、图传、接收机、传感器),那个部件出现什么问题了。这个时候尚未到bootloader阶段,最长使用的方法是全部断开链接,一段一段的检查。

电池
 └──> 电调
     ├──> 电机
     ├──> 图传
     └──> 飞控
	     ├──> 灯带
	     ├──> GPS
	     ├──> 摄像头
	     └──> 接收机

3. 【硬件+软件】飞控bootloader初始化

通常这个部分主要是为了刷固件,因为bootloader+system+application是对应的一整套(比如:PX4的bootloader和betaflight的固件就不配套)。

注:如果bootloader启动卡住,请先检查板子上按钮(通常按钮长按进入烧录固件模式,是否有断路或者短路的情况)

4. 【硬件+软件】飞控系统初始化

通常来说这块是指bootloader将控制权交给系统(nuttx或者其他OS),进入idle任务,并正确调用系统启动脚本。

注:bootloader和固件烧录正确的情况下,通常这块不会出问题。

__start
 └──> nx_start
     └──> nx_bringup
         └──> nx_create_initthread
             └──> nx_start_application
                 └──> nxtask_create //CONFIG_USER_ENTRYPOINT nsh_main --> platforms\nuttx\NuttX\apps\system\nsh\nsh_main.c main
	main  //nsh_main
     ├──> nsh_initialize // --> boardctl(BOARDIOC_INIT, 0) --> board_app_initialize
     └──> nsh_consolemain (nsh_main)
             └──> nsh_initscript
                 └──> nsh_script(vtbl, "init", NSH_INITPATH);

宏定义如下:

#  ifndef CONFIG_NSH_ROMFSMOUNTPT
#    define CONFIG_NSH_ROMFSMOUNTPT "/etc"
#  endif

#  ifndef CONFIG_NSH_INITSCRIPT
#    define CONFIG_NSH_INITSCRIPT "init.d/rcS"
#  endif

#  undef NSH_INITPATH
#  define NSH_INITPATH CONFIG_NSH_ROMFSMOUNTPT "/" CONFIG_NSH_INITSCRIPT

PX4板子启动平台公共部分:HRT、console_buffer、crypto、WorkQueue、uorb、log、mavlink_usb_check等。(这部分后续有时间继续深入。)

board_app_initialize
 ├──> px4_platform_init
 ├──> <board_dma_alloc_init()>  //configure the DMA allocator
 │   └──> syslog(LOG_ERR, "[boot] DMA alloc FAILED\n");
 ├──> hrt_call_every(&serial_dma_call, 1000, 1000, (hrt_callout)stm32_serial_dma_poll, NULL); //set up the serial DMA polling at 1ms intervals for received bytes that have not triggered a DMA event.
drv_led_start();
 ├──> led_off(LED_RED);
 ├──> led_on(LED_GREEN); // Indicate Power.
 ├──> led_off(LED_BLUE);
 ├──> <board_hardfault_init(2, true) != 0>
 │   └──> led_on(LED_RED);
 ├──> struct spi_dev_s *spi_dev = stm32_spibus_initialize(CONFIG_NSH_MMCSDSPIPORTNO);//Get the SPI port for the microSD slot
 ├──> <!spi_dev>
 │   ├──> syslog(LOG_ERR, "[boot] FAILED to initialize SPI port %d\n", CONFIG_NSH_MMCSDSPIPORTNO);
 │   └──> led_on(LED_BLUE);
 ├──> int result = mmcsd_spislotinitialize(CONFIG_NSH_MMCSDMINOR, CONFIG_NSH_MMCSDSLOTNO, spi_dev); //bind the SPI interface to the MMCSD driver
 ├──> <result != OK>
 │   ├──> led_on(LED_BLUE);
 │   └──> syslog(LOG_ERR, "[boot] FAILED to bind SPI port 1 to the MMCSD driver\n");
 ├──> <defined(FLASH_BASED_PARAMS)>
 │   ├──> result = parameter_flashfs_init(params_sector_map, NULL, 0);
 │   └──> <result != OK)>
 │       ├──> syslog(LOG_ERR, "[boot] FAILED to init params in FLASH %d\n", result);
 │       └──> led_on(LED_AMBER);
 └──> px4_platform_configure

5. 【软件】飞控应用初始化

PX4的应用脚本:

PX4的启动文件:

  • Nuttx系统:build/<target>/init.d/rcS
  • Posix系统:build/<target>/init.d-posix/rcS

比如:build/px4_sitl_default/etc/init.d/rcS 或者build/holybro_kakutef7_default/etc/init.d

6. 【配置】SD卡配置文件

SD卡文件布局及配置文件(配置文件可以自定义应用初始化流程)。

/
├── etc                     //Extra config (+ mixers)
│   ├── rc.txt              //If this file is present nothing in the system will be auto-started
│   ├── config.txt          //used to modify shell variables. It is loaded after the main system has been configured and before it is booted
│   ├── extras.txt          //used to start additional applications after the main system boot. Typically these would be payload controllers or similar optional custom components.
│   ├── mixers              //Mixers
│   └── NAME_OF_MIXER       //e.g. gimbal.aux.mix
├── log                     //Full flight logs
├── mission_log             //Reduced flight logs
├── fw                      //UAVCAN firmware
├── uavcan.db               //UAVCAN DB + logs
├── params                  //Parameters (if not in FRAM/FLASH)
├── dataman                 //Mission storage file
├── fault_<datetime>.txt    //Hardfault files
└── bootlog.txt             //Boot log file

6.1 extras 应用

e.g. etc/extras.txt

set +e
optional_app start      # Will not result in boot failure if optional_app is unknown or fails
set -e

mandatory_app start     # Will abort boot if mandatory_app is unknown or fails

6.2 mix自定义配置

e.g. gimbal.aux.mix with etc/config.txt

set MIXER_AUX gimbal
set PWM_AUX_OUT 1234
set PWM_AUX_DISARMED 1500
set PWM_AUX_MIN 1000
set PWM_AUX_MAX 2000
set PWM_AUX_RATE 50

7. 参考资料

【1】PX4开源软件框架简明简介
【2】PX4 System Startup
【3】PX4 Custom System Startup
【4】Nuttx nsh-start-up-script

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值