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 的相关文章

  • 使用加密 API 导入 DER 编码的公钥

    是否可以使用 MS crypto API 导入 DER 编码的公钥 那么我可以验证签名吗 我需要 MS Crypto API 的一段代码或帮助来导入 DER 编码的公钥 证书 以下三个步骤将允许您导入公钥证书 使用获取证书上下文证书创建证书
  • 用于打开大(巨型、巨大、大)文本文件的文本编辑器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 强制窗口在打开时获得焦点

    我有一个 WPF 应用程序 它通过套接字连接与 C MFC 应用程序进行通信 如果用户按下 C 应用程序中的特定按钮 则会显示一个新的 WPF 窗口 以下是调用以启动 WPF 窗口的代码 var window new Window wind
  • C++串口问题

    我在 Visual Studio 上使用 C 连接到任何串行端口 想要与 Arduino 交换 时遇到问题 我正在使用串行类 http www arduino cc playground Interfacing CPPWindows在 Ar
  • 获取已创建进程的进程句柄 Windows

    我需要获取运行程序时刚刚创建的所有进程的句柄或 PID 到目前为止 我已经使用了这段代码 每次创建进程时都会告诉我 问题是我只获取有关创建的进程的信息 但没有有关进程本身的任何信息 https msdn microsoft com en u
  • R 脚本自动化时的不同结果

    以下命令对 pdf 文件执行 Ghostscript 这pdf file变量包含该 pdf 的路径 bbox lt system paste C gs gs8 64 bin gswin32c exe sDEVICE bbox dNOPAUS
  • 代码退出-1073741515 (0xc0000135)“未找到依赖的 dll”

    我正在尝试编写一个简单的程序 与 2019 年相比 Windows 10 64 位 调试 gt x64 遵循 将 Visual C 项目配置为面向 64 位平台 1 include
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • python+win32:检测窗口拖动

    有没有办法检测何时使用 python pywin32 在窗口中拖动不属于我的应用程序的窗口 我想对其进行设置 以便当我拖动标题与桌面边缘附近的图案匹配的窗口时 当松开鼠标时它会捕捉到边缘 我可以编写代码 以便在释放鼠标时将所有具有该标题的窗
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全

随机推荐

  • 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飞行器支持包