从零开始的Ubuntu 16.04下PX4编译环境的搭建

2023-05-16

      近来入手了一块pixhawk,想进行一些基于已有代码的二次加工,于是到官网https://dev.px4.io/上看教程。官网上的教程是分为中文、英文以及韩文的版本。很多人肯定第一反应就是看中文的版本。但是这样做弊端真的很大,原因如下:

  1.官网上的中文汉化较差,很多地方的翻译不但意思不准确,甚至还在教程里面的关键步骤上出现了遗漏

  2.中文版本似乎已经长时间没有更新。里面有的固件库已经过时,在这样的固件库下编译,报错绝对是家常便饭。

笔者在这样的教程指导下走了很多弯路。所以写下这篇教程,给像我一样第一次接触PX4,Ubuntu,甚至编程的人一些帮助。

一、操作系统的选择——windows还是Ubuntu

跟大多数人一样,我之前从未接触过linux,ubuntu更是一无所知。但是鉴于官网上对Ubuntu的强烈推荐与windows的强烈不支持。我还是建议大家装一个Ubuntu。(版本最好是16.04)笔者曾经装了Ubuntu 18.04,后来发现因为操作系统版本过新导致了一系列问题(主要是编译环境的程序有的不被兼容)。所以强烈推荐大家装一个Ubuntu 16.04.

二、怎么装?

两种方式1.虚拟机(推荐)2.双系统。

笔者采用的是虚拟机的方式,原因很简单,作为小白,第一次使用ubuntu这样的系统的时候难免会有操作失误的时候。这时候当你不知道如何还原的时候,只需要把虚拟机卸载了然后重装就好了。

教程如下:https://blog.csdn.net/gongxifacai_believe/article/details/52444938

有一个地方需要注意。默认的内存是1G,但是我在编译的时候遇到了内存溢出的问题,所以比较推荐设置成2G(后面再改完全来得及)。

装好了虚拟机之后,建议安装一个vmtools,安装之后可以从windows界面下复制命令(ctrl+c),到ubuntu下面的终端(ctrl+alt+T)中粘贴(ctrl+shift+v)使用。

教程如下https://blog.csdn.net/tjcwt2011/article/details/72638977

三、正题——px4编译环境的搭建

在开始正题之前,我还是照例把要做的前戏说完。(很重要!)

px4编译环境所需要的文件大多数是从国外节点下载的,速度异常缓慢,经常还有找不到仓库的现象。所以需要更换国内镜像节点以加快下载速度。

教程如下

https://blog.csdn.net/Mordiary/article/details/80533627

然后终于可以开始搭建所需的编译环境了。

1. 开启某些权限: 
sudo usermod -a -G dialout $USER 
注销之后再登入,这样你就成为新的用户了,这个操作只需要进行一次,之后你再需要重新下载固件就不需要这一步了

2. 运行脚本文件:

官网最新提供了一个脚本文件,新建一个脚本文件ubuntu_sim_nuttx.sh,这个脚本文件不仅有PX4环境所需要的各种库,并且也安装了jMAVSim的各种依赖。复制以下内容到脚本文件中:

#!/bin/bash

## Bash script for setting up a PX4 development environment for Pixhawk/NuttX targets on Ubuntu LTS (16.04).
## It can be used for installing simulators and the NuttX toolchain.
##
## Installs:
## - Common dependencies and tools for all targets (including: Ninja build system, Qt Creator, pyulog)
## - FastRTPS and FastCDR
## - jMAVSim simulator
## - Gazebo8 simulator
## - NuttX toolchain (i.e. gcc compiler)
## - PX4/Firmware source (to ~/src/Firmware/)

# Ubuntu Config
sudo apt-get remove modemmanager -y


# Ninja build system
ninja_dir=$HOME/ninja
echo "Installing Ninja to: $ninja_dir."
if [ -d "$ninja_dir" ]
then
    echo " Ninja already installed."
else
    pushd .
    mkdir -p $ninja_dir
    cd $ninja_dir
    wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip
    unzip ninja-linux.zip
    rm ninja-linux.zip
    exportline="export PATH=$ninja_dir:\$PATH"
    if grep -Fxq "$exportline" ~/.profile; then echo " Ninja already in path" ; else echo $exportline >> ~/.profile; fi
    . ~/.profile
    popd
