查看: 608|回复: 2

一天精通无人机:初级篇系列第 13 讲:飞控程序下载与编译

[复制链接]

35

主题

804

帖子

1597

积分

金牌飞友

Rank: 6Rank: 6

积分
1597
飞币
786
注册时间
2017-8-25
发表于 2022-10-27 21:43:48 | 显示全部楼层 |阅读模式
今天我们来一起了解开源无人机控制程序的下载,编译与安装。我们选用的开源无人机飞行控制程序为PX4,这是一款非常优秀的开源程序,支持多种类型的无人机、无人车和无人船。

        需要说明的是:下载,编译,安装PX4飞控程序的整个过程均需要在Linux操作系统下完成,所以对于今后的所有的文章都会在Linux系统下来给大家讲解。希望大家对Linux操作系统有一些基础了解,并会一些简单的操作(请参见《一点一滴学Linux》)。另外对于Linux的发行版选择方面,作者选用的是Fedora操作系统,版本为28。而目前网上多数朋友用的都是Ubuntu操作系统通常是14.04或16.04或18.04,对于不同的Linux发行版其操作方式略有不同,请读者不要对操作过程死记硬背,而需要明白每一个步骤的功能,只有理解之后才能够活学活用。
一、开源飞控PX4下载
        PX4的项目主页地址为:
http://px4.io/
        我们可以在PX4的项目的主页中对其做简单的了解。PX4开源程序的下载地址为:
飞控固件:
https://github.com/PX4/Bootloader
BootLoader:
https://github.com/PX4/Firmware
        这是一个采用git仓库管理开源代码的项目,下载飞控固件代码的命令:
git clone https://github.com/PX4/Firmware.git
git clone https://github.com/PX4/Bootloader.git
        关于BootLoader的相关不是我们本节的内容,我们只关心Firmware的程序,也就是飞控固件程序。下载过程比较长,需要耐心等等,下载完成之后在本地目录中就会出现Firmware文件夹,我们需要进入此文件夹,并执行git子模块初始化:
git submodule update --init --recursive
        我们可以使用ls命令来查看此目录下的文件列表:
├── cmake
│   ├── cmake_hexagon
│   ├── common
│   ├── configs
│   └── toolchains
├── Documentation
├── integrationtests
│   └── python_src
├── launch
├── mavlink
│   └── include
├── msg
│   ├── ros
│   ├── templates
│   └── tools
├── platforms
│   ├── nuttx
│   ├── posix
│   └── qurt
├── posix-configs
│   ├── bbblue
│   ├── bebop
│   ├── eagle
│   ├── excelsior
│   ├── ocpoc
│   ├── rpi
│   └── SITL
├── ROMFS
│   ├── px4fmu_common
│   ├── px4fmu_test
│   └── tap_common
├── src
│   ├── drivers
│   ├── examples
│   ├── include
│   ├── lib
│   ├── modules
│   ├── platforms
│   ├── systemcmds
│   └── templates
└── Tools

        接下来我们来讲述在Linux搭建PX4的开发环境。
二、Fedora下开发环境
        在Fedora下通常使用YUM来管理和安装RPM软件包(请参见《YUM使用》)。
1.Python环境:
        PX4中使用了很多Python脚本程序来对飞控工程进行额外的处理,也就是一些处理代码的便携工具。因此我们需要安装Python开发环境:
sudo yum groupinstall “Development Tools”
sudo yum install python-setuptools python-numpy
sudo easy_install pyserial
sudo easy_install pexpect
sudo easy_install toml
sudo yum install openocd libftdi-devel libftdi-python python-argparse flex bison-devel ncurses-devel ncurses-libs autoconf texinfo libtool zlib-devel cmake
2.arm-gcc交叉编译器
        下载GCC编译工具:
wget https://releases.linaro.org/components/toolchain/binaries/6.4-2018.05/arm-linux-gnueabihf/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
        将下载后的压缩包解压:
tar -xvf gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
        解压后会在当前目录下生成一个gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf的文件夹,我们再修改/etc/profile文件的内容,将此文件夹加入环境变量中:
sudo vim /etc/profile
        在最后加入
export PX4_CROSS_GCC=/data/apps/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf
export PATH=$PX4_CROSS_GCC/bin:$PATH
        其中/data/apps/是刚刚下载gcc文件所在的目录,这里需要修改成实际的路径。然后
source /etc/profile
        使环境变量生效,或者重启计算机也可以。当环境变量生效之后,我们可以执行下面命令来确认gcc是否生效:
arm-linux-gnueabihf-gcc --version
        如果gcc安装成功则会有下面内容的输出:
arm-linux-gnueabihf-gcc (Linaro GCC 6.4-2018.05) 6.4.1 20180425 [linaro-6.4-2018.05 revision 7b15d0869c096fe39603ad63dc19ab7cf035eb70]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3.Ninja构建工具
        由于PX4程序架构较大,编译过程比较慢,我们还可以使用Ninja来加快编译速度:
