前言
虽然怒飞老师给出了详细的windows下的开发环境的搭建教程。但是对于开发者而言,最好的系统环境还是在Linux系统下,尤其一些顶层开发下,还是用ROS香呀,所以我将尝试在ubuntu下建立完整的ardupilot开发环境。这篇文章就作为这个尝试的第一篇笔记,希望可以帮助到之后的朋友。
一、ardupilot 源码下载
由于在github上下载较慢(我懒,还没弄过下载加速),所以建议使用gitee。
直接搜索一下就有了,搬运日期很新鲜,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,而是:
然后我第一反应是这个好像在怒飞老师那里看见过,果然被我翻到了。但是重启并没有解决我的问题。那我猜测肯定是交叉编译环境没有成功地添加路径。于是我找到了这个帖子link
按照这个帖子的方法,和我自己的尝试,进行如下操作:
- 打开这个文本
vim /etc/profile
- 在文本最后添加这行(注意需要在最后一行代码后空一行再添加,不然会失败)
export PATH=$PATH:/usr/lib/gcc/gcc-arm-none-eabi-4_9-2014q4/bin
- 保存退出后,使能环境变量
source /etc/profile
此命令只在当前终端有效,若需要在其它终端中使用,需要重启计算机。在当前终端执行我们熟悉的waf命令后,everthing is ok! 最棒的是原来这台在windows环境下编译需要花费4min30s左右,而现在在ubuntu系统下,编译时间缩短为了1mim30s
坑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’
-
解决方法:关闭代理通道,重启电脑
解决这两个问题后再重新操作一下整个编译环境的配置过程,最终得到了完美解决文章来源:https://www.toymoban.com/news/detail-422025.html
参考
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文章来源地址https://www.toymoban.com/news/detail-422025.html
到了这里,关于ubuntu下ardupilot编译环境搭建与仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!