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

前言

       作为无人直升机方向的自控搬砖生,一定都不陌生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这四个包,使用pip安装即可,建议装完重启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的传感器数据。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/KLKill/article/details/107966100