PX4二次开发——编译与启动脚本的修改

2023-05-16

PX4二次开发——编译和启动脚本的修改

一、在修改之前我们先了解一下目录结构

1.1 总目录结构

在这里插入图片描述

​ 上图,是源码目录

Src:目录是源码目录存放所有的源码,源码的查看都应该在这里。

Mavlink:是MAvlink的库目录,源码要调用这个库,如果我们要修改和添加MAVLINLK消息ID也是在这个目录下面。

NuttX:是NuttX的系统库,如果做二次开发,很少用到这个库。

Cmake:是存放的Cmake编辑脚本文件夹,其中Cmake/Configs是存放的不同硬件的编译脚本,nuttx_mindpx-v2_default是PIXHAWK这个硬件的编辑脚本,如果要添加驱动,添加系统功能的模块函数,要修改里面的编译选项,保证添加的模块文件,能够被编译到。

Romfs:是文件系统文件夹。里面存放的飞控系统的启动脚本,我们要修改启动脚本主要在这个文件夹里面。src/Romfs/px4fmu_common/init.d ,如rcS主要的启动脚本,还有其他的rc.XXX的脚本,传感器脚本,参数脚本等等,反正负责系统初始化的,如果自己定写了个功能模块要随系统启动那么就在这里添加启动。和linux系统的启动脚本非常相似。

Msg:是存放UORB消息主题的地方,如果要二次开发添加消息主题,就在这个文件夹里面添加修改。

1.2 子目录结构

Src这个目录比较重要,详细看看:

在这里插入图片描述

1.2.1 Drivers

Drivers是驱动文件夹,包括了所有的传感器驱动,三轴,地磁,加速度,超声波…

在这里插入图片描述

1.2.2 Examples

Examples是实例文件夹,入门PIXHAEK开发的一些很好的例子就在里面,其中最经典的是 px4_simple_app这个例子,要搞明白进程间通信UORB就是这个例程。

1.2.3 Modules

Modules是功能模块文件夹,什么位置估计,位置控制,指令控制…都在这个文件夹,也是二次开发主要要修改的文件夹。

在这里插入图片描述

1.2.4 Systemcmds

Systemcmds是系统指令文件夹,都是飞控的支持的命令的源码。比如top命令,reboot命令等等,这些命令都可以在终端操作。

总的来说,我们做应用进程,关注modules、drivers两个文件夹就好了。

二、再来谈谈编译脚本

​ 编译脚本的作用,是将这些人们写的程序编译成二进制文件供机器使用。

​ 这个PIXHAWK原生固件采用的Cmake编译脚本的书写方式,降低makefile的书写难度。我们只要掌握几个修改脚本就可以掌握系统的编译。

2.1 总的模块编译脚本的修改

​ 由前面我们所学习想要编译需要的指令(make px4_fmu-v3_default)知道,总的编译目录在Firmware->boards->px4->fmu-v3->deault.cmake当中,如下图

在这里插入图片描述

​ 这个文件夹是飞控硬件选择文件夹,根据不同的硬件,在刷固件时选择不同的版本编译后下载。那么我们需要编译什么模块,填写好正确的模块路径,系统就会编译里面的源码


# FMUv3 is FMUv2 with access to the full 2MB flash

px4_add_board(
	PLATFORM nuttx
	VENDOR px4
	MODEL fmu-v3
	LABEL default
	TOOLCHAIN arm-none-eabi
	ARCHITECTURE cortex-m4
	ROMFSROOT px4fmu_common
	IO px4_io-v2_default
	TESTING
	UAVCAN_INTERFACES 2
	SERIAL_PORTS
		GPS1:/dev/ttyS3
		TEL1:/dev/ttyS1
		TEL2:/dev/ttyS2
		TEL4:/dev/ttyS6
	DRIVERS
		adc/board_adc
		adc/ads1115
		barometer # all available barometer drivers
		batt_smbus
		camera_capture
		camera_trigger
		differential_pressure # all available differential pressure drivers
		distance_sensor # all available distance sensor drivers
		dshot
		gps
		#heater
		#imu # all available imu drivers
		imu/adis16448
		imu/adis16477
		imu/adis16497
		imu/l3gd20
		imu/lsm303d
		imu/invensense/icm20608g
		imu/invensense/icm20948
		imu/invensense/mpu6000
		imu/invensense/mpu9250
		irlock
		lights/blinkm
		lights/rgbled
		lights/rgbled_ncp5623c
		magnetometer # all available magnetometer drivers
		mkblctrl
		#optical_flow # all available optical flow drivers
		optical_flow/px4flow
		#osd
		pca9685
		pca9685_pwm_out
		#power_monitor/ina226
		#protocol_splitter
		pwm_input
		pwm_out_sim
		pwm_out
		px4io
		roboclaw
		tap_esc
		telemetry # all available telemetry drivers
		test_ppm
		tone_alarm
		uavcan
	MODULES
		airspeed_selector
		attitude_estimator_q
		battery_status
		camera_feedback
		commander
		dataman
		ekf2
		esc_battery
		events
		fw_att_control
		fw_pos_control_l1
		land_detector
		landing_target_estimator
		load_mon
		local_position_estimator
		logger
		mavlink
		mc_att_control
		mc_hover_thrust_estimator
		mc_pos_control
		mc_rate_control
		#micrortps_bridge
		navigator
		rc_update
		rover_pos_control
		sensors
		sih
		temperature_compensation
		vmount
		vtol_att_control
	SYSTEMCMDS
		bl_update
		#dmesg
		dumpfile
		esc_calib
		gpio
		hardfault_log
		i2cdetect
		led_control
		mixer
		motor_ramp
		motor_test
		mtd
		nshterm
		param
		perf
		pwm
		reboot
		reflect
		sd_bench
		system_time
		tests # tests and test runner
		top
		topic_listener
		tune_control
		usb_connected
		ver
		work_queue
	EXAMPLES
		fixedwing_control # Tutorial code from https://px4.io/dev/example_fixedwing_control
		hello
		hwtest # Hardware test
		#matlab_csv_serial
		px4_mavlink_debug # Tutorial code from http://dev.px4.io/en/debug/debug_values.html
		px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html
		rover_steering_control # Rover example app
		uuv_example_app
		work_item
	)