fi


# Common Dependencies
echo "Installing common dependencies"
sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
sudo apt-get update
sudo apt-get install python-argparse git-core wget zip python-empy qtcreator cmake build-essential genromfs -y
# required python packages
sudo apt-get install python-dev -y
sudo apt-get install python-pip
sudo -H pip install pandas jinja2
pip install pyserial
# optional python tools
pip install pyulog


# Install FastRTPS 1.5.0 and FastCDR-1.0.7
fastrtps_dir=$HOME/eProsima_FastRTPS-1.5.0-Linux
echo "Installing FastRTPS to: $fastrtps_dir"
if [ -d "$fastrtps_dir" ]
then
    echo " FastRTPS already installed."
else
    pushd .
    cd ~
    wget http://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-rtps/eprosima-fast-rtps-1-5-0/eprosima_fastrtps-1-5-0-linux-tar-gz
    mv eprosima_fastrtps-1-5-0-linux-tar-gz eprosima_fastrtps-1-5-0-linux.tar.gz
    tar -xzf eprosima_fastrtps-1-5-0-linux.tar.gz eProsima_FastRTPS-1.5.0-Linux/
    tar -xzf eprosima_fastrtps-1-5-0-linux.tar.gz requiredcomponents
    tar -xzf requiredcomponents/eProsima_FastCDR-1.0.7-Linux.tar.gz
    cd eProsima_FastCDR-1.0.7-Linux; ./configure --libdir=/usr/lib; make; sudo make install
    cd ..
    cd eProsima_FastRTPS-1.5.0-Linux; ./configure --libdir=/usr/lib; make; sudo make install
    popd
fi


# jMAVSim simulator
sudo apt-get install ant openjdk-8-jdk openjdk-8-jre -y

# Gazebo simulator
sudo apt-get install protobuf-compiler libeigen3-dev libopencv-dev -y
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
## Setup keys
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
## Update the debian database:
sudo apt-get update
## Install Gazebo8
sudo apt-get install gazebo8 -y
## For developers (who work on top of Gazebo) one extra package
sudo apt-get install libgazebo8-dev


# NuttX
sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo \
    libftdi-dev libtool zlib1g-dev -y

# Clean up old GCC
sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded
sudo add-apt-repository --remove ppa:team-gcc-arm-embedded/ppa



# Install GCC 5.4
gcc_dir=$HOME/gcc-arm-none-eabi-5_4-2016q2
echo "Installing GCC to: $gcc_dir"
if [ -d "$gcc_dir" ]
then
    echo " GCC already installed."
else
    pushd .
    cd ~    
    wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/5_4-2016q2/gccarmnoneeabi542016q220160622linuxtar.bz2
    tar -jxf gccarmnoneeabi542016q220160622linuxtar.bz2
    exportline="export PATH=$HOME/gcc-arm-none-eabi-5_4-2016q2/bin:\$PATH"
    if grep -Fxq "$exportline" ~/.profile; then echo " GCC path already set." ; else echo $exportline >> ~/.profile; fi
    . ~/.profile
    popd

    # Install 32 bit support libraries (ignore if fails)
    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get install libc6:i386 libgcc1:i386 libstdc++5:i386 libstdc++6:i386
    sudo apt-get install gcc-5.4-base:i386
fi



# Clone PX4/Firmware
clone_dir=~/src
echo "Cloning PX4 to: $clone_dir."
if [ -d "$clone_dir" ]
then
    echo " Firmware already cloned."
else
    mkdir -p $clone_dir
    cd $clone_dir
    git clone https://github.com/PX4/Firmware.git
    cd Firmware
fi
cd $clone_dir/Firmware


#Reboot the computer (required before building)
echo RESTART YOUR COMPUTER to complete installation of PX4 development toolchain

随后运行一下命令:source ubuntu_sim_nuttx.sh,这样就安装了各种依赖。之后还需要打开Firmware文件夹,submodule一下(这一步不进行后面会因为少几个模块而编译不过):

cd ~src/Firmware/
git submodule init
git submodule update --init --recursive

然后可以编译固件

cd Firmware
make px4fmu-v2_default

没出现error即为编译成功。

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

