Windows下编译PX4源码并连接simulink

目录

  • 一、安装UAV支持PX4飞行器支持包
  • 二、下载工具链
    • 对于2019a
    • 对于2021a
  • 三、克隆PX4源码
  • 四、构建PX4固件
    • 固件的选择
    • 编译指令
    • 报错的处理
  • 五、MATLAB的Test Connection

一、安装UAV支持PX4飞行器支持包

Windows下编译PX4源码并连接simulink_第1张图片
搜索UAV Toolbox或者PX4找到下面这个支持包,确保右侧需要中的工具都已经安装了Windows下编译PX4源码并连接simulink_第2张图片在配置过程中,我用过matlab2019a以及matlab2021a,两种版本硬件设置过程不完全相同,推荐安装2021a,报错会更明确,低版本总会报告successful,但是构建出错不会提示。在安装第三方支持的时候有时不能成功,当时我用实验室所有的电脑试了一遍都不行,不知道是什么问题,采用的解决方法包括:
1、防火墙全关
2、挂梯子
3、下载兼容性中版本最低的matlab

还是不行。所以就只用了已经安装好的电脑进行下面的步骤。但是,过了俩月以后我重新安装这个工具包,就都可以了,很神奇。

二、下载工具链

官方有在Ubuntu中下载工具链的脚本,也有针对WSL的脚本,以便于在windows环境下进行开发。但是亲测以后我觉得并不友好,安装工具过多,很多版本不匹配不支持,会出现很多报错。所以,我推荐用cygwin toolchain。在2021a中,硬件设置自动就是推荐使用这个。
点击上图中的管理,出现下图:
Windows下编译PX4源码并连接simulink_第3张图片
再点击右侧小齿轮出现硬件设置Hardware Setup界面如下:
Windows下编译PX4源码并连接simulink_第4张图片

对于2019a

工具链版本 0.5 兼容px4 v1.8.0
点击下载cygwin工具链 PX4.Windows.Cygwin.Toolchain.0.5.msi

对于2021a

工具链版本 0.8 兼容px4 v1.10.2
点击下载cygwin工具链 PX4.Windows.Cygwin.Toolchain.0.8.msi
安装完成后,不用点击最后一步中的克隆源码
(因为没有挂梯子总会出错,不如自己手动下载)

三、克隆PX4源码

Windows下编译PX4源码并连接simulink_第5张图片
1、打开cygwin下载位置,控制台的根目录是home,双击运行run-console.bat
2、开始进行PX4源码克隆,不能在github上直接download ZIP,因为克隆的文件才能访问历史版本,便于管理。在窗口中进行以下命令:

git clone https://github.com/PX4/Firmware.git Firmware
cd firmware
git checkout v1.10.2                      //视情况而定
git submodule update --init --recursive   //确保这一步成功

如果不架梯子直接下载,第一步克隆,网络状况好的时候也能成功。

git clone --recursive -j8 https://github.com/PX4/Firmware.git

我用上面这行指令一步完成,但是如果有错还得重来,所以还是像上方的一步一步来即可,下图是完成第一步克隆后的结果
Windows下编译PX4源码并连接simulink_第6张图片
第三步检出和第四步更新子模块的时候会出现各种问题。如下:

unable to access 'https://github.com/UAVCAN/pyuavcan/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104

总的来说就是网络设置问题,比如openssl error 104
针对这一情况,我采用过以下方法:

//增大git的buffer大小
git config --global http.postBuffer 524288000

//更改电脑的hosts设置
将系统中的网络配置hosts增加  140.82.112.4 github.com

//更改.gitmodule文件.gitmodule文件中github.com改成github.cnpmjs.org

100 years later…
没有用
还是得挂梯子,设置全局代理,具体的代理地址看你的梯子工具给的是多少。

git config --global http.proxy http://x.x.x.x:x
git config --global https.proxy http://x.x.x.x:x

设置代理后,上面整个流程就会很丝滑。下图这样就是完成了。
Windows下编译PX4源码并连接simulink_第7张图片

四、构建PX4固件

在2021a中matlab运行窗口可以构建,也就是说如果使用2021a,那么在控制台的流程就走完了,直接在matlab上选择相应的固件进行之后的工作即可。
但是2019a需要在控制台手动构建,在matlab中选择构建完成后的config文件。

固件的选择

HKPilot32:make px4_fmu-v2_default
Crazyflie 2.0:make bitcraze_crazyflie_default
Pixracer:make px4_fmu-v4_default
Pixhawk 3 Pro:make px4_fmu-v4pro_default
Pixhawk Mini:make px4_fmu-v3_default
Pixhawk 2:make px4_fmu-v3_default
Holybro pix32:make px4_fmu-v2_default
Pixfalcon:make px4_fmu-v2_default
mRo Pixhawk:make px4_fmu-v3_default(支持 2MB 闪存)
Pixhawk 1:make px4_fmu-v2_default
带2MB闪存的Pixhawk 1:make px4_fmu-v3_default
pixhawk1必须使用受支持的 GCC 版本来构建此板(例如与CI/docker使用的相同)或从构建中删除模块。使用不受支持的 GCC 构建可能会失败,因为 PX4 接近板的 1MB 闪存限制

编译指令

make px4_fmu-v3_default
make px4fmu-v3_default   
make nuttx_px4fmu-v3_default

