DSP

px4原生源码学习一

2019-07-13 20:30发布

接触px4代码有几天了,想把自己所学所想记录下来.   px4就不过多介绍了,算得上目前使用的最广泛的开源飞控了。为什么说”px4原生代码学习呢”,这还得追溯到被大疆干死的3DR,3DR想做消费级无人机,但苦于团队难建,所以索性就纠集起那几个著名的开源飞控团队,让大家一起搞一起发财(熟知还是被大疆搞死),但还是留下了这个宝贵的开源飞控遗产。这些开源团队中出名的当数APM团队和pixhawk团队,其中APM早已名声在外,早期一直是开源飞控的头头,但早期的代码属于状态机阶段,而且据说很烂,没有条理。后来加入项目后,将原来的代码移植到新的系统中来就有了现在的APM(基于px4修改的),这个应该是现在大家学习最多的了。但其实这个代码并不怎么好,因为其中冗余了太多对于各种开源电路板和传感器的驱动适配的代码。而原生的px4就没有那么多冗余的代码了。   /**************************************************************************************************************   po上我使用到的硬件和开发环境   px4硬件:某宝销量最高的pixhawk套件(主机,gps+指南针,数传,pwm转pmm,安全开关,蜂鸣器,电源转换接头)   遥控器:某国产神器   开发环境:虚拟机vm12+ubuntu14  ps:此文章只针对纯代码分析,关于那些个飞机类型啦,硬件什么的我就不多说了,这个得自己去亲身体验才行,切不可贸然飞行,这个还是很危险的!!!!!  还有就是什么git,linux,make什么的也不会多说,毕竟只是工具属性。  获得更好支持可以访问http//:px4.io 我知道的大部分来自这个网站。
  **************************************************************************************************************/
  好!废话不多说,开始吧!   第一步:设置好你linux用户的权限,不要什么都直接sudo,这样会产生很多问题的!!!  将用户添加到dialout组 sudo usermod -a -G dialout $USER   然后退出系统登录,在登进来就可以了。  第二步:安装依赖工具(这些工具对所有的px4硬件都是必须的,本文只针对pixhawk硬件,其它的什么骁龙板子,树莓派的,自己去官网看http://dev.px4.io)    sudo add-apt-repository ppa:george-edison55/cmake-3.x -y sudo apt-get update sudo apt-get install python-argparse git-core wget zip python-empy qtcreator cmake build-essential genromfs -y # simulation tools sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y
 第三步:安装Ninja编译系统(可选项)
 Ninja是google 浏览器开发中产生的附加产物,它是一个编译器,可以有效加快编译速度,px4官方推荐使用这个编译器,用不用看你自己了,make也还是挺好的(事实上当你安装了ninja时,使用make命令会自动调用ninja,你基本感觉不到他的存在)。  首先使用命令:sudo apt-get install ninja    安装ninja,但由于linux支持的ninja版本较低,你安装的ninja不能用于编译px4,因为px4要求高版本的,怎么办?曲线救国!!!  下载并解压最新的ninja文件并删除压缩文件包
wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip unzip ninja-linux.zip rm ninja-linux.zip   将解压文件夹下的ninja可执行文件复制到/usr/bin目录下替换原有的ninja可执行文件。   这样就可以了。
 第四步:移除linux下的串口管理器。  linux下的串口管理器会导致px4硬件同linux通信产生错误,所以要把他移除。 sudo apt-get remove modemmanager   第五步:安装编译系统及其依赖   值得注意的是要安装好对应的版本,版本不对可能会出现错误
sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa sudo apt-get update sudo apt-get install python-serial openocd flex bison libncurses5-dev autoconf texinfo build-essential libftdi-dev libtool zlib1g-dev python-empy gcc-arm-embedded -y   如果出现 gcc-arm-none-eabi version produces build errors for PX4/Firmware master  那么就得手动安装4.9或者5.4的版本
 以上就是编译环境的搭建了。

下面就来试试下载和编译px4原生代码吧!
 从github下载代码 mkdir -p ~/src #创建src文件夹 cd ~/src git clone https://github.com/PX4/Firmware.git #clone px4原生代码 cd Firmware git submodule update --init --recursive #clone px4项目中使用到的依赖(主要是Nuttx实时操作系统) cd .. mkdir -p ~/src cd ~/src git clone https://github.com/PX4/Firmware.git cd Firmware git submodule update --init --recursive cd .. 编译源码
cd Firmware make px4fmu-v2_default 针对PX4 FMU v2.X的板子 如果你没有按照ninja编译器,你看到的应该是下面的结果代表成功
[100%] Linking CXX executable firmware_nuttx [100%] Built target firmware_nuttx Scanning dependencies of target build_firmware_px4fmu-v2 [100%] Generating nuttx-px4fmu-v2-default.px4 [100%] Built target build_firmware_px4fmu-v2 如果你使用了ninja编译器,看到下面内容代表编译成功 PX4 CONFIG: /home/lyonlui/src/Firmware/build_px4fmu-v2_default ninja: Entering directory `/home/lyonlui/src/Firmware/build_px4fmu-v2_default' [500/500] Generating nuttx-px4fmu-v2-default.px4  同所有单片机系统和硬件设备一样,px4编译也会产生一个固件,这个固件就在文件夹/Firmware/build_px4fmu-v2_default/src/firmware/nuttx下面,文件名为nuttx-px4fmu-v2-default.px4 将你的px4同电脑连接,电脑会自动安装驱动,不自动安装就使用驱动精灵,实在不行就问卖硬件的客服吧!! 驱动安装好后你会设备管理器里面看到以下内容:
打开虚拟机ubuntu,如何在工具栏选中虚拟机->可移动设备->PX4 FMU v2.x ->连接





设备就可以和linux连接了,接下来就是将编译好的固件下载到板子上了 使用命令: make px4fmu-v2_default upload 下载成功你会看到:
Erase : [====================] 100.0% Program: [====================] 100.0% Verify : [====================] 100.0% Rebooting. [100%] Built target upload 自此你就完成了px4开发环境的搭建了。
最后说说关于图形开发环境,我按照官网给的教程一步一步搭建,最后也能编译,但始终无法生成可烧录文件,而且新工程内的makefile文件并无upload功能,所以图形开发环境我是没搭建出来的。(官方说px4官方支持的图形开发环境是qt,所以我就搭了qt的,没搭成功,不知道eclipes怎么样)。有那位大神搭建好qt集成开发环境的告知小弟一声。