从零开始的Ubuntu 16.04下PX4编译环境的搭建 的相关文章

  • Pixhawk+PX4+NOKOV+VRPN动捕飞控方案

    一 PX4 配置 1 参数设置 xff0c 保存重启后生效 EKF2 AID MASK 61 24 EKF2 HGT MODE 61 2 二 VRPN配置 1 Nokov 动捕软件正确配置参数并启动 VRPN 2 使用 vrpn clien
  • JS-DOM— —节点操作

    五 节点操作 5 1 节点操作的作用 获取元素通常使用两种方式 1 利用DOM提供的方法获取元素 document getElementByld document getElementsByTagName0 document querySe
  • 立创EDA专业版入门经验分享(1)——对标AD的快捷操作

    作者团队在近期从Alitum Designer转战到立创EDA专业版 在习惯AD的工作方式后 xff0c 转到立创EDA专业版后磨合了很长一段时间 现将原来AD中的功能对应到立创EDA中的高级功能像大家分享 欢迎大家一起交流学习 本帖将作为
  • c语言中字符数组的理解

    数组的理解参考该文 对于字符数组 xff0c 当最后一个元素是 0 xff0c 则这个字符数组是一个字符串 xff1b 字符串可以通过首地址来打印输出 1 对于一维数组 int pack 3 61 1 2 3 printf 34 d 34
  • 如何减小与“大牛”的差距

    为什么同样的时间有的人可以漂亮的完成工作 xff0c 而有些人废了很大的力气也没有完成 xff1f 前者我们常常称之为 大牛 xff0c 后者我们常常叫他们 菜鸟 当然 大牛 都是相对而言的 xff0c 大牛 也不可能方方面面都非常厉害 x
  • 利用字符串的最后一个字符为‘\0‘的特性操作字符串

    利用末尾为 0 特性 xff0c 求字符串长度 xff0c 实现strlen int len 61 0 char str 61 34 hello 34 char p 61 str while p len 43 43 计算字符串的长度 p 4
  • 信号量sem_init,sem_wait,sem_post

    本篇文章是信号量的简单入门 xff0c 主要学习关于信号量四个函数的使用 文章综合整理了两篇文章 xff1a http blog csdn net qyz og article details 47189219 http blog csdn
  • readdir函数

    readdir会不断读取目中的文件及目录 xff0c 但不会读子目录中的文件 include lt sys types h gt include lt dirent h gt include lt stdio h gt include lt
  • fwrite写文件是乱码

    fwrite写的二进制文件 xff0c 所以我们打开所写的文件是乱码 xff0c 但数据是正确的 xff0c 我们通过fread函数按照原来的数据格式读取即可 可以参考该文 include lt sys types h gt include
  • 经典面试题 动态链接库与静态链接库的区别

    经典面试题 动态链接库与静态链接库的区别 面试轻松学习 xff0c offer快点拿 文章目录 经典面试题 动态链接库与静态链接库的区别一 动态链接库是什么 xff1f 二 静态链接库是什么 xff1f 三 区别1 静态链接库速度快 xff
  • Docker占用的磁盘空间清理

    Docker占用的磁盘空间清理 1 docker system命令 在谁用光了磁盘 xff1f Docker System命令详解中 xff0c 我们详细介绍了docker system命令 它可以用于管理磁盘空间 docker syste
  • 卡尔曼滤波算法详细推导(全网最详细的推导过程)

    本文是来源于B站Dr CAN的视频的学习笔记 xff0c 有需要详细了解的 xff0c 可以到B站看相关视频DR CAN的个人空间 1 递归算法 例 xff1a 假设测一段距离 xff0c 第一次测 z 1 z 1 z 1 61 50 1m
  • ADC采样滤波算法利用卡尔曼滤波算法详解

    1 ADC采样模型 xff08 本文为笔者早期所写 xff0c 当时对卡尔曼滤波器理解尚未透彻 xff0c 如今回顾 xff0c 该模型还有所缺陷 xff0c 推荐读者看卡尔曼的推导过程或者B站大佬Dr CAN的空间 xff09 假设ADC
  • 微信支付趟过的坑

    这段时间在做微信支付开发 xff0c 在公司的公众号审批下来后 xff0c 我这边的测试用例也已经开发完毕 xff0c 于是拿着具体的数据来调试了 xff0c 大段大段的代码就不贴了 xff0c demo里有 xff0c 这里就说说调试过程
  • java底层原理

    Java运行三部曲 xff1a 编写 xff0c 编译 xff0c 运行 编写 xff1a 硬件编写代码 xff0c 就是我们写代码 编译 xff1a javac将文件编译成一个或多个 class文件 编译中间的过程主要是类型和格式的检查
  • 信息化时代下的我们----弄潮儿

    读完 信息化与信息管理实践之道 的部分章节想起了 第三次浪潮 中的一段话 xff0c 摘录如下 人类到现在已经经历了两次巨大的变革浪潮 这两次浪潮都淹没了早先的文明和文化 xff0c 都是以前人所不能想象的生活方式 xff0c 替代了原来的
  • ORB-SLAM稠密点云地图构建(黑白+彩色)+ pcd文件以八叉树形式表示

    pcl1 8 1 VTK 7 1 1 版本一定要对好 xff0c 如果安装了不符的版本如我之前安的pcl1 1 3和VTK8 2 一定要卸载干净不然会一直报错 xff0c 不同版本的pcl和vtk是无法共存的 xff0c 并且光把包删除是不
  • 一步步学习多线程(一) 重要概念

    几个重要的概念 1 同步 xff08 synchronous xff09 和 异步 xff08 asynchronous xff09 2 并发 xff08 Concurrency xff09 和 并行 xff08 Parallelism x
  • MAVLink功能开发,移植教程。

    MAVLink功能开发 本文由 智御电子 提供 xff0c 同时提供视频移植教程 xff0c 以便电子爱好者交流学习 1 MAVLink简介 MAVLink是一种针对微型飞行器 xff0c 推出的轻量化 xff0c 仅由头文件信息编码而成的
  • workerman问题总结大全及解决方案

    workerman无法正常访问 问题描述 xff1a 在阿里云ECS上部署了workerman的应用 xff08 ECS是专有网络 xff09 xff0c 在ECS安全组里已经允许workerman需要的全部端口 xff0c 但是外网一直不

