前段时间linux崩溃了,桌面进去后只有背景,折腾好久没搞定,为了节省时间索性重装了系统,同时也借这个机会从头记载一下作为初学者的学习过程。主要是按PX4的官网初学者教程进行,把其中遇到的一些初学者容易遇到的问题罗列出来,由于对于国内这方面的资料相对缺乏,希望能给大家提供一些帮助,也算是自我学习的一个整理。
如果你还不是很了解关于飞行器的这个项目PX4,建议迅速跳到PX4的官网一探究竟。简单来说,PX4是一个软、硬件开源项目(遵守BSD协议),目的在于为学术、爱好和工业团体提供一款低成本高性能的高端的自驾仪。这个项目源于 ETH Zurich (苏黎世联邦理工大学)的计算机视觉与几何实验室的PIXHAWK项目、并得到了自主系统实验室和 自动控制实验室的支持 ,以及一些出色的个人(Contact and Credits)也参与其中,包括 3D Robotics 和 international 3DR distributors的成员。
前期准备
为了让大家能与我的学习保持同步,先介绍一下在搭建这个PX4环境前我已经做好的工作:
- 硬件一套,包括DJI F450机架、Pixhawk 2.4.6 mini飞控、好盈乐天20A电调、1045正反桨、银燕电机2216、天地飞6通道遥控器。详情见淘宝链接里的套餐方案。
- 软件环境,使用的最新发行版Ubuntu 15.10操作系统。
工具链安装
在准备工作做好并对PX4有了一定的了解后,从开发者快速入门教程开始PX4的环境搭建,对于Linux
这里直接跳到了工具链的安装。按照教程说的命令去执行就可以了,只要你的网速够好,相信很快就能完成任务。说明一下这里做了哪些事情:
- 更新软件包列表并安装所有PX4构建目标的依赖。
- ubuntu自带的串口调制解调器严重的影响到了机器人串口相关的使用,可以没有任何副作用的卸载掉。
- 安装模拟工具CLANG 3.5。
添加当前用户到组”dialout“(如果这步没做,会导致很多用户权限问题)。
1
~ $ sudo usermod -a -G dialout $USER
Tip
:如果你是Windows用户,可以点击视频教程,但是不推荐使用Windows进行开发。
代码编译
然后就到了编译代码的阶段,那么首先得弄到代码,按照这个里面的步骤去做就好了,经测试ubuntu 14.04编译没有出现问题,建议安装ninja,它编译的速度比make要快。
想必有不懂Git是个啥的童鞋,那就看看这个Git教程-廖雪峰的官方网站/git BOOK吧,保证有帮助。比如我们的项目可以这么做:
1 | # => 本地创建文件夹,并关联远程仓库 |
关于下载代码这块,通过ssh支持的原生git协议下载速度最快,但是要先生成SSH keys,更多见教程,例如如采用原生git协议下载开源代码可以用
1 | ~ $ git clone git@github.com:PX4/Firmware.git |
--------------ubuntu15.10 issues--------------
如果你跟我一样用的是ubuntu 15.10,需要进行arm-none-eabi重新安装,默认是最新版,换成4.8版本,官网上的解决办法见地址,当然你也可以采用我下面的办法。
首先了解见博文,然后去GNU官方下载地址:https://launchpad.net/gcc-arm-embedded/+download下载gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2
,或者直接使用命令
1 | wget wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2 |
然后进入下载文件夹,进行如下操作:
1 | pushd . |
安装ccache,加快编译速度。
1 | sudo apt-get install ccache |
如果PC是ubuntu 64位系统,arm-none-eabi是直接下载人家编译好的32位的话,还需要一个东东:
1 | sudo apt-get install lsb-core |
测试安装如下,如果出现如下信息,交叉编译环境搭建就没有什么问题了
1 | ~/src/Firmware$ arm-none-eabi-g++ -v |
make成功后如下:
一般情况下,make出现主要问题有:
- arm-none-eabi路径不对
按如上arm-none-eabi重新安装设置即可。 arm-none-eabi-g++命令存在但报错找不到文件
安装32位的运行库。1
sudo apt-get install libc6:i386 libgcc1:i386 libstdc++5:i386 libstdc++6:i386 lib32z1 lib32ncurses5
没有更新Git子模块
1
2
3
4~ $ git submodule init
~ $ git submodule update --recursive
#或者只要一行命令
~ $ git submodule update --init --recursive子模组问题
无法在子模组路径 ‘mavlink/include/mavlink/v2.0’ 中检出 ‘914eafd83851c499302aeb6f702da9069006f8f0’,一般删掉mavlink目录重新update就好了。或者先git submodule sync –recursive同步,再git submodule update –init –recursive更新。需要重新编译
如果之前编译是可以的,更新后不能编译,试着删除根目录build_*文件夹,然后重新编译。找不到/usr/bin/arm-none-eabi-objcopy,或者其它的也可以用类似的方法
1
sudo ln -s /opt/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-objcopy /usr/bin/
如果连接不上github,可以先试试这个连通站点
1
2 >~ $ ssh -T git@github.com
>
使用make px4fmu-v2_default upload
即可将固件上传到pixhawk,这个过程可能需要重新插拔USB线,上传完成如下:
这里要做的事情主要是:
- 克隆PX4软件到本地,
- make编译,
- 连接USB到无人机硬件,上传固件
软件在环测试(SITL)
在直接到硬件之前,建议将模拟运行作为下一步。这个东西看起来很高端,有点摸不着头脑,以前没接触过,也觉得很深奥。跳到这里,看看赋予它的概念:软件在环仿真运行的主机上的完整系统,并模拟自动驾驶仪。SITL还可以参考Ardupilot的文档。它通过本地网络连接到模拟器。启动运行如下:
下面请将想办法给大家介绍清楚这个东西是什么,怎么用到PX4上,用到它有什么作用:
建议:如果有比较棘手的问题,可以在这里提问,好多不解的问题可以少走很多路。比如:
可以先了解PX4仿真的一些概念。PX4平台支持软件在环和硬件在环仿真。不同的是,使用SITL时,完整的模拟运行在主机(台式机、笔记本电脑),没有自动驾驶仪的硬件连接。这是测试新的算法和控制的最优办法,但它忽略了类似的硬件时间消耗或类似于堆栈大小的限制的事情。硬件在环仿真解决了这个问题,但是它的建立过程比较费时,因为硬件需要启动和刷新固件。软件在环仿真又分两种:标准软件在环仿真和ROS软件在环仿真。官方推荐使用标准软件在环仿真。标准软件在环仿真在单一的应用程序里以线程的形式最小依赖运行每个控制器和估算器。
下面是具体该怎么操作,最新的文档请到这里,建议参考这篇,但是新的QGC已经不需要这些步骤了,可以自动连接。
安装依赖项。
1
2# => 原网页为sudo apt-get install ant,经测试应该为如下
~ $ sudo apt-get install ant openjdk-7-jdk openjdk-7-jre启动、编译目标。
1
~ $ make posix_sitl_default jmavsim
起飞。
1
pxh> commander takeoff
完成之后如图:
仿真时需要用到地面站QGroundControl( for short),然后进行QGC 的安装,由于它的篇幅较大,可以给它开启新的一节。
地面控制站QGC
QGC的官网是http://qgroundcontrol.org,可以从这里下载比较稳定的安装包解压,建议下载daily build的,里面有一些新的功能后面要用到,但是还是得安装Qt,如果不安装Qt,打开QGC会有缺少动态链接库的问题,从这里可以看到后缀名为.run的文件,点击后面的details,选择一个区域比较近的地址进行下载,下载完成后进行如下操作。
1 | ~ $ chmod 777 qt-opensource-linux-x64-5.7.1.run |
界面如下:
这里再回归到软件在环仿真上面来。当进行到上一节的commander takeoff命令后,打开QGC,点击又上角的Default UDP Link即可连接模拟器中的无人机,这样就可以通过地面在对模拟器中的无人机进行控制和数据分析,建议:QGC可支持操纵杆,如果想要手动输入,需要把系统置于手动飞行模式 (e.g. POSCTL, position control)。注意:需要下载daily build版的QGC
才能启动操纵杆。启动操纵杆如下:
操纵杆如下:
界面如下:
Gazebo仿真
这是另外一种软件仿真,是一个自主机器人3D仿真环境。它能够作为一个完整的机器人仿真套件或脱机用于机器人。其中Plugin是自行编译的,过程如下:
安装过程如下:
1 | # => 安装Gazebo 6仿真器(ubuntu 15.10)<http://gazebosim.org/tutorials?tut=install_ubuntu&ver=6.0&cat=install> |
下面可以按照教程进入仿真。
1 | ~ $ cd ~/src/Firmware |
QtCreator IDE建立工程
Qt Creator是最友好的变体,因此是官方唯一支持的IDE。除非你是Eclipse 或 Sublime方面的专家,否则不推荐使用!
安装完qmake后,还要安装qtcreator,ubuntu下如下操作:
1 | ~ $ sudo apt-get install qtcreator |
常见功能如下:
打开Qt Creator之前, 应该创建project文件:
1 | $ cd ~/src/Firmware |
Ubuntu用户只要导入主文件夹里的CMakeLists.txt文件就可以了,打开qtcreator,通过File -> Open File or Project -> 选择CMakeLists.txt
构建目录选择src/Firmware-build
出现如下现象时点击完成即可
点击项目进入配置,配置页面见下图,详细配置见原文视频
配置完成后,点击左下角的运行,编译输出如下
连接USB到pixhawk,点击应用程序输出
栏的绿色按钮重新执行此运行配置
即可进行上传,输出如下
如果你比较喜欢使用Sublime Text,请按照linux下sublime text 2使用技巧安装使用,然后进入工程目录,执行命令即可。
1 | $ cscope -Rbkq |
编译代码快捷键为:Ctrl + B
总结
教程到这里,基本的环境算是搭建好了,接下来应该就是各个模块的学习了,欢迎参考接下来的其它文章。