Windows下编译PX4源码并连接simulink

2023-05-16

目录

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

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

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

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

二、下载工具链

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

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

下载的初始文件中没有home等文件
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

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

设置代理后,上面整个流程就会很丝滑。下图这样就是完成了。
在这里插入图片描述

四、构建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里才有。
请添加图片描述
下图报错也是因为版本不兼容,报错提示中说缺失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
在这里插入图片描述
至此就成功了!

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

Windows下编译PX4源码并连接simulink 的相关文章

随机推荐

  • SLA的基本概念

    SLA的基本概念 现在的产品和系统都非常的复杂 xff0c 彼此连接依赖越来越复杂 xff0c 为了整体的高速运转 xff0c 对每个部件的稳定性越来越高 xff0c 越来越精密 xff0c 发展到一定程度 xff0c 人力已经无法掌控 x
  • ssh远程登录可能出现的问题以及解决办法

    首先 确保server端的ssh服务是开的 xff08 service shhd start xff09 然后在client端输入 xff1a ssh usrname 64 serverip xff08 远程登录 xff09 scp fil
  • 各种滤波原理

    1 维纳滤波 维纳滤波是一种平稳随机过程的最佳滤波理论 xff0c 换句话说就是在滤波过程中系统的状态参数 xff08 或信号的波形参数 xff09 是稳定不变的 它将所有时刻的采样数据用来计算互相关矩阵 xff0c 涉及到解维纳 xff0
  • MTCNN算法提速应用(ARM测试结果评估)

    经博主测试 xff0c mtcnn原三层网络如果用于工程测试 xff0c 误检情况严重 xff0c 在fddb上测试结果也是 xff0c 经常将手或者耳朵 检测为人脸 xff0c 这个很头疼 xff08 因为标注数据 xff01 xff09
  • 国外知名音频库一站式资料和简介

    Speex Speex http blog csdn net xyz lmn article details 8013490 简介 Speex是一套主要针对语音的开源免费 xff0c 无专利保护的音频压缩格式 Speex工程着力于通过提供一
  • vs2010调试工具栏不可用(变灰)解决办法

    菜单中页不能进行调试 使用vs的命令行工具 在命令行中运行 xff1a devenv ResetSkipPkgs 重新打开vs xff08 注 xff1a 第一次没有关闭vs xff0c 运行这条命令后 xff0c 会新打开vs没有变化 x
  • STM32 抗锯齿中文显示另类方案分享

    STM32 抗锯齿中文显示另类方案分享 最近在玩车载液晶仪表 xff0c 之前用Arduino 43 USART液晶 xff0c 后来发现Arduino性能不够 xff0c 就转向STM32 由于需要在液晶屏上显示手机信息 xff0c 先是
  • [Pixhawk] ardupilot源码windows编译教程

    声明 此教程最开始取自于淘宝商家 xff0c 后查找资料发现淘宝商家取自 怒飞垂云 的教程 xff0c 但原教程中有些冗余和错误导致无法通过编译 xff0c 我做更改整理后发出 xff0c 如有疑问请各位一起讨论 目录 一 建立飞控固件编译
  • pixhawk MP地面站 NTF_LED参数相关

    NeoPixel Copter documentation 这一部分里面的NTF相关参数 xff0c 对应MP地面站里的这几项 不是给外接WS2812设置的 我折腾了一下午 xff0c 再更改了其他一些参数后 xff0c 导致飞控上那个最大
  • 无人机betaflight 地面站遥控器通道最低点不是1000,最高点不是2000,中点不是1500的调整办法

    参考老外的视频 How to fix the endpoints of your Rx channels with RXRANGE in Betaflight or Cleanflight EASY FIX 需要进入CLI界面 xff0c
  • 八皇后详解

    历史 八皇后问题是一个古老而著名的问题 xff0c 是回溯算法的典型例题 该问题是十九世纪著名的数学家高斯1850年提出 xff1a 在8X8格的国际象棋上摆放八个皇后 xff0c 使其不能互相攻击 xff0c 即任意两个皇后都不能处于同一
  • KVM虚拟机创建功能详细讲解

    KVM虚拟机创建功能详细讲解 一 KVM虚拟机创建的用户操作 对于用户或者管理员来说 xff0c 虚拟机的创建有着很多的方法 xff0c 例如 xff1a kvm自带命令行工 具 使用virsh命令来创建 使用具有图形界面的virt man
  • JS中堆和栈

    什么是栈和堆 栈和堆的主要作用存储变量 xff0c 根据变量值得不同存储的位置也不同 在JS中 xff0c 栈主要是存储基本类型的变量 xff0c 包括String Number Boolean Undefined Null 和 对象类型的
  • 实例:Python调用c++文件(参数为指针和数组指针)

    本文作为Python调用c 43 43 的进阶实现 xff0c 简单的实现参考文章Python调用c 43 43 高级 xff08 swig xff09 1 一个小小的工作目标 通过Python调用c 43 43 文件 xff0c 生成一个
  • RT-Thread学习笔记——信号量

    前言 本文讲RT Thread的线程间同步之信号量 xff0c 包括为什么要进行线程间同步 信号量创建与删除 信号量获取与释放以及基于STM32的二值信号量示例和计算型信号量示例 xff0c 采用RTT amp 正点原子联合出品潘多拉开发板
  • ssh Connection closed by remote host解决

    描述 最近某台服务器隔一段时间就会有ssh连接失败的告警 xff0c 但是上去排查的时候会发现ssh并没有连接失败的错误 后来有在ssh的地方添加日志 xff0c 打印错误的输出 xff0c 最终得到的报错Stderr ssh exchan
  • linux-2.6.32.6源码目录结构分析及其driver所占比重

    find maxdepth 1 type d name exec du sh 未编译个目录文件大小 xff1a 423M linux 2 6 32 6 5 8M firmware 1 3M lib 140K init 144K virt 2
  • Formatter(格式化)和 Converter(格式化)

    功能 xff1a Spring框架的功能 xff0c Formatter和Converter均可以将一种对象类型转换成另一种对象类型 区别 xff1a Converter是通用元件 xff0c 可以在应用程序的任意层中使用 Formatte
  • 牛人 就是这样锤炼出来的,中兴资深工程师,嵌入式专家韦东山是这样炼成的!

    导读 xff1a 还在大学的你 xff0c 不知道未来何去何从 xff1f 都说迷茫是大事做不了 xff0c 小事不想做 还在做程序袁的你 xff0c 是不是也想创业 xff1f 程序袁好创业吗 xff1f Linux好学吗 xff1f 学
  • Windows下编译PX4源码并连接simulink

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