上面提供的指令都试一下,随着版本的更新构建的指令会有一定出入,这是正常的。

[1222/1225] Building C object platforms/nuttx/CMakeFiles/px4.dir/__/common/empty.c.obj
[1223/1225] Linking CXX executable px4_fmu-v3_default.elf
[1224/1225] Generating ../../px4_fmu-v3.bin
[1225/1225] Creating /cygdrive/e/px4toolchain/home/Firmware/build/px4_fmu-v3_default/px4_fmu-v3_default.px4

px4文件构建成功

报错的处理

1、安装工具与构建px4固件版本不匹配
安装工具中的Python、gcc-arm、cmake等的版本都是固定的,但是源码和固件是在升级的,所以解决办法就是安装cygwin工具链一要选择匹配的版本,不然会带来很多麻烦,0.8的工具链构建v1.10.2的版本就不会出问题。
下图一是gcc版本过高带来的问题。为了方便,降低或者提高工具链版本就行了。如果有能力,只用更新或者降级报错中的工具。
在这里插入图片描述
2、固件版本与matlab不兼容
2019a中需要选择cmake config文件,v1.10.2的源码里cmake->config文件中是没有这个文件的,v1.8.0里才有。
Windows下编译PX4源码并连接simulink_第8张图片
下图报错也是因为版本不兼容,报错提示中说缺失MW_PX4_SCI.h文件,这是在matlab安装位置的support文件中的,版本不匹配就会缺失大量的头文件,源码中的.cpp文件自然不能正常运行。
Windows下编译PX4源码并连接simulink_第9张图片

五、MATLAB的Test Connection

2019a选择你自己的px4克隆地址和cmake->config->xxxxxx.cmake文件就行
2021a跳过了控制台中自行构建的部分,需要在这一部分中完成。
1、选中toolchain的地址
Windows下编译PX4源码并连接simulink_第10张图片
2、选中px4源码Firmware文件所在的根目录,一个与控制台.bat同级的文件
Windows下编译PX4源码并连接simulink_第11张图片
3、选择用途
设计控制器选择1,路径跟随选择2。
在这里插入图片描述
4、根据自己的硬件来选择,我用的pixhawk2.4.8(带2MB闪存的pixhawk1),选择fmuv3(与上述固件的选择一致)
Windows下编译PX4源码并连接simulink_第12张图片
5、点击Build Firmware
此时matlab的命令行窗口就开始构建了,生成.px4文件即为成功。

SUBMODULEUPDATESTART
SUBMODULEUPDATEEND
-- PX4 version: v1.10.2
-- PX4 config file: /cygdrive/e/px4toolchain/home/Firmware/boards/px4/fmu-v3/default.cmake
-- PX4 config: px4_fmu-v3_default
-- PX4 platform: nuttx
-- PX4 lockstep: disabled
-- cmake build type: MinSizeRel

%此处省略1000+行

[1225/1225] Creating /cygdrive/e/px4toolchain/home/Firmware/build/px4_fmu-v3_default/px4_fmu-v3_default.px4

6、从SD 卡上启动PX4
在matlab命令行中输入以下命令,打开一个rc.txt文件。

cd (fullfile(codertarget.pixhawk.internal.getSpPkgRootDir,'lib','etc'))

在pixhawk的sd卡中新建一个名为etc的文件夹,复制这个rc.txt文件放在其中,如果你的pixhawk还没有连接GPS,打开这个rc文件并在gps启动指令后面加上-f,如下:

#Starts GPS driver 
gps start -f

7、用usb线连接飞控至电脑,Upload Firmware
back至上一界面,再next回来,就会刷新并显示连接的串口号。命令行也会显示上传进度。如果固件版本不匹配,命令行会有报错提示。又只能重复上面的步骤,重新构建。

Loaded firmware for board id: 9,0 size: 1702408 bytes (81.82%), waiting for the bootloader...

Found board id: 9,0 bootloader version: 5 on COM7![请添加图片描述](https://img-blog.csdnimg.cn/5504dac2c20a40f69c7232432166bec9.PNG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP5re36JuL44CC,size_20,color_FFFFFF,t_70,g_se,x_16)

sn: 004200473238510238303636
chip: 20016419
family: STM32F42x
revision: 3
flash: 2080768 bytes
Windowed mode: False

我刚开始是不能成功的,要么提示upload inprogress,要么一直提示断开重连(断开和连接、点击OK的顺序一定要根据提示,先断开->点击OK->重连)
解决方法:
用QGC刷最新稳定版的固件,并校准sensor,保证最终在QGC界面上能有加速度计的值。
Windows下编译PX4源码并连接simulink_第13张图片
8、获取加速度计值
出现下图就证明仿真环境搭建成功了
Windows下编译PX4源码并连接simulink_第14张图片
按照说明文件设置一下仿真硬件设置,在simulink中就能成功了。
仿真时间设置为inf
打开选项卡Model Settings->Hardware Implementation->Hardware board,选择自己的pixhawk板,下面的CMake configuration选择构建的固件版本
/dev/ttyACM0中输入连接的串口号COM7
硬件选项卡中点击Build,Deploy&Start
Windows下编译PX4源码并连接simulink_第15张图片
至此就成功了!

你可能感兴趣的:(px4+simulink,matlab,windows,simulink)