​ 我们只需要在MODULES里面加入我们写的一个应用程序所在的文件夹即可,这个编译就会跳转到该文件夹下,在该文件夹其实还是有个Cmakelist需要编写,是实现具体app编译的配置。接下来就看看子模块Cmakelist.txt的编写。

2.2 子模块的Cmakelsit的修改

​ 前面配置好的总的编译模块添加了,编译路径之后,实际上编译器是去寻找子模块下面的CmakeList.txt去进一步编译

​ 进入我们写应用的文件下,即src->module->airspeed_selectors当中,这里以这个模块为例。在这里插入图片描述

​ 下面是里面的代码,源就就是应用程序,剩下那个是依赖

############################################################################
#
#   Copyright (c) 2018 PX4 Development Team. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
# 3. Neither the name PX4 nor the names of its contributors may be
#    used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
px4_add_module(
	MODULE modules__airspeed_selector
	MAIN airspeed_selector
	SRCS
		airspeed_selector_main.cpp
	DEPENDS
		git_ecl
		ecl_airdata
		AirspeedValidator
)

​ 以上就是如何将一个自己写的程序,正确填写到编译路径当中。那么如何开始自己写的模块呢,那就要在启动脚本中添加,接下来就是看看启动脚本如何启动我们自己编写的模块。

三、启动脚本修改

​ 上篇文章我们已经说过启动脚本是如何运行的,如果我们只是写一个固定翼程序,那么我只需在rc.fw_apps中写即可,其他的类推。主启动脚本,在我们在地面站选好机型后,会自动跳入到该子启动脚本把我们写的app打开。

在这里插入图片描述

四、总结

​ 综上,其实在我们写完一个应用程序,想让它跑起来,无非就是两个问题,一是否编译了,二是否跑起来了。编译问题,我们只需知道改一个总编译,它会跳转到子编译当中。启动问题,就进入启动脚本,看你使用的载具模型,在其中start即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4二次开发——编译与启动脚本的修改 的相关文章

