资讯详情

Windows下编译PX4源码并连接simulink

目录

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

一、安装UAV支持PX4飞机支持包

在这里插入图片描述 搜索或者找到以下支持包,确保右侧中间的工具已经安装好了我用过配置过程matlab2019a以及matlab2021a,两种版本硬件设置过程不完全相同,推荐安装2021a,报错会更清楚,低版总会报告successful,但构建错误不会提示。在安装第三方支持时,有时我无法成功。当时,我试过实验室里所有的电脑。我不知道有什么问题。解决方案包括: 还是不行。所以我只用已经安装好的电脑做以下步骤。然而,两个月后,我可以重新安装这个工具包。太神奇了。

二、下载工具链

官方有在Ubuntu也有中下载工具链的脚本WSL脚本,方便在场windows开发环境。但是经过亲测,我觉得不友好,安装工具太多,很多版本不匹配,不支持,会有很多错误。所以,我推荐cygwin toolchain。在2021a建议自动使用硬件设置。

对于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源码

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 

我用上面的指令一步一步地完成,但如果有错误,我必须重新开始,所以我仍然可以像上面一步一步地完成克隆的第一步 第三步检测和第四步更新子模块时会出现各种问题。

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 

没有用 还是要挂梯子,设置全局代理,具体代理地址看你的梯子工具给了多少。

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

设置代理后,上面整个流程就会很丝滑。下图这样就是完成了。

四、构建PX4固件

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

固件的选择

:make px4_fmu-v2_default :make bitcraze_crazyflie_default :make px4_fmu-v4_default :make px4_fmu-v4pro_default :make px4_fmu-v3_default :make px4_fmu-v3_default :make px4_fmu-v2_default :make px4_fmu-v2_default :make px4_fmu-v3_default(支持 2MB 闪存) :make px4_fmu-v2_default :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里才有。 下图报错也是因为版本不兼容,报错提示中说缺失MW_PX4_SCI.h文件,这是在matlab安装位置的support文件中的,版本不匹配就会缺失大量的头文件,源码中的.cpp文件自然不能正常运行。

五、MATLAB的Test Connection

2019a选择你自己的px4克隆地址和cmake->config->xxxxxx.cmake文件就行 2021a跳过了控制台中自行构建的部分,需要在这一部分中完成。 1、选中toolchain的地址 2、选中px4源码Firmware文件所在的根目录,一个与控制台.bat同级的文件 3、选择用途 设计控制器选择1,路径跟随选择2。 4、根据自己的硬件来选择,我用的pixhawk2.4.8(带2MB闪存的pixhawk1),选择fmuv3(与上述一致) 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界面上能有加速度计的值。 8、获取加速度计值 出现下图就证明仿真环境搭建成功了 按照说明文件设置一下仿真硬件设置,在simulink中就能成功了。 仿真时间设置为inf 打开选项卡Model Settings->Hardware Implementation->Hardware board,选择自己的pixhawk板,下面的CMake configuration选择构建的固件版本 /dev/ttyACM0中输入连接的串口号COM7硬件选项卡中点击Build,Deploy&Start 至此就成功了!

标签: 8px连接器cn

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台