话说,终于搞定了在一套ubuntu里既能编译px4又能编译apm的问题

原创 2017年05月08日 10:48:57

这一篇算是对之前环境准备的总结,因为我发现即使是很熟练的开发者在选择开发环境的时候其实也蛮苦恼的…所以把现阶段部署开发环境的一些新的写出来,至少在这个时间点,现在大约是17年近中旬吧,按照我说的做,一定可以明明白白的把两套项目完整的最新固件都编译过去.

系统:
      ubuntu 16.10
交叉编译器:  
      gcc-arm-none-eabi-5_4-2016q2
      gcc-arm-none-eabi-4_9-2015q3
      waf(这东西是按照apm官网来的编译工具,我也是第一次用,反正看着效率还是编译速度蛮高的)
配置:
      dell precision 5520 i7 7820,东芝ssd,ddr4

  • px4的编译很简单,按照官网来,基本上是step by step.有一点要注意的就是我在选择交叉编译器的时候选了5.4版本,算是给自己挖了个小坑.

  • apm的编译一共出现了三个问题:

第一个是交叉编译工具的版本问题,仅最高支持到4.9.3,然而我之前配置px的时候盲目求新,所以需要解决ubuntu下不同交叉编译工具的版本切换问题,好在不是太麻烦.具体问题可以看这里解决

第二个问题还是编译问题,缺少pip添加的相关包,具体就是future库和lxml库,这个问题比较绕,因为一般报错的时候不是直接报的:

In file included from /home/tianqide42/apm/ardupilot/libraries/GCS_MAVLink/GCS.h:8:0,
                 from /home/tianqide42/apm/ardupilot/ArduCopter/Copter.h:38,
                 from /home/tianqide42/apm/ardupilot/ArduCopter/control_guided_nogps.cpp:1:
/home/tianqide42/apm/ardupilot/libraries/GCS_MAVLink/GCS_MAVLink.h:25:56: fatal error: include/mavlink/v2.0/ardupilotmega/version.h: No such file or directory
 #include "include/mavlink/v2.0/ardupilotmega/version.h"

他一般会报没有这个目录或文件,我忘了当时手动进目录去找的时候到底有还是没有了…好象是没有…

其实还有一个同样原因的错,我现在截不到了,是缺少引入的future库,这东西其实也是一个python相关的依赖库,本文后边我们就会知道需要用pip安装就好了.

所以我们就可以说:众所周知mavlink一般是由python相关的一些依赖库生成的某些相关编译的东西,那么总是要解决问题,那怎么解决呢,这个问题不管我在apm的托管页面上直接搜(就是在issues那里搜),还是在bing里或者stackoverflow里搜,其实结果差不多,具体可看这里或者这里

其实他们都出自这里,就是我之前博客说的要善用issuse,反正这阶段的问题在搜索引擎大海捞针的搜真的不好使了,在这里还能司马当作活马医.

解决办法也很简单,就是

pip install future lxml

如果你像我一样运气还十分的不好,可能还有这种问题:

OSError: [Errno 13] 权限不够: '/usr/local/lib/python2.7/dist-packages/_dummy_thread'

这个问题我的解决办法是直接加sudo

不过我看网上一般不推荐直接sudo pip,其实关于python我并不是十分了解为啥不能,今年我会进行一定程度的学习,将来说不定可以解释,我感觉这些应该都是很基础的问题,只是现在自己并不太了解.

安装的时候又双叒叕会报:

The directory '/home/tianqide42/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/tianqide42/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

真是一波三折啊…

其实也可以忽略,参考这篇博客

最后仔细看了下
sudo pip install requests
的报错信息
才知道要加上  -H



sudo -H pip install requests
这样就好了



-H, --set-home
                 Request that the security policy set the HOME environment
                 variable to the home directory specified by the target user's
                 password database entry.  Depending on the policy, this may
                 be the default behavior.
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )

因为我没这么做反正也编译成功了.

最后的问题是waf编译,如果之前pip没有安装future和lxml的话还是会类似的错,安装完之后就好了.

其实这些问题感觉都不是真正的编译,应该多涉猎一些常用语言或工具,比如python之类的,需要又一些其他知识,善用官方给的一些文档和问题搜索工具,比如这个issues等.

以上.

Windows/Ubuntu操作系统下ArduPilot(APM)固件的编译方法

ardupilot(APM)的代码蛮好的嘛……
  • oqqENvY12
  • oqqENvY12
  • 2017年03月06日 16:31
  • 1931

关于apm使用./waf编译的笔记

系统:       ubuntu 16.10 目标工程:       ardupilot(以本篇博客发布时间为准刚刚拉下来了一个master) PC配置:       dell precis...
  • wojiao42
  • wojiao42
  • 2017年05月12日 01:20
  • 766

在Linux飞控环境下使用MAVLink教程

在Linux飞控环境下使用MAVLink教程,代码注释完善中~~
  • tsuibeyond
  • tsuibeyond
  • 2016年02月22日 20:49
  • 2647

Ubuntu操作系统下Pixhawk原生固件PX4的编译方法

在Ubuntu上搭建环境相对简单许多,按照PX4中文维基官网的教程即可。 工具链安装 权限设置 把用户添加到用户组 “dialout”(如果这步没做,会导致很多用户权限问题): ...
  • l1250464471
  • l1250464471
  • 2017年06月11日 16:47
  • 832

Ubuntu下构建PX4软件

Ubuntu下构建PX4软件
  • a13526758473
  • a13526758473
  • 2016年07月24日 10:23
  • 1692

Pixhawk交叉编译开发环境的搭建

pixhawk 学习总结1 Pixhawk是现在最新出的一款开源飞控硬件,是由飞控硬件厂商3DR生产的,其前身是APM,由于APM的处理器接近负荷,无法处理更加复杂的运算,之后推出了PX4系列,采用的...
  • mobisan
  • mobisan
  • 2015年11月04日 12:53
  • 890

waf编译浅学

我说浅学就真是浅学,学坏不负责
  • u012159438
  • u012159438
  • 2014年08月11日 16:59
  • 118

WAF

Web应用防护系统又叫做WAF。按照国际公认的说法,Web应用防火墙是通过执行一系列针对HTTP/HTTPS的网站安全策略来专门为Web应用提供保护的一款产品。随着web的内容与应用越来越丰富,信息量...
  • JPshangdexiaofeixia
  • JPshangdexiaofeixia
  • 2018年01月08日 10:06
  • 34

Ubuntu下编译 ArduCopter

ardupilot线程理解             理解ArduPilot的线程 当你开始学习ArduPilot的基础库的时候,你最好能理解ArduPilot是怎样处理线程的。代码里的 setup...
  • BBZZ2
  • BBZZ2
  • 2016年04月07日 15:42
  • 1853

PIX学习路径-4-使用Ubuntu 16.04 LTS搭建PIXHAWK二次开发环境

PIX学习路径-4-使用Ubuntu 16.04 LTS搭建PIXHAWK二次开发环境
  • Jackey_ONLYFORYOU
  • Jackey_ONLYFORYOU
  • 2016年12月16日 20:52
  • 2346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:话说,终于搞定了在一套ubuntu里既能编译px4又能编译apm的问题
举报原因:
原因补充:

(最多只允许输入30个字)