作为无人直升机方向的自控搬砖生,一定都不陌生Matlab与Pixhawk,前者是控制律仿真的常用软件,而后者是著名的开源无人机飞控模块。把控制律数学设计变成实际可用的飞控固件是一件令人头秃的事情,而现在Mathworks与Pixhawk从Matlab2018开始(具体Matlab支持版本详见官网)联手打造了Embedded Coder Support Package for PX4 Autopilots插件,用以保护各位研究者的发量。
由于该插件目前没有在更新,不少插件相关应用都已过时,笔者耗费了不少精力(主要是被网络环境掣肘),才终于完成了Simulink-PX4插件的环境搭建与第一次代码构建工作。折腾期间发现网上并没有很多相关内容,遂整理成文,行文顺序按照Matlab的Simulink-PX4插件设置和帮助文档顺序给出,方便各位同仁。欢迎大家指正。
提醒:
首先介绍一下笔者的软硬件环境:
硬件:
软件:
第一步自然是安装Embedded Coder Support Package for PX4 Autopilots插件,Matlab官方给出了链接,注册登录并下载即可。下载下来的文件如图
打开Matlab,切换到该文件目录,双击安装即可。安装完后会弹出设置页面,如果未弹出可在Matlab附加功能管理中找到。
帮助文档结构如图
目前微软给WIN10搭载了一个Linux子系统(Windows Subsystem for Linux, WSL),Simulink-PX4插件使用了该特性以方便构建(build)PX4固件。简单介绍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账号密码设置完成后可以更新下源和软件,检查下网络连接,笔者感觉能不换源最好。
当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:
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 installInstall 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设置生效。
这一节即执行上一节下载下来的另一个脚本文件以安装Linux下的PX4工具链
source ubuntu_combined.sh
这一步笔者没有遇雷,最多只有上一节python相关的问题,各位打开脚本文件修改命令即可。
终于到下载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版,也就没有深究了。
首先选择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正常的话如下所示
笔者在这里踩了三个雷:
另外,如果你使用fmu-v3及以后版本的Pixhawk,可能会在编译中遇到如下错误(参见此链接):
FAILED: libuavcan_dsdlc_run.stamp
解决办法是修改(参照此链接修改):
Firmware/src/modules/uavcan/libuavcan/libuavcan/dsdl_compiler/libuavcan_dsdl_compiler/__init__.py
至此就完成了首次PX4固件的构建,接下来是对PIXHAWK的设置。
这一步的目的是将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中。
用USB线把Pixhawk与电脑相连,然后选择上传端口(此处笔者的端口是COM10),端口可以在设备管理器中查阅。
单击Upload Firmware即可开始上传刚才构建的固件,此时大概率会弹出一个对话框,意思是Matlab无法自动重启Pixhawk,需要手动拔线重启。在重新插上线的5s内,点击弹出对话框的确认按钮,Matlab会开始上传固件。
固件上传结束后,单击Get Accelerometer data即可测试连接状况,如果出现上图结果,那么恭喜环境搭建初步成功,整个Hardware Setup流程也到此结束。接下来可以学习Matlab官方给出的7个Example。
这是我运行px4demo_uORBRead的画面,可以看到Simulink可以实时读取Pixhawk的传感器数据。