赞
踩
本篇文章介绍如何搭建PX4+Matlab+Simulink飞控算法设计联合仿真环境,提供了如何安装所有所需软件的教程。
环境:
MATLAB : R2024a
UAV Toolbox Support Package for PX4 Autopilots : 24.1.1
WSL2 Ubuntu :22.04 LTS
Windows :Windows 10 22H2
Python: 3.8.2
PX4 :1.14.0
打开Matlab,点击【附加功能】中的【获取附加功能】。
搜索并安装UAV Toolbox Support Package for PX4 Autopilots硬件支持包。
在弹出的页面中点击【安装】按钮。
登陆MATLAB账号后按提示完成安装,最后可以点击【立即设置】进入配置页面。
也可以点击【稍后设置】,之后通过【管理附加功能】中的UAV Toolbox Support Package for PX4 Autopilots硬件支持包右侧的设置按钮进入。
进入Matlab配置页面后需要先安装WSL2(Windows Subsystem for Linux 2),WSL2可以在Windows计算机上开发PX4飞控。
点击上方的【link】按钮进入安装教程。
确保在BIOS中启用了计算机的虚拟化功能。它通常分别被称为“虚拟化技术”、“英特尔VT-x”或“AMD-V”。
以管理员身份打开Windows命令提示符。可以通过在Windows搜索中输入【cmd】,单击【以管理员身份运行】。
在Windows命令提示符下执行以下命令以安装WSL2。
wsl --install
安装完成后,重新启动计算机,重启后需要设置Ubuntu系统的名称和密码。
我这里默认安装的是Ubuntu 20.04版本,但是安装帮助中建议是使用22.04版本,所以我使用以下命令进行升级。
sudo apt update
sudo apt full-upgrade
sudo do-release-upgrade
还需要安装LSB模块。
sudo apt-get install lsb
之后在Matlab配置页面点击下方的【link】按钮进入配置教程,主要讲解了如何启动WSL2。
官方给出的解决方法如下:
修改电脑的语音为英语。
在资源管理器地址栏输入%temp%
进入,如果有有个名为MW_px4_WSL_distribution.txt的文件,删除它。
再次进入UAV Toolbox Support Package for PX4 Autopilots硬件支持包的配置页面即可。
在安装完WSL2后,打开Matlab,点击【附加功能】中的【获取附加功能】,通过UAV Toolbox Support Package for PX4 Autopilots硬件支持包右侧的设置按钮重新进入,但是仍然是配置WSL2的页面。
通过单步执行代码发现是软件包内部有一行写错了,位置是C:\ProgramData\MATLAB\SupportPackages\R2024a\toolbox\target\supportpackages\px4+codertarget+pixhawk+hwsetup\WindowsHardwareModule.m文件的第156行。
% If for some reason, we are unable to determine the
% version, set the version as WSL not installed
if installedWSLversion ~= 1 && installedWSLversion ~= 2
installedWSLversion = 0;
end
将installedWSLversion = 0
改为installedWSLversion = 2
即可。
之后在Matlab命令行中运行命令生成P代码。
pcode WindowsHardwareModule.m
执行完之后再次进入UAV Toolbox Support Package for PX4 Autopilots硬件支持包的配置页面即可。
如果没有安装Python 3.8.2,点击【Next】-【Install】安装Python 3.8.2,安装完毕后点击【Next】。
如果安装了Python 3.8.2,勾选【I have already installed Python 3.8.2】,点击【Next】,选择Python 3.8.2安装位置点击【Validate】进行验证,点击【Next】。
之后需要在WSL2中下载PX4 v1.14.0版本的源码。
点击上方的【link】按钮进入安装教程。
打开WSL2,到达用户目录下。
cd ~
从官网下载最新版本源码固件。
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
clone成功之后,进入PX4-Autopilot文件夹中。
cd PX4-Autopilot
PX4-Autopilot里面就是PX4的源码,但是它依赖了很多其他的库,所以此时不完整还不能用,我们需要更新他的依赖。
git submodule update --init --recursive
下载完PX4源码后,在Matlab配置页面这里点击【Validate】会报错找不到文件夹路径。
通过单步执行代码发现是软件包内部有两处写错了。
位置C:\ProgramData\MATLAB\SupportPackages\R2024a\toolbox\target\supportpackages\px4+codertarget+pixhawk+hwsetup\WindowsHardwareModule.m文件的第84行。
workflowObject.Px4_Base_Dir = ['\\wsl.localhost\', distributionName , strrep(workflowObject.Px4_Base_Dir, '/', filesep)];
将\\wsl.localhost\
改为\\wsl$\
即可。
之后在Matlab命令行中运行命令生成P代码。
pcode WindowsHardwareModule.m
位置C:\ProgramData\MATLAB\SupportPackages\R2024a\toolbox\target\supportpackages\px4+codertarget+pixhawk+hwsetup\HardwareInterface.m文件的第111行。
workflowObject.Px4_Simulink_Module_Dir =fullfile(workflowObject.Px4_Base_Dir,'src','modules','px4_simulink_app');
改为:
workflowObject.Px4_Simulink_Module_Dir =[workflowObject.Px4_Base_Dir,'\src\modules\px4_simulink_app'];
之后在Matlab命令行中运行命令生成P代码。
pcode HardwareInterface.m
之后再次在Matlab配置页面点击【Validate】验证即可。
之后需要在WSL2中下载安装PX4 Toolchain工具链。
点击【link】按钮进入安装教程。
打开WSL2,到达PX4源码目录下包含工具链设置脚本的文件夹。
cd ~/PX4-Autopilot/Tools/setup/
运行工具链设置脚本。
bash ./ubuntu.sh
各种依赖环境安装成功之后需要重启WSL系统。
之后需要选择使用或禁用PX4源码中的控制模块,如果需要在Simulink中设计飞行控制器算法并替换掉PX4源码中的控制器,那就勾选【Disable multi-copter and fixed-wing controller modules in PX4 Firmware】。
之后需要选择PX4硬件并设置构建对象,我这里选择的是【Pixhawk 6c】,构建对象选择【px4_fmu-v6c_default】。
这里需要选择启动脚本的形式,可以选择源码中的rcS文件直接构建到飞控固件中,或者选择rc.txt文件放到SD卡中。
由于之前选择了禁用PX4源码中的控制模块,则在rc.txt文件中会禁用mc_pos_control位置控制模块和mc_att_control姿态控制模块,点击【Next】。
这里需要将生成的rc.txt文件拷贝到飞控板上的SD卡上。
点击【link】按钮进入教程。
在Matlab命令行中运行以下命令进入rc.txt文件所在位置。
cd (fullfile(codertarget.pixhawk.internal.getSpPkgRootDir,'lib','etc'))
在SD卡根目录下新建一个etc文件夹,然后将rc.txt文件拷贝到这个文件夹下,之后将SD重新插回飞控板即可。
之后需要编译PX4固件,点击【Build Firmware】进行编译。
通过单步执行代码发现是软件包内部有一处写错了。
位置C:\ProgramData\MATLAB\SupportPackages\R2024a\toolbox\target\supportpackages\px4+codertarget+pixhawk+hwsetup\WindowsHardwareModule.m文件的第303行。
firmwarePath = obj.convertWin2WSLPath(TargetDir);
改为:
firmwarePath = '~/PX4-Autopilot';
之后在Matlab命令行中运行命令生成P代码。
pcode WindowsHardwareModule.m
之后再次在Matlab配置页面点击【Build Firmware】编译即可,耐心等待一段时间后Matlab命令行显示编译完成。
Memory region Used Size Region Size %age Used
ITCM_RAM: 0 GB 64 KB 0.00%
FLASH: 1838540 B 1920 KB 93.51%
DTCM1_RAM: 0 GB 64 KB 0.00%
DTCM2_RAM: 0 GB 64 KB 0.00%
AXI_SRAM: 61480 B 512 KB 11.73%
SRAM1: 0 GB 128 KB 0.00%
SRAM2: 0 GB 128 KB 0.00%
SRAM3: 0 GB 32 KB 0.00%
SRAM4: 0 GB 64 KB 0.00%
BKPRAM: 0 GB 4 KB 0.00%
[1084/1085] Generating ../../px4_fmu-v6c_default.bin
[1085/1085] Creating /home/hccwb/PX4-Autopilot/build/px4_fmu-v6c_default/px4_fmu-v6c_default.px4
之后需要连接PX4硬件并烧录固件,需要提前用数据线插好飞控板到飞控板上再点击【Next】进入测试连接界面,我这里是COM14端口。
点击【Upload Firmware】烧录固件。
在弹窗中点击【确定】,然后重新插拔一次飞控板的连接数据线。
耐心等待一段时间后显示烧录成功,点击【Next】。
到这里所有的硬件设置就已经都完成了。
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。