wget https://github.com/martine/ninja/releases/download/v-1.8.2/ninja-linux.zipunzip ninja-linux.zip
        修改/etc/profile加入环境变量
source /etc/profile
        在最后加入
export NINJA_HOME=/data/apps/ninja-1.8.2
export PATH=$NINJA_HOME:$PATH
        使环境变量生效,或者重启计算机也可以。当环境变量生效之后,我们可以执行下面命令来确认ninja是否生效:
ninja --version1.8.2
三、固件程序编译与烧写
       PX4还支持其它很多编译选项,例如:
px4cannode-v1_default
px4esc-v1_default
px4fmu_firmware
px4fmu-v2_default
px4fmu-v2_lpe
px4fmu-v2_test
px4fmu-v3_default
px4fmu-v3_rtps
px4fmu-v4_default
px4fmu-v4pro_default
px4fmu-v4pro_rtps
px4fmu-v4_rtps
px4fmu-v5_default
px4fmu-v5_rtps
px4io-v2_default
px4_metadata
px4nucleoF767ZI-v1_default
px4-same70xplained-v1_default
px4-stm32f4discovery_default
        由于我们采用的硬件平台Pixhawk是2.4.8,所以在固件编译选项中我们需要选择px4fmu-v3_default,执行下面编译命令:
make px4fmu-v3_default
        编译内容如下:
-- PX4 VERSION: v1.8.0-907-g7f41ead23
-- CONFIG: nuttx_px4fmu-v3_default
-- Build Type: MinSizeRel
-- The ASM compiler identification is GNU
-- Found assembler: /data/apps/gcc-arm-none-eabi/bin/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.15")
-- Found PY_jinja2: /usr/lib/python2.7/site-packages/jinja2  
-- C compiler: arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
-- C++ compiler: arm-none-eabi-g++ (GNU Tools for ARM Embedded Processors) 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
-- PX4 ECL: Very lightweight Estimation & Control Library v0.9.0-581-g34cd136
-- Building and including px4io-v2
-- Using C++11
-- Release build type: MinSizeRel
-- Adding UAVCAN STM32 platform driver
-- NuttX: px4fmu-v2 nsh cortex-m4
-- ROMFS: px4fmu_common
-- Configuring done
-- Generating done
-- Build files have been written to: /data/work/workspace/px4/Firmware/build/nuttx_px4fmu-v3_default
ninja: Entering directory `/data/work/workspace/px4/Firmware/build/nuttx_px4fmu-v3_default'
[1031/1031] Creating /data/work/workspace/px4/Firmware/build/nuttx_px4fmu-v3_default/px4fmu-v3_default.px4
        我们可以看到,编译完成后会在build/nuttx_px4fmu-v3_default/目录下生成一个叫px4fmu-v3_default.px4的文件,这个文件就是我们需要烧写到Pixhawk中的固件程序。
        接下来我们将Pixhaw使用USB线接入到计算机上,在/dev/目录下会有一个叫作ACM0的设备文件,即是Pixhawk飞控,如果没有这个文件,可能是当前用户没有此USB设备的读写权限,解决办法是将下面内容保存为10-px4.rules文件:
SUBSYSTEMS=="usb", KERNEL=="ttyACM0", ATTRS{idVendor}=="575a", ATTRS{idProduct}=="0041", GROUP="dialout", MODE="0666"
        然后将这个10-px4.rules文件复制到/etc/udev/rules.d/目录下:
cp 10-px4.rules /etc/udev/rules.d/
        之后重新插拔Pixhawk即可,如果/dev/ACM0仍然没有出现,则需要重启计算机。接下来删除ModemManager软件包,并为当前用户加入dialout组
sudo yum remove ModemManager
sudo usermod -aG dialout $USER
        最后,执行固件烧写命令:
make px4fmu-v3_default upload
        烧写过程如下:
Loaded firmware for 9,0, size: 154873 bytes, waiting for the bootloader...
If the board does not respond within 1-2 seconds, unplug and re-plug the USB connector.
Attempting reboot on /dev/ttyACM0 with baudrate=115200...
If the board does not respond, unplug and re-plug the USB connector.
Found board 9,0 bootloader rev 5 on /dev/ttyACM0

family: STM32F42x
revision: 3
flash 2080768

Erase     : [====================] 100.0%
Program : [====================] 100.0%
Verify      : [====================] 100.0%
Rebooting.

欢迎关注公众号:编程外星人

36

主题

801

帖子

1575

积分

金牌飞友

Rank: 6Rank: 6

积分
1575
飞币
772
注册时间
2017-9-25
发表于 2022-10-27 21:57:07 | 显示全部楼层
晕了

34

主题

781

帖子

1538

积分

金牌飞友

Rank: 6Rank: 6

积分
1538
飞币
744
注册时间
2017-9-23
发表于 2022-10-27 22:11:28 | 显示全部楼层
分开来每个字都认识,合在一起一个也看不懂,哈哈哈哈
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表