Pixhawk Development

Pixhawk飞控支持两种飞行栈(Flight Stack),分别是:

  • PX4 Flight Stack:PX4团队开发的一组应用程序/模块,运行在PX4中间件之上。
  • APM Flight Stack:APM团队开发的单一应用程序/模块,运行在PX4中间件之上。

Pixhawk飞行栈可以运行在NuttX RTOS或者Embedded Linux+ROS之上

PX4开发环境准备

参考资料

PX4的开发同时支持Linux、Mac和Windows,它们的开发环境设置各有不同。

Mac开发环境设置

安装Xcode,并安装CommandLine Tools。

安装FTDI芯片官方驱动

安装Homebrew

安装git:

brew install git

配置git:

git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto
git config --global user.name "Your Name"
git config --global user.email [email protected]

如果你在安装了FTDI驱动之后,将PX4用USB连接到Mac上,可以使用如下命令检查连接是否有效:

system_profiler SPUSBDataType

如果你打算使用OpenOCD JTAG适配器,那么请安装openocd软件:

brew install openocd --enable-ft2232_libftdi

然后在.bash_profile文件中设置JTAGCONFIG环境变量:

export JTAGCONFIG=interface/jtagkey-tiny.cfg

上面的interface/jtagkey-tiny.cfg是你的OpenOCD JTAG适配器的配置文件。

接下来我们安装工具链:

# 将PX4的github repo列入Homebrew的软件仓库
brew tap PX4/homebrew-px4
# 更新PX4的内容
brew update

brew install genromfs
# 官网上少了这一步,会在安装kconfig-frontends时提示缺少某些autoconf的宏
brew install pkg-config
brew install kconfig-frontends
# 安装交叉编译工具
brew install gcc-arm-none-eabi
# 这个有用?
brew install astyle

安装完成后,可以使用如下命令测试工具链是否安装成功:

arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601]
Copyright (C) 2012 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.

使用pip安装pyserial串口工具:

sudo easy_install pip
sudo pip install pyserial empy

在Mac上编译并烧写固件(NuttX、RTOS)

我们假设你在~/src下放置所有PX4的相关代码。

首先,克隆Firmware代码库:

cd ~/src
git clone --recursive https://github.com/PX4/Firmware

Firmware代码库是总的代码库,其中有很多submodule,包括:

然后,获取里面的submodule:

cd Firmware
git submodule init
git submodule update

开始编译:

cd ~/src/Firmware
make distclean
make archives
make -j8

编译完成后,FMU和IO对应的映像文件就会出现在Firmware/Images目录下面。

也可以直接指定编译目标:

make -j8 px4fmu-v2_default

有了映像文件,就可以将其烧写到飞控里去了。有两种烧写映像文件的方式:一种是用PX4 Bootloader通过USB线烧写;另一种是用ST-LINK通过JTAG/SWD烧写。后一种方法是给底层开发者使用的,如果没有特殊必要,请使用第一种方式,这也是推荐的方式。

注:ST-LINK是意法半导体为自家STM8和STM32提供的片上调试器/编程器。淘宝上的山寨品好像很便宜,但是这东西和JLink比是不是JLink会好一点呢?

使用USB线烧写

这种方式更安全、更适合于新手。因为下面介绍的JTAG方式可能会刷掉PX4 Bootloader(当然还是可以重新刷回来的)。

首先,请先按照上面的步骤编译好固件的映像文件。然后使用如下的命令烧写:

make upload px4fmu-v2_default -j8

这时候终端的输出应该类似于:

working in [...]/Firmware/Images
Attempting to flash PX4FMU board via USB
Loaded firmware for 5,0, waiting for the bootloader...

当你看到waiting for the bootloader字样后,请按下PX4FMU的reset按钮。如果之前你的Pixhawk飞控连在电脑上并且成功reset,那么就会刷写新固件,终端上会显示类似于这样的内容:

Found board 5,0 on /dev/tty[...]
erase...
program...
verify...
done, rebooting.

如果你对源代码进行了修改,那么就必须重新编译固件。有些修改不需要完全重新编译,但是有些修改需要。

如果远端的PX4 firmware或NuttX代码库发生了修改,那么首先需要保证你的工作区是干净的(git checkout – .或者git stash save –keep-index或者git commit),然后执行如下命令:

cd Firmware
make distclean
git pull origin master
git submodule update
make archives
make -j8

如果你修改了Firmware/src目录下的头文件,那么不需要重新编译NuttX,但是需要执行下面的命令清理Firmware的工作区:

cd Firmware
make clean
make -j8

如果你修改了其他部分的代码,那么不需要重新编译NuttX,只需要执行如下命令:

cd Firmware
make upload px4fmu-v2_default -j8

使用JTAG/SWD烧写

uframer

首先,我们安装ST-LINK的软件。教程来自于http://gpio.kaltpost.de/?page_id=148

git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make
sudo install -s -m 775 gdbserver/st-util /usr/bin/st-util
sudo install -s -m 775 flash/st-flash /usr/bin/st-flash

接下来,我们来烧写软件。先启动st-util:

pkill st-util
st-util -p 1234 &

然后启动GDB:

arm-none-eabi-gdb ~/src/Firmware/Build/px4fmu-v2_default.build/firmware.elf

在GDB内输入:

(gdb) tar ext :1234
(gdb) load
(gdb) run

Linux开发环境设置

Windows开发环境设置

results matching ""

    No results matching ""