px4 linux,Ubuntu/Debian Linux

2023-05-16

Ubuntu LTS/Debian Linux上开发环境的搭建

Ubuntu Linux LTS 18.04 是标准/推荐的 Linux 开发操作系统。 你可以在这上面编译所有的PX4对象(基于NuttX平台的硬件,高通骁龙飞行硬件,基于Linux平台的硬件以及仿真)

我们提供了Bash脚本来方便你根据不同的平台安装开发环境:

这些脚本已经在纯净的 Ubuntu 16.04 和 Ubuntu 18.04 LTS 上测试过了。 如果你在一个已经安装过这些工具的系统上或者一些其他的Ubuntu发行版上执行安装,它也有可能会安装不成功。

本说明将在下面解释如何下载并使用这些脚本。

Gazebo,JMAVSim 与 NuttX(Pixhawk)编译目标

执行步骤:

bash

git clone https://github.com/PX4/Firmware.git --recursive

在bash shell中不带参数地运行ubuntu.sh来安装所有的依赖工具:

bash

bash ./Tools/setup/ubuntu.sh

* 在安装过程中确认并通过所有的提示。

* 你可以通过传输参数`--no-nuttx` 和 `--no-sim-tools` 来跳过 nuttx 和/或 仿真器工具的安装。完成后重新启动计算机。

你也可以从 PX4 源码库(/Tools/setup/)手动下载 ubuntu.sh 与 requirements.txt 文件并运行 ubuntu.sh:

wget https://raw.githubusercontent.com/PX4/Firmware/master/Tools/setup/ubuntu.sh

wget https://raw.githubusercontent.com/PX4/Firmware/master/Tools/setup/requirements.txt

bash ubuntu.sh

备注:

PX4需要跟Gazebo 7, 8, 或者 9一起工作, 该脚本使用gazebosim.org instructions来安装Gazebo9。

如果你正在使用ROS工作,那么请遵循ROS/Gazebo的介绍来安装(它是自动转安装的,作为ROS安装的一部分)。

你可以通过确认gcc的版本来验证Nuttx的安装:

$arm-none-eabi-gcc --version

arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]

Copyright (C) 2017 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Raspberry Pi

获取用于树莓派 Raspberry Pi 的构建工具链:

从PX4源码仓库下载ubuntu.sh 和requirements.txt:

wget https://raw.githubusercontent.com/PX4/Firmware/master/Tools/setup/ubuntu.sh

wget https://raw.githubusercontent.com/PX4/Firmware/master/Tools/setup/requirements.txt

在终端中运行ubuntu.sh,获取一般的依赖模块:

bash

bash ubuntu.sh --no-nuttx --no-sim-tools

然后根据下面的描述安装ARMv7交叉编译器(GCC或者Clang)。

GCC

The official Raspberry Pi toolchains are not supported as PX4 has requires C++14 (which they do not support).

Ubuntu provides a set of pre-compiled toolchains that you can use instead. Install these with the terminal command:

sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

These package contains GCC/G++ 7.4.0 at time of writing. To test the toolchain, please execute:

arm-linux-gnueabihf-gcc -v

arm-linux-gnueabihf-g++ -v

Clang

First install GCC (needed to use clang).

We recommend you to get clang from the Ubuntu software repository as follows:

sudo apt-get install clang

Example below for building PX4 firmware out of tree, using CMake.

cd

mkdir build/px4_raspberrypi_default_clang

cd build/px4_raspberrypi_default_clang

cmake \

-G"Unix Makefiles" \

-DCONFIG=px4_raspberrypi_default \

-UCMAKE_C_COMPILER \

-DCMAKE_C_COMPILER=clang \

-UCMAKE_CXX_COMPILER \

-DCMAKE_CXX_COMPILER=clang++ \

../..

make

本地编译

Additional developer information for using PX4 on Raspberry Pi (including building PX4 natively) can be found here: Raspberry Pi 2/3 Navio2 Autopilot.

ROS/Gazebo

This section explains how to install ROS/Gazebo ("Melodic") for use with PX4.

PX4 已经跟ROS Melodic 在 Ubuntu 18.04 上一同测试过。 ROS Melodic 不适用于Ubuntu 16.04。

To install the development toolchain:

在bash shell中下载脚本:

wget https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_ros_melodic.sh

运行脚本: bash

bash ubuntu_sim_ros_melodic.sh 随着脚本的运行,可能需要根据提示进行确认。

注:

ROS Melodic 已经默认跟Gazebo9一起安装了。

你的catkin(ROS编译系统)工作空间已经创建在~/catkin_ws/中。

脚本中使用的指令来自于ROS的wiki的"Melodic" Ubuntu page。

高通骁龙飞控(Snapdragon Flight)

在 PX4 用户指南 中提供了高通骁龙飞控的安装说明:

FastRTPS 安装

eProsima Fast RTPS 是 RTPS(Real Time Publish Subscribe 实时发布订阅)协议的 C++ 实现库。 通过 RTPS/ROS2 接口:PX4-FastRTPS 桥接 使用 FastRTPS,允许与 Offboard 组件共享 PX4 uORB 话题。

