Ubnutu16.04 系统下编译PX4固件方法

2023-05-16

  今天开始准备在Ubuntu16.04下搭建PX4的开发环境。早就听说源代码编译的过程中有很多坑,所以在编译源代码之前在网上搜索了很多教程,其中这个教程写的非常详细:

                https://blog.csdn.net/pix_csdn/article/details/81913610

  这篇博客是2018年8月的,想起自己曾经在2018年5月左右配置过相同的开发环境,踩坑踩到怀疑人生。编译安装过程中的很多问题在这边博客中都可以找到。但是由于我在编译的时候确实出现了跟那篇博文不同的问题,因此决定单独记一下笔记,一来防止自己忘记,二来如果各路大佬看到如果有错误的话也烦请纠正一下。

  首先,添加用户组,然后把Ubuntu自带的modemmanager管理器卸载掉。代码如下(执行完代码需要注销用户并重新登录):

sudo usermod -a -G dialout $USER
sudo usermod -a -G dialout $USER

  接下来就是安装各种前期的库文件,代码如下(可能不仅限于这些,如果后期发现缺哪些链接可以灵活补充):

sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update

sudo apt-get install python-argparse git-core wget zip -y
sudo apt-get install python-empy qtcreator cmake build-essential genromfs -y

sudo apt-get install openjdk-8-jre
sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update

sudo apt-get install python-serial openocd -y
sudo apt-get install flex bison libncurses5-dev autoconf texinfo build-essential -y
sudo apt-get install libftdi-dev libtool zlib1g-dev python-empy -y

sudo apt-get install lsb-core

  可怕,是不是感觉装了好多好多东西。嗯,是的,就是这样。。。。还没有结束,在下载源码编译的过程中,还会出现一些错误,对应的错误信息为”缺少某些模块和某些库文件“,因此,我们可以在编译之前提前把这些缺少的东西提前装上,当然也不能保证100%没问题,如果编译过程中发现缺少某些模块,还是需要额外安装的。代码如下:

sudo apt-get install python-jinja2
sudo apt-get install python-pip
sudo pip install numpy toml

  现在还差一个最重要的模块没有安装,就是gcc-arm-none-eabi,这个是在Ubuntu编译ARM程序的必备工具。我们可以随意安装一个,直接使用sudo apt-get install 方式就可以,但是这样安装的默认版本一般都不能满足要求。在这里,如果各位想试错误的话,可以先暂时随意安装一个,代码如下:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi -y

  安装之后,可以使用arm-none-eabi-gcc --version来查看我们安装的是哪个版本,我这里是4.9.3。

  至此,就可以下载PX4的源码,并且编译安装了。

  第一步:执行如下操作,如果期间提示失败之类的,就将src文件夹中的内容清空,然后重新git clone即可,有时候网速确实慢的可怕,可怕,真可怕。。。

mkdir -p ~/Pixhawk/src
cd ~/Pixhawk/src
git clone https://github.com/PX4/Firmware.git

  第二步:更新第一步下载好的内容,如果不更新,我们会发现缺了好多好多好多东西。。。

cd Firmware
git submodule update --init --recursive

  如果遇到相同的网速之类的问题,处理方法与第一步相同,即删除下载失败的模块文件夹,然后重新执行这个指令。下载完成之后,就可以进行编译。但是在这个时候,我们有两个地方需要注意:

  其一是gcc-arm-none-eabi的版本,我们上文提到过了,也是很多博客中提到的共同问题。

  其二是我们所使用的是哪款硬件,因为Pixhawk和Pixhawk2对应的固件是不一样的,这个问题我们可以访问PX4的Github源代码的网页GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software,下边有详细的说明,如下所示:

  如图可以看出,我们使用的是Pixhawk2,因此需要编译px4_fmu-v3_default这个版本。另外在这里也说明一下,这种ReadMe真的很有用,它有时会帮助我们解决很多问题。下边就可以编译源代码了:

make px4_fmu-v3_default

  不出所料,果然报错了,但是这种错误并不是提示缺少某些东西或者类似Flash内存不足之类的。而是类似于我们编写普通C++代码时出现的类似语法错误、函数调用错误或者文件包含错误等等。很明显,这种错误与我们的系统无关,与我们的开发环境无关,与人家的开源代码也无关。嗯是的,终极原因就是gcc-arm-none-eabi的版本问题!

  我先查看了github网页上的Issues部分,查看有没有类似问题,果然找到了一个(具体哪个问题编号我忘记了,sorry)。里面说他使用了一个"new version(7)"然后,他的编译就"done"了。这里给出gcc-arm-none-eabi的下载链接:

  https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

  我直接下载的当前最近版本:gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2,应该是version8。然后执行以下操作:

#将以前版本的卸载掉
sudo apt-get remove gcc-arm-none-eabi
#解压
tar -jxf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
#移动
sudo mv gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 /opt


  然后进入~/.bashrc文件,在里面添加这样一句话:

export PATH=/opt/gcc-arm-none-eabi-8-2019-q3-update/bin:$PATH

  然后保存并关闭文件,在终端中执行:

source ~/.bashrc

  以上操作的作用是下载新版本(version8)的编译器,然后把他解压移动到/opt文件夹中,并同时添加系统环境变量,目的是为了让PX4能够找到它。现在已经使用最新版本的编译器了,然后同样make px4_fmu-v3_default,发现还是报错!错误是因为两个文件中的两个函数调用方法有问题,不用思考也知道:它是不可能会有问题的。

  同样地,去github的网页的Issues里面搜索相关的问题,发现一位国外小哥确实遇到了,他说"version8 is very strict"有的时候不允许一些”lazy function"的使用。因此,很显然,我们的gcc-arm-none-eabi版本太高了。。。因此,我又去官网下载了version7,然后像安装version8一样把version7安装完成了,注意环境变量的配置,记得把version8相关的环境变量删除掉。然后再执行make px4_fmu-v3_default,我的编译就可以了。

  如果哪里有错误,欢迎各位指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubnutu16.04 系统下编译PX4固件方法 的相关文章

  • 【opencv学习】【轮廓检测】

    今天学习轮廓检测方法 span class token keyword import span cv2 span class token keyword import span numpy span class token keyword
  • Jetson Xavier NX下读取RTSP视频流

    现有一个网络摄像机 xff0c 需要在Jetson Xavier NX平台上读取它的视频流进行图像处理 xff0c 最基本的使用Opencv读取RTSP视频流代码如下 xff1a span class token keyword impor
  • 化繁为简,一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 作者 xff5c 王赟 Maigo 64 知乎 xff08 已授权 xff09 来源 xff5c https zhuanlan zhihu com p 35323714 编
  • 一文详解PnP算法原理

    PnP Perspective n Point 问题的几何结构如图1所示 xff0c 给定3D点的坐标 对应2D点坐标以及内参矩阵 xff0c 求解相机的位姿 数学语言描述如下 xff1a 图1 PnP几何结构 1 直接线性变换法 Dire
  • 多传感器数据标定融合完整教程:时间同步+空间同步(Camera+Lidar+IMU+Radar)

    多传感器融合是一项结合多传感器数据的综合性前沿内容 xff0c 主要包括Camera 激光雷达 IMU 毫米波雷达等传感器的融合 xff0c 在自动驾驶 移动机器人的感知和定位领域中占有非常重要的地位 xff1b 随着AI技术的大规模落地
  • 机器人抓取—— 相机参数与标定 camera_calibration

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 整理丨古月居 相机的参数 参考 xff1a https blog csdn net weixin 43206570 article details 84797361 摄像机
  • ROS下面调用自定义的头文件和.cpp/.so文件(亲测有效)

    前言 ROS下面使用已经编译好的ROS package是很方便的 xff0c 但是大多数我们可能自己定义了一些头文件 xff0c 想去直接引用 xff0c 那么如何在ROS下面调用自己的定义的函数呢 xff1f ROS下调用自定义的头文件
  • catkin_make和cmake

    catkin make是ROS下面的一种编译方式 xff0c 基于cmake xff0c 但是又不同于cmake cmake只能编译指定的package xff0c 但是不同package之间的关系没办法链接 xff0c 而且cmake只能
  • UNIX date命令简介

    date 命令 参数含义 xff1a a xff1a 显示星期简写 Sun Sat A xff1a 显示完整星期 Sunday Saturday b xff1a 显示月份简写 Jan Dec B xff1a 显示完整月份 January D
  • NVIDIA JETSON XAVIER NX烧录(emmc版本)

    目录 0 前言 1 安装虚拟机 2 安装SDKManager 3 使用SDK Manager开始烧录 4 配置系统 5 开发环境的安装 xff08 CUDA xff09 6 遇到问题记录 xff08 如果有其它问题可以留言我补充 xff09
  • NVIDIA JETSON XAVIER NX烧录(sd版本)

    0 前言 本文主要补充上文提到的sd卡版本烧录Jetson Xavier Nx系统的 xff0c 需要准备的东西 一张空白SD卡balenaEtcher工具 JETSON XAVIER NX 开发者套件的SD镜像 xff08 官网下载 xf
  • NVIDIA JETSON XAVIER NX 从SSD盘启动

    0 前言 本文主要补充上文提到的Jetson Xavier Nx系统从ssd盘启动 xff0c 需要准备的东西 xff1a 提前把ssd卡装上Jetson Xavier Nx套件上 xff0c 如下图 1 格式化为GPT 打开ubuntu的
  • 在linux虚拟机上安装docker

    1 简介 Docker是一个开源的应用容器引擎 xff1b 是一个轻量级容器技术 xff1b Docker支持将软件编译成一个镜像 xff1b 然后在镜像中各种软件做好配置 xff0c 将镜像发布出去 xff0c 其他使用者可以直接使用这个
  • win11虚拟机如何安装 Windows11虚拟机安装步骤教程

    想要体验下最新的win11系统 但是又不想在实体机上安装 担心出现系统故障问题怎么办 我们可以通过虚拟机安装win11系统实现 下面小编就教下大家虚拟机如何安装win11系统 更多Windows11系统教程可以参考小白一键网 1 下载安装好
  • Win11如何开启移动热点?Win11开启移动热点的方法

    在Win10系统之后就有了一个移动热点功能 xff0c 这在Win11系统也不例外 xff0c 不过很多小伙伴并不清楚Win11系统中的移动热点功能如何开启 xff0c 那么下面就和小编一起来看看Win11开启移动热点的方法 xff0c 有
  • 交换机组建局域网

    说来惭愧 xff0c 今天才搞明白用交换机组建局域网的原理 xff0c 这里介绍方法 xff1a 平时使用的路由器有交换机的功能 xff0c 单纯使用交换机还是第一次 xff1a 1 将所有电bai脑连到同一台交换机上 xff0c du即将
  • mavros 使用经验记录

    我用的飞控硬件板是pixhawk xff0c 用missionplanner刷的fight stack是apm的最新版本3 4 amp对mavros支持不是特别好 xff0c 如果合适还是用px4的flight stack 比较好 xff0
  • ros catkin_make 出现add_custom_target cannot create target 错误

    今天用catkin make编译ros包出现如下错误 CMake Error at home liwei work catkin ws land build mycommbase cmake mycommbase genmsg cmake
  • mavros使用经验记录二

    项目是一个无人机视觉追踪功能 xff0c 无人机上的协从计算机通过串口连接到飞控的tel2 接收mavlink消息流 xff0c 协计算机将此mavlink流进行udp转发到地面站 xff0c 同时协计算机实时的进行图像处理 xff0c 将
  • Unix Shell中单引号、双引号字符、反斜杠、反引号的使用

    在执行shell脚本的时候 xff0c shell将会对脚本中的行进行解释 xff0c 然后执行 xff1b 对于一些特殊处理的句子 xff0c 我们可以使用引号或者反斜线来避免shell解释执行之 如下 xff0c 当在命令行中输入 xf

随机推荐