ubuntu下ardupilot编译环境搭建与仿真

文章目录

  • 前言
  • 一、ardupilot 源码下载
  • 二、编译环境建立
  • 仿真
  • 经验教训
    • 坑1
    • 坑2
  • 参考


前言

虽然怒飞老师给出了详细的windows下的开发环境的搭建教程。但是对于开发者而言,最好的系统环境还是在Linux系统下,尤其一些顶层开发下,还是用ROS香呀,所以我将尝试在ubuntu下建立完整的ardupilot开发环境。这篇文章就作为这个尝试的第一篇笔记,希望可以帮助到之后的朋友。

一、ardupilot 源码下载

由于在github上下载较慢(我懒,还没弄过下载加速),所以建议使用gitee。
ubuntu下ardupilot编译环境搭建与仿真_第1张图片直接搜索一下就有了,搬运日期很新鲜,nice!
在自己喜欢的目录下,进行clone (这里默认大家都安装好了git并熟悉git的基本使用,如果不清楚的同学可以看这里Git教程)

git clone https://gitee.com/gu-kaifeng/ardupilot.git

不出意外的很快就下载完了。

然后我们基于目前最稳定的分支来新建一个分支“new_one”
然后需要更新子模块(这一步很容易失败,得想办法多试试;实在不行可以先用已经更新好的代码。比如我就失败好多次了,为了尽快弄通整个流程,我就用了以前的旧代码,它的子模块已经更新好了)

cd ardupilot
git checkout -b new_one Copter-4.0.7
git submodule update --init --recursive

最后一行命令其实也可以不用弄,在编译环境建立的时候,脚本会给我们自动更新子模块。

二、编译环境建立

ardupilot的开发人员已经帮我们写好了编译环境的一键配置脚本

./Tools/environment_install/install-prereqs-ubuntu.sh -y

有大佬指出这样才能正常运行(注意要先切到environment_install文件下哈)

chmod +x install-prereqs-ubuntu.sh

我自己好像都试过,好像都可以。不重要,反正上面两个总有一个ok。

!!!不过由于国内网络特性,我们需要在修改一些东西。
这里,参考monte3card大佬在知乎的文章。

  • 脚本中首先通过apt-get安装包,但是在国内由于众所周知的原因,默认的安装源下载较慢或是无法下载,安装前需要将apt-get更换为国内安装源。具体可以参考link(实际上,一开始装ubuntu时,我已经在系统设置中将源设置为了国内镜像源,所以这一步我并没有再做,大部分朋友应该也不用)
  • 脚本中使用pip2安装需要的包,同样需要更换为国内源,具体可以参考link
  • 在安装个过程中会安装ARM交叉编译工具链gcc-arm-none-eabi-6-2017-q2-update-linux安装包下载地址,在脚本中默认使用wget下载,速度奇慢无比,可以事先下载(迅雷下起来很快).
    并且自行解压/opt目录下(见下面命令),这样安装的时候会跳过下载,节省很多时间。
tar -jxvf xx.tar.bz2 -C /opt

按照monte3card大佬的说法上述一切顺利的话,最后只用像如下一样配置路径就好,ardupilot 官网也是这么写的。(注意,这个环境的配置命令的作用,如果不重启电脑的话,它只再当前terminal中有效。重启电脑后才算完全生效)

. ~/.profile

至此便大功告成!

仿真

完成了上述的编译环境搭建后,ardupilot的仿真环境也就搭建好了。接下来我们就可以按照官方的说明开始进行仿真。

  • 第一步:
    将目录切换到需要仿真的对象文件夹下
    eg:
cd ardupilot/ArduCopter
  • 第二步:若是第一次进行仿真,请先运行一下sim_vehicle.py -w,运行正常后,使用Ctrl+C kill这个程序的运行。然后执行如下命令:
sim_vehicle.py --console --map

就可以出现仿真界面了:我们可以在终端输入相应的指令来控制飞机,然后再console和map里观察飞机的飞行状况

经验教训


这里是一些自己无意踩到的坑,记录一下。
我自己在最后实际上遇到了意外,这些情况各位看官可能并不会遇到,但是我自己是遇到了。所以我就自己记录一下。

坑1

输入飞控固件的配置指令:

./waf configure --board fmuv3

等着我的不是finished successfull,而是:
ubuntu下ardupilot编译环境搭建与仿真_第2张图片
然后我第一反应是这个好像在怒飞老师那里看见过,果然被我翻到了。ubuntu下ardupilot编译环境搭建与仿真_第3张图片但是重启并没有解决我的问题。那我猜测肯定是交叉编译环境没有成功地添加路径。于是我找到了这个帖子link
按照这个帖子的方法,和我自己的尝试,进行如下操作:

  1. 打开这个文本
vim /etc/profile

  1. 在文本最后添加这行(注意需要在最后一行代码后空一行再添加,不然会失败)
export PATH=$PATH:/usr/lib/gcc/gcc-arm-none-eabi-4_9-2014q4/bin
  1. 保存退出后,使能环境变量
source /etc/profile

此命令只在当前终端有效,若需要在其它终端中使用,需要重启计算机。在当前终端执行我们熟悉的waf命令后,everthing is ok! 最棒的是原来这台在windows环境下编译需要花费4min30s左右,而现在在ubuntu系统下,编译时间缩短为了1mim30subuntu下ardupilot编译环境搭建与仿真_第4张图片

坑2

在运行脚本时,我犯了两个致命错误,在编译上不会有问题,但是在进行仿真运行就让我找了很久的问题。

  • 错误1:在配置pip国内镜像源时,把第一行的[global]没复制全,导致pip一直报错: ConfigParser.MissingSectionHeaderError: File contains no section headers.

  • 解决方法:把pip的那个配置文件 .pip/pip.conf 里的错误改正

  • 错误2:既然已经配置好了国内的高速镜像源,我还开了代理,解决了错误1后,它又一直报错:TypeError: unsupported operand type(s) for -=: ‘Retry’ and ‘int’

  • 解决方法:关闭代理通道,重启电脑

解决这两个问题后再重新操作一下整个编译环境的配置过程,最终得到了完美解决


参考

1.https://zhuanlan.zhihu.com/p/61616055
2.https://ardupilot.org/dev/docs/building-setup-linux.html#building-setup-linux
3.https://blog.csdn.net/yk150915/article/details/80117082

你可能感兴趣的:(ubuntu,linux,git)