从Simulink到PX4——Simulink-PX4插件安装与环境搭建

2023-05-16

从Simulink到PX4——Simulink-PX4插件安装与环境搭建

  • 前言
  • 0 准备工作
  • 1 安装WSL
  • 2 Setting up the PX4 Toolchain on Windows
  • 3 Setting up the PX4 Tool Chain on Linux
  • 4 Downloading PX4 Source Code
  • 5 构建代码
  • 6 Performing PX4 System Startup from SD Card
  • 7 Test Connection

前言

       作为无人直升机方向的自控搬砖生,一定都不陌生Matlab与Pixhawk,前者是控制律仿真的常用软件,而后者是著名的开源无人机飞控模块。把控制律数学设计变成实际可用的飞控固件是一件令人头秃的事情,而现在Mathworks与Pixhawk从Matlab2018开始(具体Matlab支持版本详见官网)联手打造了Embedded Coder Support Package for PX4 Autopilots插件,用以保护各位研究者的发量。
       由于该插件目前没有在更新,不少插件相关应用都已过时,笔者耗费了不少精力(主要是被网络环境掣肘),才终于完成了Simulink-PX4插件的环境搭建与第一次代码构建工作。折腾期间发现网上并没有很多相关内容,遂整理成文,行文顺序按照Matlab的Simulink-PX4插件设置和帮助文档顺序给出,方便各位同仁。欢迎大家指正。
提醒:

  1. 本文给出的环境搭建流程,需要一个良好的网络环境,尤其是对Github,raw.githubusercontent.com,Ubuntu软件源等有较好的连接;
  2. Simulink-PX4插件及其帮助文档并没有汉化,以下内容笔者默认各位英语还行;
  3. 本文给出的环境搭建流程需要使用WSL,需要一定的Linux基础;
  4. 笔者默认各位熟悉Github相关操作。

0 准备工作

       首先介绍一下笔者的软硬件环境:

硬件:

  • 计算机:Intel 10代NUC I7-10710
  • Pixhawk:1代(FMU-V2)

软件:

  • OS:Windows 10 1909
  • WSL:Ubuntu 20.04 LTS
  • Matlab:R2019a

       第一步自然是安装Embedded Coder Support Package for PX4 Autopilots插件,Matlab官方给出了链接,注册登录并下载即可。下载下来的文件如图

       打开Matlab,切换到该文件目录,双击安装即可。安装完后会弹出设置页面,如果未弹出可在Matlab附加功能管理中找到。
       帮助文档结构如图

1 安装WSL

       目前微软给WIN10搭载了一个Linux子系统(Windows Subsystem for Linux, WSL),Simulink-PX4插件使用了该特性以方便构建(build)PX4固件。简单介绍WSL的安装:

  1. 控制面板→程序和功能→启动或关闭Windows功能→适用于Linux的Windows子系统,勾选,确定,等待安装,重启电脑;
  2. 打开微软商店(Microsoft Store),搜索Ubuntu并安装,笔者直接安装的没有版本号的那一个;
  3. 安装完后开始菜单中会多一个Ubuntu,点击打开WSL终端(可多开),等待安装完毕,WSL会让你建一个主账号与密码。

       Matlab教程要求安装Ubuntu 16.04,不过笔者用20.04没有发现问题,现在最新的PX4固件和工具链也不支持16.04了。WSL的文件是可以在WIN10中访问的,具体路径为

C:\Users\*你的用户名*\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

这样方便之后查看和管理WSL的文件,WSL可以访问电脑中的硬盘,命令为:

cd /mnt/盘符

       WSL账号密码设置完成后可以更新下源和软件,检查下网络连接,笔者感觉能不换源最好。

2 Setting up the PX4 Toolchain on Windows

       当Simulink-PX4插件设置进行到这一步会检查你的Toolchain on Windows是否完整,帮助文档中给出了安装Toolchain的教程,这里也是笔者开始踩雷的地方。
       第一步下载Matlab提供的工具链安装脚本并解压,文件存放位置随意。
       第二步在WSL中cd到脚本文件安装位置,执行命令:

source windows_bash_nuttx.sh

       这个脚本会安装Cmake,GCC,Ninja,Git,Python,pip,jdk,FastRTPS和gcc-arm-none-eabi-7-2017-q4-major。此处有几个雷,各位可以先执行一遍命令,分析一下报错信息(没报错的话就直接无视接下来的内容吧),用VScode之类的软件打开这个sh文件具体看里面的命令,笔者总结的雷点如下:
1.py相关
       现在使用apt安装的话,应该安装python3-pip和python3-serial包,pip install命令也有可能不识别,要使用pip3 install,另外最好把默认python版本更换为python3;
2. FastRTPS
       windows_bash_nuttx.sh中给出的FastRTPS安装要求为FastRTPS 1.5.0和FastCDR-1.0.7,脚本中给出的wget命令执行时会报OpenSSL错误,即使加上忽略SSL认证的命令,下载的文件也是错误的。现在FastRTPS已更名为FastDDS,安装FastDDS是不会通过Matlab的工具链检查的。笔者前往eProsima的网站自行下载了FastRTPS 1.5.0和FastCDR-1.0.7,安装步骤如下

eProsima Fast RTPS installation requires the following steps:

  1. eProsima FastCDR library is provided under the folder “requiredcomponents”. Extract the content of the package “eProsima_FastCDR-1.0.7-Linux.tar.gz” and execute:
    $ cd eProsima_FastCDR-1.0.7-Linux; ./configure --libdir=/usr/lib; make; sudo make install

  2. Install the eProsima Fast RTPS software.
    $ cd eProsima_FastRTPS-1.5.0-Linux; ./configure --libdir=/usr/lib; make; sudo make install

3.gcc-arm-none-eabi-7-2017-q4-major相关
       脚本里安装这个工具的命令本身是没有问题的,笔者在XX上网+没有更换源的情况下成功执行完毕,如果各位也是这样,并且执行

gcc-arm-none-eabi --version

可以正常返回版本号,就直接可以看第3节了.

       如果不能正常执行脚本中的命令,笔者认为有两个方法:
1.直接安装最新版gcc-arm-none-eabi:

sudo apt-get install gcc-arm-none-eabi

最新版可以编译PX4固件,但是编译过程中会出现Warning treated as error的错误,需要研究一下cmake文件的-Werror命令;
2. 前往gcc-arm-none-eabi官网下载gcc-arm-none-eabi-7-2017-q4-major文件手动安装,这个方法笔者在设置PATH时遇到了一点障碍,没有深究了。

       排雷完成后建议重启Windows让WSL的PATH设置生效。

3 Setting up the PX4 Tool Chain on Linux

       这一节即执行上一节下载下来的另一个脚本文件以安装Linux下的PX4工具链

source ubuntu_combined.sh

这一步笔者没有遇雷,最多只有上一节python相关的问题,各位打开脚本文件修改命令即可。

4 Downloading PX4 Source Code

       终于到下载PX4代码这一步了,Mathworks和Pixhawk合作时PX4的版本还在1.8.0,因此Matlab帮助文档也是让下载1.8.0版的PX4代码。这一步各位自己选定一个代码存放目录,然后在WSL中切换到该目录并依次执行(网好很重要):

  git clone https://github.com/PX4/Firmware.git Firmware
  cd Firmware
  git checkout v1.8.0
  git submodule update --init --recursive

理论上来说这里会切换到1.8.0版的代码并下载,不过笔者在选择和检查PX4代码这一步还是被警告使用的1.11.0版代码,但是构建出的还是1.8.0版,也就没有深究了。

5 构建代码

首先选择Cmake设置

默认就是构建px4fmu。
然后构建PX4固件

这里又开始踩雷了:
       首先是Matlab的一个问题,此处点击Build Firmware之后,总会显示构建成功,然而观察Matlab的命令行窗口就可以发现可能build报错结束了。
       然后建议大家在WSL中build固件,比Matlab命令行窗口可读性强一点,以笔者代码存放位置举例,笔者将PX4固件代码存放在C:\mypx4\Firmware中,正常情况下可以看到Firmware\build文件夹中有两个nuttx开头的文件夹,与Matlab的插件设置Select Cmake Configuration一步中下拉菜单内选项相对应,如果你的情况如上所述,那么执行

cd /*固件目录*/Firmware
make nuttx_px4fmu-v2_default

就可以在WSL中启动build了,build正常的话如下所示

