最近搞固件二次开发时的学习过程以及踩坑记录,希望能帮助大家。
PX4安装
最近在进行PX4固件二次开发,遂学习修改固件编译烧录
在github上下载源码包
git clone https://github.com/PX4/PX4-Autopilot.git
mv PX4-Autopilot PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.13.2 #对应固件版本
git submodule update --init --recursive
make px4_sitl_default gazebo
gihub上下载比较慢,这里放一下压缩包,直接编译即可
链接: https://pan.baidu.com/s/1oBFaly2pbQtMROh0akk23w
提取码: HHHH
cd PX4_Firmware
make px4_sitl_default gazebo
编译成功会打开gazebo,并有一支小四轴。
PX4固件编译
运行源码中的脚本安装依赖
bash ./Firmware/Tools/setup/ubuntu.sh
其中下载依赖有点多,可能会出现网络超时,多试几次即可,最后安提示重启。
其中下载gcc-,g++等类似依赖时下载会很慢,直接取消 即可,不要用它安装的,很浪费时间。
安装依赖完成后开始编译固件。
在Firmware下编译
cd Firmware
make px4_... #按TAB检索一下会出现很多版本
这里固件只要你编译完成,就和github上下载的一样,注意,这里固件版本都是1.13.2,即为你一开始下载的安装包的固件版本。
make px4_fmu-v5_default
根据飞控不同请下载对应的版本,链接
报错及解决方法
1.作者首先出现的报错如下
...
arm-none-eabi-g++
...
No CMAKE_CXX_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable “CXX” or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
就是上面安装依赖时没有装gcc的结果。注:就算上面安装完了这里我还是出现了这个报错。
sudo apt-get install gcc-arm-none-eabi
直接安装,速度很快。
2.AttributeError: module 'em' has no attribute 'RAW_OPT'
说是在“empy”这个库中没有“RAW_OPT”这个属性,是由于empy库的版本太高,这里要降版本。
pip3 uninatall empy
pip3 install empy==3.3.2
3.error: ‘__ULong‘ does not name a type __ULong i[2];
这是由于文件中没有定义ULong这个数据类型,手动添加即可。
sudo gedit /usr/include/newlib/math.h
在代码开头添加一行:
#define __ULong long
4.ninja: build stopped: subcommand failed.
这个报错一般是我在编译完成后再次编译会出现。
make clean
清除后再次编译即可。注:这个会把你已经编译的所有版本固件都删除(在build中),谨慎使用。
编译完成出现下图
5.region `flash‘ overflowed by 4253 bytes
作者在编译v2版本固件时会有这个错误,原因是flash容量超额了,添加flash限额即可。
在/PX4_Firmware/boards/px4/fmu-v2/nuttx-config/scripts中,打开script.ld
将flash length改成2032
固件烧录
usb插上飞控后输入这一行:
make px4_fmu-v5_default upload
可能会出现一直等待的情况
可以去QGC地面站去下载固件到飞控。
选择自定义固件
选择我们编译好的.px4文件
在 Firmware/build/px4_fmu-v*_default/内即可。
补充
目前最新版QGC以及不支持18.04了,所以可以从官网下载低版本安装。
安装4.2.6及以下就行
下载对应的.AppImage文件
sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor0 -y
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage (or double click)
作者学习中的所有问题都在这里了,如果有问题,欢迎在评论区指正。