随机推荐

  • Eclipse Android开发遇到:"The type org.apache.http.HttpResponse cannot be resolved."问题的解决办法

    今天在做手机卫士的项目中 xff0c 在联网下载的功能模块中遇到The type org apache http HttpResponse cannot be resolved It is indirectly referenced fro
  • UG创建图纸明细表失败的情况

    今天进行UG二次开发的时候 xff0c 由于要在图纸中自动加入零件明细表 xff0c 但是当我在图纸中插入明细表的时候UG会弹出错误对话框 xff1a 当打开UGII UPDATE ALL ID SYMBOLS WITH PLIST变量时
  • 字符串末尾自动加上'\0'的情况

    之前一直都有一个问题困扰着我 xff0c 就是我们知道C风格的字符串在用strlen求长度时只会遇到 39 0 39 结束 xff0c 如果一个字符数组全部填满了 xff0c 而在末尾没有加上 39 0 39 就会出现结果不定的现象 xff
  • c++类成员变量的初始化顺序以及特殊成员的初始化方法规则

    说到类的成员变量的初始化顺序 xff0c 对于初学者很多容易混淆其顺序 xff0c 以为简单的按初始表来初始化 xff0c 其实不然 xff0c 现在我来详细讲解下类的初始化顺序 xff1a 首先由简单开始 xff1a class peop
  • deque 迭代器失效的问题详解

    今天在看STL源码的时候 xff0c 无意写了如下的代码 xff0c 发现程序崩溃了 xff1a lt span style 61 34 font size 14px 34 gt deque lt int gt iterator iter
  • Python中__init__.py文件的作用

    在创建python包的过程中 xff0c IDE都会在包根目录下创建一个 init py文件 xff0c 该Python文件默认是空的 目录结构如下 xff1a Pycharm下的package树结构 xff1a 在Finder中的目录结构
  • 使用Ajax以及CSS+DIV高仿谷歌搜索(附源码下载)

    在使用 Google 搜索或者是 Baidu 搜索的时候 xff0c 在输入搜索关键字的同时 xff0c 会自动弹出匹配的其他关键字的提示 xff0c 全心全意为人民服务的精神在这里崭露无遗 这种利用 Ajax 技术实现输入提示和自动完成的
  • 导致索引失效的可能情况

    如下是可能导致索引失效的情况 xff1a 1 xff0e 隐式转换导致索引失效 这一点应当引起重视 也是开发中经常会犯的错误 由于表的字段tu mdn定义为varchar2 20 但在查询时把该字段作为number类型以where条件传给O
  • 二叉搜索树的增删查

    今天把搜索二叉树的思路又理了一遍 xff0c 把代码又从头到尾敲了一遍 xff0c 各位看客就不要在意代码粗糙和内存溢出了 xff0c 主要把插入和删除的过程理了一遍 xff0c 其中比较复杂的地方就是搜索二叉树的删除 xff0c 涉及了很
  • 中缀表达式转前缀和后缀表达式

    之前笔试中国电信IT研发中心的时候 xff0c 遇到了几个前 中 后缀表达式的相互转换 xff0c 当时忘得差不多了 xff0c 今天好好把该方面的知识好好复习 xff0c 并把相关代码和思路自己缕了一遍 xff1a 将中缀表达式转换为前缀
  • java prometheus 自定义exporter开发,以及实现多个接口返回metrics

    普罗 自定义exporter开发 exporter的作用是采集需要监控的数据 xff0c 并将采集到的数据转换成prometheus所需要的数据格式 xff0c 将这些转换后的数据返回 xff0c 供给prometheus 使用 java
  • 双系统重装Ubuntu经验分享

    真的很喜欢ubuntu 但又没有恒心把它学通透 xff0c 毕竟不是相关专业 第一次重装是因为没多少经验 xff0c 安装qqforlinux的时候多了两个东西 xff0c 还自己生成了快捷方式 xff0c 就想点开看看是啥 xff0c 结
  • 还在迷茫不知Dashboard是什么?答案在文中揭晓

    Dashboard的中文翻译是 仪表盘 xff0c 与汽车的仪表盘相同 一种反映车辆各系统工作状况的装置 xff0c 有车速里程表 转速表 燃油表等 司机可以很方便地从汽车仪表盘中获得汽车整体状况 而Dashboard沿袭了汽车仪表盘理念
  • 问题:UPDATE 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'。

    解决方案 1 你可以在TSQL前Set ARITHABORT ON 代码如下 Set ARITHABORT ON GO INSERT INTO ta 2 在ADO NET中 你可以这样来写 C 代码 MyConnection Execute
  • 智能制造:三体智能革命

    赵敏 宁振波 郭朝晖是走向智能研究院资深专家 xff0c 三体智能革命 编委会中三位重要作者 他们从去年5月起多次参加了中国工程院主持的 中国智能制造发展战略研究报告 的研讨 评审与修订工作 xff0c 对该报告的形成过程 研究主旨和详细内
  • 小觅相机SDK samples安装Link error: cannot find -lvtkproj4

    Link error cannot find lvtkproj4 error ld returned 1 exit status 找不到相关动态库文件 设置软链接 xff1a ln s usr lib x86 64 linux gnu li
  • 年度回忆录(2011.12----2012.09)

    前几天刚刚参加了提高班十期的开学典礼 xff0c 最近师院的新生也陆 陆续 续的开始报道了 每年到这个时候都会感慨 年年岁岁花相似 xff0c 年年岁岁人不同 啊 对于提高班来说每年都有新的血液注入进来 xff0c 提高班的队伍在不断的扩大
  • python函数(变量,参数)

    函数的变量 1 xff0c 全局变量 定义在最外层的变量 xff0c 对于所有的内函数都能调用 2 xff0c 局部变量 定义在函数内的变量叫做局部变量 xff0c 在函数外是不能访问局部变量 注 xff1a 全局变量不能直接在函数内部进行
  • 程序员读书和练习的方法(个人观点)

    lt 传送门 gt 针对本文的交流探讨 gt 总宗旨 xff1a 打好计算机通用理论基础 通用实战能力 xff0c 便于需要时对各领域的无障碍深钻 时间宝贵 xff0c 不要为了学习而学习 计算机通用理论基础 xff1a 计算机各领域理论基
  • 从零开始的Ubuntu 16.04下PX4编译环境的搭建

    近来入手了一块pixhawk xff0c 想进行一些基于已有代码的二次加工 xff0c 于是到官网https dev px4 io 上看教程 官网上的教程是分为中文 英文以及韩文的版本 很多人肯定第一反应就是看中文的版本 但是这样做弊端真的