笔者在这里踩了三个雷:

  1. 环境没装全,主要是toml、numpy,empy和catkin_pkg这四个包,使用pip3安装即可,再次建议将WSL默认py版本换成3代,上述有些包貌似没2代版本了,装完重启Windows;
  2. 部分脚本文件换行符使用了Windows的换行符而非Linux,用vim打开这些脚本文件,执行:set ff=unix命令再保存退出即可,笔者怀疑这个是刚开始折腾时使用了Windows版PX4代码的原因;
  3. gcc-arm-none-eabi的问题,如果这个工具没有正确安装会报各式各样和它相关的错误,查看报错信息解决吧。如果你装了最新版的gcc-arm-none-eabi就会遇到前述“Warning treated as error”的错误。

另外,如果你使用fmu-v3及以后版本的Pixhawk,可能会在编译中遇到如下错误(参见此链接):

FAILED: libuavcan_dsdlc_run.stamp

解决办法是修改(参照此链接修改):

Firmware/src/modules/uavcan/libuavcan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/__init__.py

至此就完成了首次PX4固件的构建,接下来是对PIXHAWK的设置。

6 Performing PX4 System Startup from SD Card


       这一步的目的是将Simulink-PX4插件内含的Pixhawk启动脚本“rc.txt”放进Pixhawk的TF卡中。Matlab建议在执行这一步之前最好用QGC地面站将Pixhawk固件刷为最新稳定版PX4。
脚本文件位置可以在Matlab命令行中执行以下命令前往:

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

       这个命令会把Matlab当前文件夹重定位到“rc.txt”的储存位置。
在TF卡根目录中新建文件夹etc,然后将“rc.txt”复制到该文件夹中即可完成这一步骤,接下来取卡插进Pixhawk中。

7 Test Connection


       用USB线把Pixhawk与电脑相连,然后选择上传端口(此处笔者的端口是COM10),端口可以在设备管理器中查阅。
       单击Upload Firmware即可开始上传刚才构建的固件,此时大概率会弹出一个对话框,意思是Matlab无法自动重启Pixhawk,需要手动拔线重启。在重新插上线的5s内,点击弹出对话框的确认按钮,Matlab会开始上传固件。
       固件上传结束后,单击Get Accelerometer data即可测试连接状况,如果出现上图结果,那么恭喜环境搭建初步成功,整个Hardware Setup流程也到此结束。接下来可以学习Matlab官方给出的7个Example。
       这是我运行px4demo_uORBRead的画面,可以看到Simulink可以实时读取Pixhawk的传感器数据。
在这里插入图片描述

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