随机推荐

  • IMX6ULL学习笔记(17)——工程管理

    一 简介 之前我们把所有源码文件放在一个文件夹下 这样做存在两个主要问题 xff0c 第一 xff0c 代码存放混乱不易阅读 第二 xff0c 程序可移植性差 如果工程源文件达到几十 甚至数百个的时候 xff0c 这样一股脑全部放到根目录下
  • [通俗易懂]无线通信读书笔记05(统计多径信道模型)

    通俗易懂 无线通信读书笔记05 xff08 统计多径信道模型 xff09 基本概念通用的时变信道的冲激响应模型窄带衰落模型 本文讨论一类能够描述信道中多径相互叠加产生干涉情形的衰落模型 xff0c 虽然在先前介绍的射线跟踪模型中 xff08
  • IMX6ULL学习笔记(18)——GPIO中断

    一 中断简介 相比 STM32 的 NVIC xff0c IMX6ULL 的中断控制系统更复杂 xff0c 它的中断管理器使用的是 GIC V2 xff0c GIC V2 的实现方式与我们熟知的 NVIC 差别较大 1 1 GIC GIC
  • 解决方法:编译IMX6ULL裸机中断程序提示错误selected processor does not support `cpsid i‘ in ARM mode

    一 问题 编译IMX6ULL野火裸机中断程序出现错误 xff1a arm span class token operator span none span class token operator span eabi span class
  • IMX6ULL学习笔记(19)——时钟系统

    一 时钟系统简介 I MX6U 的系统主频为 528MHz xff0c 有些型号可以跑到 696MHz xff0c 但是默认情况下内部 boot rom 会将 I MX6U 的主频设置为 396MHz 我们在使用 I MX6U 的时候肯定是
  • IMX6ULL学习笔记(20)——UART串口使用

    一 UART简介 i MX6U 芯片具有多达 8 个 UART 外设用于串口通讯 xff0c UART 是在 USART 基础上裁剪掉了同步通信功能 xff0c 只支持异步通信 简单区分同步和异步就是看通信时需不需要对外提供时钟输出 xff
  • 解决方法:编译IMX6ULL裸机串口程序提示错误arm-none-eabi-ld: cannot find -lgcc: 没有那个文件或目录

    一 问题 编译IMX6ULL野火裸机串口程序出现错误 xff1a make span class token punctuation span span class token number 1 span span class token
  • IMX6ULL学习笔记(21)——MMDC接口使用(DDR3测试)

    一 MMDC简介 MMDC 接口与 STM32 的 FSMC 接口类似 xff0c 只不过 MMDC 接口专用于外接 DDR xff0c 并且 MMDC 外部引脚不复用 MMDC 是一个多模的 DDR 控制器 xff0c 可以连接 16 位
  • IMX6ULL学习笔记(22)——eLCDIF接口使用(TFT-LCD屏显示)

    一 TFT LCD简介 TFT LCD xff08 Thin Film Transistor Liquid Crystal Display xff09 即薄膜晶体管液晶显示器 TFT LCD 与无源 TN LCD STN LCD 的简单矩阵
  • STM32 ROS控制器底层代码讲解

    本文主要对控制器底层代码的整天架构进行讲解 控制器由两部分组成一部分是BootLoader 另一部分是APP xff1b BootLoader主要用于固件升级 xff0c APP则作为应用程序 BootLoader的地址为 0x800000
  • STM32 使用microros与ROS2通信

    本文主要介绍如何在STM32中使用microros与ROS2进行通信 xff0c 在ROS1中标准的库是rosserial 在ROS2中则是microros 目前网上的资料也有一部分了 xff0c 但是都没有提供完整可验证的demo xff
  • 用ROS自带的gazebo仿真器搭建自己的环境

    近期需要搭建一个室内仿真环境 xff0c 用于实验调试 xff0c 所以想把相关技巧记录下来 xff0c 如有错误 xff0c 还请批评指正 xff0c 谢谢 参考网页 xff1a 使用gazebo中的building editor创建一个
  • docker如何删除容器里的文件

    问题起因 为什么会有这个问题呢 xff1f 起因是要从一个es搜索引擎从另一个es搜索引擎中拷贝数据 图方便没用软件导致重启es的时候拷贝的数据 xff0c 引发了es的启动异常 解决方案 docker inspect docker ins
  • 从程序中学习EKF-SLAM(一)

    在一次课程的结课作业上 xff0c 作业要求复写一个EKF SLAM系统 xff0c 我从中学到了好多知识 作为一个典型轻量级slam系统 xff0c 这个小项目应该特别适合于slam系统入门 xff0c 可以了解到经典卡尔曼滤波器在sla
  • numpy和tensorflow的一些用法与联系

    tensorflow和numpy值的差别 在numpy中生成的np array可以直接在 debug中看到产生的具体数字 xff1b 而在tensorflow中却只是一个tensor类型 xff0c 需要调用tf Session run X
  • ubuntu18.04 安装librealsense并验证

    安装环境 OS Ubuntu 18 04 bionic Kernel x86 64 Linux 4 15 0 20 generic 安装Realsense SDK 参考https github com IntelRealSense libr
  • YOLOV3只显示一类检测结果,并输出位置信息

    YOLOV3批量检测图片 xff0c 只显示一类检测结果 xff0c 并输出位置信息保存到txt 第一步 xff1a 首先修改YOLOV3中src imge c中的void draw detections函数 这里的修改实现了保存检测类别的
  • 搭建PX4开发环境

    搭建PX4开发环境 官方网站PX4 IO xff0c 我使用的是ubuntu20 04 一 官方环境搭建 1 下载PX4固件 span class token function git span clone https github com
  • PX4二次开发——程序运行过程

    PX4二次开发 程序运行过程 一 写在前面 px4固件程序与最开始我们所学习的对单片机外设开发不同 xff0c 是因为飞行器控制系统是一个复杂的系统 xff0c 要求实时性好 xff0c 完成复杂的控制任务 xff0c 简简单单的按照之前所
  • PX4二次开发——编译与启动脚本的修改

    PX4二次开发 编译和启动脚本的修改 一 在修改之前我们先了解一下目录结构 1 1 总目录结构 上图 xff0c 是源码目录 Src xff1a 目录是源码目录存放所有的源码 xff0c 源码的查看都应该在这里 Mavlink xff1a