以下说明可用于将 FastRTPS 1.7.1 二进制文件安装到您的 home 目录中。

wget https://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-rtps/eprosima-fast-rtps-1-7-1/eprosima_fastrtps-1-7-1-linux-tar-gz -O eprosima_fastrtps-1-7-1-linux.tar.gz

tar -xzf eprosima_fastrtps-1-7-1-linux.tar.gz eProsima_FastRTPS-1.7.1-Linux/

tar -xzf eprosima_fastrtps-1-7-1-linux.tar.gz requiredcomponents

tar -xzf requiredcomponents/eProsima_FastCDR-1.0.8-Linux.tar.gz

下面的这几行命令用来编译FastCDR以及FastRTPS库,make命令与-j2选项一起执行。 这个选项指定了在编译源码时使用多少个并行的线程。 修改 -j2 为 -j可以加速库的编译速度。

(cd eProsima_FastCDR-1.0.8-Linux && ./configure --libdir=/usr/lib && make -j2 && sudo make install)

(cd eProsima_FastRTPS-1.7.1-Linux && ./configure --libdir=/usr/lib && make -j2 && sudo make install)

rm -rf requiredcomponents eprosima_fastrtps-1-7-1-linux.tar.gz

更多一般性的指令,需要额外从源安装的,可以从这里找到:Fast RTPS installation。

附加工具

After setting up the build/simulation toolchain, see Additional Tools for information about other useful tools.

后续步骤

Once you have finished setting up the environment, continue to the build instructions.

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

px4 linux,Ubuntu/Debian Linux 的相关文章

  • 使用正在运行的进程的共享内存收集核心转储

    核心转储仅收集进程空间 而不收集为进程间通信创建的共享内存 如何使核心转储也包含正在运行的进程的共享内存 设置核心文件过滤器 proc PID coredump filter per http man7 org linux man page
  • 每个进程是否都存在内核堆栈?

    每个用户空间进程是否都存在一个内核堆栈和一个用户空间堆栈 如果两个堆栈都存在 那么每个用户空间进程应该有 2 个堆栈指针 对吗 在 Linux 中 每个任务 用户空间或内核线程 都有一个 8kb 或 4kb 的内核堆栈 具体取决于内核配置
  • 在类中使用静态互斥体

    我有一个可以有很多实例的类 它在内部创建并初始化来自第三方库 使用一些全局变量 的一些成员 并且不是线程安全的 我考虑过使用 static boost mutex 它将被锁定在我的类构造函数和析构函数中 因此 在我的线程中创建和销毁实例对于
  • 安全地记住 bash 脚本中的 ssh 凭据[重复]

    这个问题在这里已经有答案了 假设我有一个 bash 脚本 它通过 ssh 在远程计算机上执行命令 Do something here ssh otheruser host command1 Do something else ssh oth
  • 在 Unix 中,我可以在目录中运行“make”而无需先 cd 到该目录吗?

    在 Unix 中 我可以运行make在没有的目录中cd首先进入该目录 make C path to dir
  • 每当调用 malloc/free 时输出到 stderr

    使用 Linux GCC C 每当调用 malloc free new delete 时 我想向 stderr 记录一些内容 我试图了解库的内存分配 因此我想在运行单元测试时生成此输出 我使用 valgrind 进行内存泄漏检测 但我找不到
  • 将一个文件写入.c中的另一个文件

    我有一个读取文件然后将其内容复制到另一个文件的代码 我需要使其仅复制每 20 个符号 然后跳过 10 个符号 然后再次跳过 20 个符号 依此类推 我必须使用 lseek 函数 但我不知道如何将所有这些放入循环中来执行此操作 main ar
  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include
  • 除了 iptables 之外还有数据包管理实用程序吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Linux 实用程序 它可以根据一组规则更改网络数据包的有效负载 理想情况下 我会使用
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • 让“git pull”在拉取不同分支时要求确认

    当同时处理许多项目和分支时 我偶尔会犯一些愚蠢的错误 比如拉入错误的分支 例如在分支上master I did git pull origin dangerous code并且有一段时间没有注意到这一点 这个小错误造成了很大的混乱 当我尝试
  • 代码::块 - 警告:GDB:无法设置控制终端:不允许操作

    我已经通过官方存储库在 Ubuntu 14 04 中安装了 Code Blocks 13 12 当我编译时 一切正常 但是当我调试时 shell 中会显示以下消息 警告 GDB 无法设置控制终端 操作不正确 允许的 程序执行到断点 但当我执
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • pygraphviz,导入错误:未定义的符号:Agundirected

    import pygraphviz Traceback most recent call last File
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 在键盘热插拔上加载模块

    我正在尝试学习如何为 Linux 系统编写模块和驱动程序 类似于this https unix stackexchange com questions 120839 usb kernel module does not load on de
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 从 Linux 命令行发送 SNMP 陷阱消息

    Folks 我需要从 Linux 命令行使用此命令 snmptrap 将自定义消息发送到陷阱侦听器 我需要根据用户设置在 v1 和 v2c 中发送相同的消息 这是我发现的 For v1 snmptrap v 1 c Tas hostname
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是

随机推荐