从Simulink到PX4——Simulink-PX4插件安装与环境搭建 的相关文章

  • px4无人机常识介绍(固件,px4等)

    专业名词解释 aircraft 任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机 航空器 uav 无人驾驶飞机 vehicle 飞行器 airplane plane aero plane 有机翼和一个或多个引擎的飞行器统称为飞机 D
  • px4下载指定版本的固件、git用法

    https hub fastgit org PX4 PX4 Autopilot git describe tag 查看当前版本号 git tag l 查看所有版本 xff0c 也就是打个tag git checkout v1 9 1 跳转到
  • PX4之常用函数解读

    PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的
  • simulink之S函数

    s函数是system Function的简称 xff0c 用它来写自己的simulink模块 xff08 够简单吧 xff0c xff0c 详细的概念介绍大伙看帮助吧 xff09 可以用matlab C C 43 43 Fortran Ad
  • 感应(异步)电机磁场定向控制速度环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 目录 电机控制系列文章 前言 一 速度环开环传递函数 二 速度环开环传递函数零极点配置 三 速度环闭环性能
  • 用simulink 模型自动生成代码之 SPWM

    正弦PWM的信号波为正弦波 就是正弦波等效成一系列等幅不等宽的矩形脉冲波形 其脉冲宽度是由正弦波和三角波自然相交生成的 正弦波波形产生的方法有很多种 但较典型的主要有 对称规则采样法 不对称规则采样法和平均对称规则采样法三种 第一种方法由于
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • LTspice使用笔记 week3 进行.ac仿真查看相频 幅频特性 构建震荡器

    RC电路 查看相频 幅频特性 使用 ac命令可以容易 清晰地看出相频 幅频特性 ac命令的使用需要在激励源上加入一个小的ac信号 通常为1 然后进行 ac仿真即可 ac仿真的命令可以参考博主的设置 构建正弦振荡 不加入二极管 分析 只有电路
  • simulink中积分环节、惯性环节、比例环节

    第一步 第二步 第三步 注 适当修改参数即可变成所需环节 如下所示 修改为 或者为 抑或
  • 【SIMULINK】基于DQ0模型的三相异步电机自制仿真模型教程

    SIMULINK 基于DQ0模型的三相异步电机自制仿真模型 其实 打开simscape自带的异步电机模型 里面也是基于DQ0的 电机的模型定子电压作为输入 定子电流是输出 内部结构 omega 1 是DQ坐标系的转速 为0时退化为 alph
  • simulink半桥逆变电路仿真

    逆变是将直流变为脉冲方波信号 电压是100V的 第一幅为原始直流信号 第二幅是逆变电流 第三幅是逆变电压 参数设置 图3 RC1 图4 RC 图5 晶闸管 图6 脉冲信号的参数
  • 《机器人控制系统和MATLAB simulink仿真》笔记1:认识S函数

    前言 最近在看控制的东西 想动手实践一下 看到有书名曰 机器人控制系统和MATLAB simulink仿真 于是学习一下做做记录 1 认识对象 机器人动力学系统的特性 考虑一个关节机器人 其动态性能可由二阶非线性微分方程描述 M q q
  • MATLAB对原始光斑进行运算

    clc clear all close all I imread ban jpg figure 1 subplot 1 3 1 imshow I 显示原始光斑 title 原始光斑 I1 imadjust I 0 2 0 6 subplot
  • VSC/SMC(十六)——自适应鲁棒滑模控制

    目录 1 参数不定和扰动不定但有界的系统 2 滑模控制自适应律设计 2 1控制律设计总结 3 仿真分析 3 1 PD控制 3 2普通自适应律 3 3映射自适应律 3 4总结 4学习问题 1 参数不定和扰动不定但有界的系统 其中 2 滑模控制
  • 分布式驱动电动汽车定速巡航控制

    目录 前言 1 电机模型 1 1电机数学模型 1 2 电机传递函数模型 2 控制器设计
  • 如何将 simulink 文件转换为 XML

    我需要将 Simulink 文件 mdl 转换为 XML 文件 经过任何搜索后 我没有找到任何内容来帮助我解决此问题 您知道 Java 中的某种方法或现成的解决方案吗 从 R2008b 开始 您可以使用以下命令将 mdl 文件导出到 xml
  • 如何在simulink中创建计数器

    我想计算我的信号变为零的次数 例如 将脉冲信号作为输入 我想要一个变量来计算脉冲变为零的次数 我正在疯狂地思考某事 有人可以帮助我吗 谢谢 figure 1 is a pulse counter model and figure 2 is
  • 如何在不使用绘图的情况下将范围保存到图像文件?

    这个条件非常重要 因为绘图以不可接受的方式拉伸我的图表 如果 MikeT 的评论是正确的 并且您正在尝试保存 Scope 块中显示的图像 则可以通过以下几种方法来执行此操作 打印示波器窗口的内容通过单击Print图标 范围工具栏上最左边的图
  • 如何获取嵌入式 MATLAB 函数的内容

    我的 Simulink 模型中有一些嵌入式 MATLAB 函数 有没有办法获取此块的内容 您在编辑器中看到的文本 我的第一个猜测是使用 find system 获取嵌入式 MATLAB 函数 然后使用 get param 获取内容 但我没有
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允

