多旋翼无人机

    返回首页    发表留言
本文作者:李德强
          第一节 飞控程序下载与编译
 
 

        今天我们来一起了解开源无人机控制程序的下载,编译与安装。我们选用的开源无人机飞行控制程序为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.zip
unzip ninja-linux.zip

        修改/etc/profile加入环境变量

        source /etc/profile

        在最后加入

export NINJA_HOME=/data/apps/ninja-1.8.2
export PATH=$NINJA_HOME:$PATH

        使环境变量生效,或者重启计算机也可以。当环境变量生效之后,我们可以执行下面命令来确认ninja是否生效:

ninja --version

1.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
type: ==
idtype: ==
vid: ffffffff
pid: ffffffff
coa: ///////////////////////////////

sn: 003400273036511738363834
chip: 20016419
family: STM32F42x
revision: 3
flash 2080768

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

 

    返回首页    返回顶部
#1楼  Delta  于 2018年11月18日17:14:36 发表
 
请问你用的啥仿真环境?
#2楼  李德强  于 2018年11月19日19:11:00 发表
 
自己写的仿真程序。

https://github.com/magicworldos/PA-FlightControl
#3楼  药丸  于 2018年12月15日14:11:24 发表
 
vid: ffffffff

pid: ffffffff

coa: ///////////////////////////////

前辈知道烧写的时候出现这个是啥意思吗?总觉得看起来有点异常
#4楼  李德强  于 2018年12月17日09:56:32 发表
 
正常,我这边也是一样的
  看不清?点击刷新

 

  Copyright © 2015-2019 问渠网 辽ICP备15013245号