对PX4官网的Github文件进行解析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
1.ci:
这个目录通常包含与持续集成(CI)相关的配置文件,例如Jenkins、Travis CI或GitHub Actions的配置。它负责自动化编译、测试、部署等任务。
2.clusterfuzzlite:
用于与ClusterFuzzLite相关的配置文件,这是一种自动化模糊测试框架,帮助发现代码中的安全漏洞。
3.devcontainer:
包含VSCode开发容器的配置,用于在隔离的容器环境中开发PX4代码。方便开发人员在一致的开发环境中工作。
4.github:
包含GitHub的配置文件,如GitHub Actions、Issue模板和Pull Request模板,用于自动化流程和优化项目管理。
5.vscode:
包含Visual Studio Code的配置文件,定义了编译、调试和代码检查的工作流,以便开发人员在VSCode中更方便地开发PX4代码。
6.Documentation:
包含项目的文档文件,帮助开发者和用户了解如何使用、配置和开发PX4飞控系统。通常包括用户指南、API文档、教程等。
7.ROMFS:
ROMFS是只读文件系统,通常用于存储PX4固件中的静态数据,如参数文件、启动脚本等。
8.Tools:
这个目录包含各种开发工具和脚本,常用于构建、测试、仿真和部署PX4代码。比如,可能包含用于自动化工具链配置的脚本。
9.boards:
包含与各种硬件平台(如飞控板、传感器等)相关的定义和配置文件。每种硬件的特定启动配置和硬件抽象层都位于该目录中。
10.cmake:
包含CMake构建系统的配置文件,用于定义如何编译PX4代码。CMake是一个跨平台的构建工具,管理依赖项和生成编译文件。
11.integrationtests/python_src/px4_it:
包含集成测试相关的Python脚本,主要用于自动化测试PX4的不同模块和功能,以确保系统的稳定性和正确性。
12.launch:
包含与ROS或仿真环境中的启动文件相关的配置,通常是用于启动PX4在仿真器或真实硬件上的配置文件。
13.msg:
包含与PX4通信协议(如MAVLink)相关的消息定义文件,用于定义飞控系统与外部系统(如地面站、传感器等)之间的消息格式。
14.platforms:
包含与不同硬件平台相关的底层代码和配置,如NuttX的初始化文件、硬件抽象层等。
15.posix-configs:
包含POSIX系统(如Linux)上的配置文件,通常用于定义在仿真环境中运行PX4的配置。
//16.src:
源代码目录,包含PX4的主要功能模块的实现代码,如飞行控制算法、传感器处理、姿态估计等。
17.srv:
服务定义文件,通常用于ROS系统中的服务(services),用于系统内不同节点之间的通信和请求/响应模式的交互。
18.test:
包含测试代码和测试框架,用于对PX4功能进行单元测试和集成测试,确保各个模块功能的正确性和健壮性。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
19.test_data:
包含测试所需的测试数据或测试脚本,用于集成测试和回归测试,以验证代码改动是否影响系统行为。
20.validation:
包含验证代码、数据或测试的文件,确保PX4的各个部分在特定条件下的表现符合预期。
21.clang-tidy:
Clang-Tidy是一个C++代码分析工具,这个文件包含其配置,用于代码的静态分析,发现潜在的错误和优化点。
22.editorconfig:
EditorConfig配置文件,用于定义代码格式的规则,如缩进、换行符、字符编码等,确保不同开发者之间代码风格的一致性。
23.gitattributes、.gitignore:
用于Git的配置文件。.gitattributes用于定义文件的特定处理方式,.gitignore则列出需要被Git忽略的文件和目录。
24.CMakeLists.txt:
这是CMake项目的核心配置文件,定义了如何编译整个PX4项目,包括源文件的路径、依赖项、编译选项等。
25.CODE_OF_CONDUCT.md:
项目的行为准则,规定了开发者在贡献代码和参与社区时需要遵守的行为规范。
26.CONTRIBUTING.md:
为开发者提供的贡献指南,解释了如何参与项目开发、提交代码和报告问题等流程。
27.CTestConfig.cmake:
CMake的测试配置文件,定义了如何运行项目的测试,并收集测试结果。
28.Jenkinsfile:
Jenkins持续集成系统的配置文件,定义了在Jenkins上自动化构建和测试的流水线。
29.Kconfig:
用于配置系统的文件,通常用于嵌入式系统中,定义了各个硬件模块或软件模块的配置选项。
30.LICENSE:
项目的开源许可证文件,说明了PX4的使用和分发权限。
31.Makefile:
传统的编译配置文件,定义了如何使用Make工具构建项目。对于不使用CMake的部分或平台,Makefile提供了另一种编译方式。
32.README.md:
项目的概述和基本介绍,通常包括如何编译、安装和使用PX4飞控系统的基本信息。
33.SECURITY.md:
有关安全漏洞报告和处理流程的文档,指导开发者如何报告和解决项目中的安全问题。
34.package.xml:
通常用于ROS包,定义了包的元数据,如依赖项、版本号和维护者信息。
|
SRC文件解析
1
2
3
4
5
6
7
8
9
10
11
12
13
|
1. src/modules/mc_att_control:
这个目录包含与多旋翼无人机姿态控制相关的代码。姿态控制的核心就是通过PID控制器来调节无人机的滚转、俯仰和偏航角的稳定性。
mc_att_control_main.cpp 是姿态控制的主要代码文件。
2. src/modules/mc_pos_control:
这个目录包含与多旋翼无人机位置控制相关的代码。PID控制器在此负责无人机的三维位置和高度控制。
mc_pos_control_main.cpp 是位置控制的核心实现文件,包含位置控制的PID逻辑。
3. src/lib/controllib:
这个目录下包含PX4的控制库,其中定义了PID控制器的通用实现。这里的文件用于多个模块的控制需求。
pid.cpp 是PID控制器的核心实现,定义了如何计算误差、比例项、积分项和微分项。
4. src/modules/fw_att_control 和 src/modules/fw_pos_control:
如果你关注的是固定翼无人机的PID控制,可以查看这两个目录。它们分别负责固定翼无人机的姿态控制和位置控制。
5. 参数文件 (ROMFS):
PID控制器的参数通常在参数文件中定义,可以通过修改这些参数调整控制器的性能。可以在 ROMFS/px4fmu_common/init.d 目录中找到默认的参数文件,里面会定义PID控制器的增益值(如P、I、D系数)。
|
NuttxRTOS
这应该是个很复杂的单片机实时系统。
MAVLink协议
QGC地面站会通过MAVLink协议将QGC针对飞机的配置参数发送给飞控系统,而飞控系统则将这些参数存储在存储设备中。
暂时用不太上。
QGC地面站试飞
在QGC地面站对PX4飞控进行调试试飞,开始时抖动剧烈,随着将速度环PID参数特别是D项降低后抖动变小。但是只能在高度模式稳定飞行,在自稳以及特技等模式均不稳定。
后续准备加入GPS自动飞行来测试稳定性。
高度(Altitude)模式试飞视频
QGC地面站通信无线数传配置
数传模块使用了LQ的无线串口模块。将SH1.25-6Pin接口与XH2.54杜邦线进行连接后,使用绝缘胶布进行绝缘处理。将SH1.25-6Pin接入飞控的TELEM1口进行配置。
地面站中将TELEM1的波特率输出改为115200(LQ无线串口模块的BAUD),在QCG设置中添加一个数据连接接口。即可完成数传的配置。但是可能因为数据传输较大,距离在5m左右传输已经是极限了。
对原有飞行模式修改与添加新的功能
1、PX4中的飞行模式主要定义文件:
Commander模块(src/modules/commander):
主要负责飞行模式的管理和状态机控制。
commander.cpp:这是Commander模块的主文件,包含了飞行模式的状态机逻辑。commander_state.cpp:管理飞行模式的状态定义。
Flight Mode Manager模块(src/modules/mc_pos_control 和 src/modules/fw_pos_control_l1):
多旋翼飞行器(mc_pos_control) 和 **固定翼飞行器(fw_pos_control_l1)**的飞行模式控制。
在这些模块中,具体的飞行控制算法实现了如何根据不同的飞行模式,进行姿态、位置或速度控制。
飞行模式的状态机逻辑位于commander.cpp文件中。它根据用户输入、飞行器状态和环境条件来决定当前飞行模式。你需要熟悉这些状态之间的切换条件以及各模式的具体功能实现。
定义新的飞行模式:
在commander_state.h文件中,添加新的飞行模式枚举。例如,如果你要创建一个自定义的“智能悬停模式”:
VEHICLE_MODE_FLAG_SMART_HOVER
实现飞行模式逻辑:
在commander.cpp文件中,添加或修改相应的飞行模式逻辑。
你可以参考已有的飞行模式(如POSCTL或ALTCTL)的实现方式,将自定义逻辑嵌入其中。比如,你可以根据条件判断激活智能悬停模式:
if (user_input == CUSTOM_SMART_HOVER_CONDITION) {
vehicle_status_s = VEHICLE_MODE_FLAG_SMART_HOVER;
}
实现控制算法:
根据自定义飞行模式的功能需求,你可能需要在姿态控制模块(mc_att_control)或位置控制模块(mc_pos_control)中添加自定义的控制算法。
可以根据飞行器当前的状态、位置、高度等数据来设计智能悬停的控制算法,使其在特定条件下表现出不同的控制行为。
测试飞行模式
在模拟环境(如SITL)中对修改后的飞行模式进行测试。 确保飞行模式在不同情况下能够正确切换和响应用户输入。
Pixhawk 2.4.8 的接线
TELEM1/2 GPS接口的定义为 VCC TX RX TX1 RX1 GND
I2C接口的定义为 VCC SDA SCL GND
添加光流以及GPS模块的试飞
光流室内定点飞行测试:
室外光流定点以及更换大机架大电机的飞行
更换了1.2m的大机架。然后电机采用的好盈H6M 130Kv 植保机用大功率电机。电池12s。
PID参数只是调小了一点,其余与小飞机一致。大飞机天生稳定一些。参数不太好调,所以先将就用下。
GPS室外定点飞行测试:
暂无,GPS一直没调通。不知道什么问题。可能是口烧了?或者是模块有问题,但是换了两个模块了。
下次排除问题可以试试把GPS口换为TELEM口再试一下。这样可以确定口烧没。