随机推荐

  • 进程切换与线程切换的区别

    一 虚拟内存知识复习 虚拟内存是操作系统为每个进程提供的一种抽象 xff0c 每个进程都有属于自己的 私有的 地址连续的虚拟内存 xff0c 当然我们知道最终进程的数据及代码必然要放到物理内存上 xff0c 那么必须有某种机制能记住虚拟地址
  • eclipse-tomcat解决java.lang.OutOfMemoryError: PermGen space

    在eclipse中使用tomcat启动项目的时候 遇到问题 xff0c 报错 xff1a java lang OutOfMemoryError PermGen space 原因很简单 内存溢出 xff0c 解决方法 1 双击红色部分 2 单
  • JavaWeb项目中加入redis缓存

    关于redis缓存的优缺点不再多做结束 xff0c 请自行上网查询 1 下载 xff1a windows版本资源我已经上传 xff0c 链接 xff1a http download csdn net detail kkkder 963718
  • java 格式化时间

    public static void main String args System out println System currentTimeMillis SimpleDateFormat formatter 61 new Simple
  • linux docker删除镜像

    springcloud参考指南下载 xff1a http download csdn net download kkkder 10035750 之前的没有接触的docker xff0c 找了些文档 xff0c 按部就班的在linux下安装部
  • springboot activiti工作流简单示例

    最近一直研究springboot xff0c 根据工作需求 xff0c 工作流需要作为一个单独的微服务工程来提供给其他服务调用 xff0c 现在简单的写下工作流 xff08 使用的activiti xff09 微服务的搭建与简单使用 jdk
  • Error parsing lifecycle processing instructions pom.xml /xxxxx Maven Project Build Life

    本机是windows7 64bit xff0c eclipse版本信息 xff1a Eclipse Java EE IDE for Web Developers Version Neon 3 Release 4 6 3 Build id 2
  • freeRTOS 信号量:二值 计数 互斥 递归互斥

    用于信号量的队列 xff0c 都是只有队列数据结构的空间 xff0c 没有队列项存储空间的队列 二值 计数 互斥 递归互斥 xff0c 创建完成之后的内存状态 xff1a 转自 http blog csdn net zhzht1986101
  • Mapped Statements collection does not contain value for xxx

    说个同事出现的问题 xff1a Mapped Statements collection does not contain value for xxx 当时第一反应 xff0c 就是sql文件中没有定义id为 xxx xff0c 查看sql
  • CentOS mysql 安装

    1 因个人需要 安装了JDK https blog csdn net kkkder article details 78349419 2 下载https dev mysql com downloads mysql 5 7 html down
  • Spring AOP 日志记录

    package com config import java util Date AOP 添加访问日志 import org aspectj lang JoinPoint import org aspectj lang annotation
  • linux redis安装

    1 CentOS7 联网 2 进入redis官网 https redis io download 3 官网有详细教程 在执行make命令时 xff0c 报错 xff1a echo 34 34 gt make ldflags MAKE hir
  • 无人机巡线(1)

    本程序完成2020年电赛试题主要内容 如果用户认为已经掌握该文件使用方法 xff0c 请删除此文件 xff0c 然后添加FollowLine c文件 1 拿到了绿色的数据 xff1b 2 include 34 FollowLine h 34
  • 相机内参数和外参数

    求解相机内参 xff1a 相机标定 求解相机外参 xff1a 相机位姿估计 相机内参数是与相机自身特性相关的参数 xff0c 比如相机的焦距 像素大小等 xff1b 相机外参数是在世界坐标系中的参数 xff0c 比如相机的位置 旋转方向等
  • openrave安装

    需要用到某篇论文的代码 xff0c 需要用到openrave等第三方库 xff0c 折腾一番后记录一下 参考安装 https scaron info teaching installing openrave on ubuntu 14 04
  • IoT 技术演进:揭秘无源零功耗物联网通信技术原理和总体架构

    近日 xff0c OPPO发布了 零功耗通信 报告 xff0c 揭秘零功耗通信的概念 技术原理和总体架构 关键技术和挑战 xff0c 以及与6G关键技术的融合 自供电 黑科技 xff0c 零功耗通信 零功耗设备主要结合射频能量采集技术 反向
  • 解决修改httpd配置文件Options Indexes FollowSymLinks仍然无法禁止访问网站目录

    由于一些特殊需求或者安全考虑 xff0c 需要禁止用户访问网站目录 xff0c 所以需要改httpd conf配置文件 一般来说 xff0c 命令如下 xff1a vim etc httpd conf httpd conf 找到目录标签下的
  • 操作系统学习(十六) 、任务管理

    操作系统学习 xff08 十六 xff09 任务管理 一 任务 任务是处理器可以分配调度 执行和挂起的一个工作单元 它可用于执行程序 任务或进程 操作系统服务 中断或异常处理过程和内核代码 80x86提供了一种机制 xff0c 这种机制可以
  • 密码攻击——无分支的代码,执行时间是常量

    基于时间的密码攻击 考虑下边的代码 span class token keyword int span span class token function memcmp span span class token punctuation s
  • 从Simulink到PX4——Simulink-PX4插件安装与环境搭建

    从Simulink到PX4 Simulink PX4插件安装与环境搭建 前言0 准备工作1 安装WSL2 Setting up the PX4 Toolchain on Windows3 Setting up the PX4 Tool Ch