记录安装以及编译Ardupilot飞控软件一些的问题
总结:问题主要来源于github翻墙不便,以及win10自带Ubuntu引起的交叉编译,
下述1,2,3,4是遇到的问题以及解决,通过步骤5可使用gitee迅速重新搭建环境。
bug汇总:编译文件环境不完整/交叉编译版本/官网步骤遗漏/文件内容下被加密了
1. 编译apj固件坑一:使用指令查看版本:arm-none-eabi-gcc --version,需要下载指定版本,确定为指定6.3.1版本,不能直接下载
(下载地址:wget https://firmware.ardupilot.org/Tools/STM32-tools/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
安装说明:https://ardupilot.org/dev/docs/building-setup-linux.html#building-setup-linux
cd /opt
sudo tar -xjvf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
vi /home/zhangb/.bashrc
添加到末尾:export PATH=$PATH:/opt/gcc-arm-none-eabi-6-2017-q2-update/bin
重启界面,查看版本,如下图所示
)
2. 编译apj固件坑二: -> task in ‘objs/AP_GPS’ failed (exit status 1):
2.1先尝试删除build目录,重新执行编译
rm -rf build/
sudo Tools/scripts/install-prereqs-ubuntu.sh -y
./waf distclean configure build --verbose --jobs 1
先略过此步骤:./waf configure --board Pixhawk1
./waf copter
2.2.找到打印具体错误日志语句:
./waf distclean configure build --verbose --jobs 1
2.3.根据打印日志找到对应135报错行,然后发现报错为成员函数mktime()不存在于rtc(),而mktime属于“time.h”头文件,可直接使用。索性屏蔽AP::rtc().,再次编译,编译ok
2.4.编译完成
3. 编译apj固件坑三:lib/libArduCopter_libs.a: file not recognized: File format not recognized
可能是ubuntu18.04下是64位编译,需要使用32位,后面再次定位问题:编译环境为x86和运行环境是arm,尽管我按照了交叉编译工具,还是出了问题,https://bbs.csdn.net/topics/390145467
问题极有可能出在g++b编译这里,尝试替换为合适编译指令,后面5解决此问题
4. 编译指令: ./waf distclean configure build --verbose --jobs 1 ,错误反馈为:缺少future模块
ImportError: No module named future
解决办法:先换源,更新,
换源地址:https://zhuanlan.zhihu.com/p/61228593
再重新执行sudo Tools/scripts/install-prereqs-ubuntu.sh -y
里面会安装future模块,不换源会连接失败,建议使用清华源
5.最终解决问题3,成功编译出apj固件
问题原因主要有两个:
1是github需要翻墙,更新模块资源不全;
2是win10自带的Ubuntu有bug,会报上述问题3,但是切换到虚拟机,使用官网的iso,则不会;
遂使用国内的gitee进行环境搭建,轻松加愉快,十来分钟搞定!
./waf configure --board Pixhawk1
./waf copter
参考地址如下: https://blog.csdn.net/msq19895070/article/details/105787685
完成编译后对Ardupilot软件分析及代码架构
https://blog.csdn.net/zhangb98/article/details/118541777