一、PX4环境搭建和编译(Ubuntu 16.04、ROS kinetic)

2023-05-16

 

Ubuntu16.04

ROS:kinetic

源于:官网PX4开发指南(v1.10.0)<master> https://dev.px4.io/v1.10/zh/

稍微参考一下这个网站:仿真平台基础配置(PX4 1.11版)

目录

一.开发环境的搭建

1.使用ubuntu.sh这个脚本来安装开发环境

2.FastRTPS 安装

二.执行编译指令

1.更新模块

2.特定版本获取(没理解这个是啥意思)

 

3.构建make选项以及找到可用选择

3.1、要为基于NuttX或Pixhawk的板进行构建,请导航至固件目录,然后调用make您的板的构建目标

3.2、使用特定配置和初始化文件调用make的完整语法为:

4.上载固件(刷板)(仿真不用做)

三.尝试编译

1.解决上面make px4_sitl gazebo就死机或者是下面没死机但是报错

这种问题:

2.上一个问题解决后出现一个新问题 (文件内容修改)



一.开发环境的搭建

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

要安装的依赖包库:

sudo apt install -y \
ninja-build \
exiftool \
python-argparse \
python-empy \
python-toml \
python-numpy \
python-yaml \
python-dev \
python-pip \
ninja-build \
protobuf-compiler \
libeigen3-dev \
genromfs \
xmlstarlet
pip install \
pandas \
jinja2 \
pyserial \
cerberus \
pyulog \
numpy \
toml \
pyquaternion

 

1.使用ubuntu.sh这个脚本来安装开发环境

以支持Gazebo 9和jMAVSim仿真器,以及/或者NuttX/Pixhawk工具链。但是不包含FastRTPS所依赖的工具。

方法一:从PX4的源码仓库中下载ubuntu.sh和requirments.txt(在/Tools/setup/目录下),然后直接bash shell 中安装依赖

wget https://raw.githubusercontent.com/PX4/Firmware/v1.10.0/Tools/setup/ubuntu.sh
wget https://raw.githubusercontent.com/PX4/Firmware/v1.10.0/Tools/setup/requirements.txt
bash
source ubuntu.sh

但是,这个方法,我试了一下没成功,而且比较麻烦,也没看什么错误我就先关掉了,然后试了一下下面的这个方法:

方法二:直接下载PX4的全部源码然后运行里面的脚本

git clone https://github.com/PX4/Firmware.git
source Firmware/Tools/setup/ubuntu.sh

(如果你觉得github下载比较慢,我这里有两个方法)

第一个(这个比较好,超级快):我把github里面的源码放到了我的自己的gitee仓库里面,大家可以直接从中克隆,如下:

git clone https://gitee.com/zhuleilei33/Firmware.git
source Firmware/Tools/setup/ubuntu.sh

第二个可以参考网上把在/etc/hosts文件中添加github等等相关网址的ip地址,可以结合我的另外一篇博客和易科机器人的一篇教程来,但是我试了一下也不知道试没试对,反正好像没什么用,要是大家有什么好方法希望分享一下.

问题一:运行上面程序出现pip的相关问题,然后terminal直接闪退

我猜测可能是PX4要pip3相关的依赖吧,但是系统里面只有pip,不妨这样:

sudo apt-get install python3-pip
sudo pip3 install --upgrade pip
pip3 -V
pip -V

看看是不是两个版本对应python2.7和python3.5

问题二:要是安装了gazebo7之前的话,我先把这个给卸了,因为那个bash文件会下一个新的Gazebo9

sudo apt-get remove gazebo7 gazebo7-common gazebo7-plugin-base libgazebo7:amd64 libgazebo7-dev:amd64

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

sudo apt-get update

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

arm-none-eabi-gcc --version
#要是没有这个软件包就先下载
sudo apt install gcc-arm-none-eabi

#结果输出
arm-none-eabi-gcc (15:4.9.3+svn231177-1) 4.9.3 20150529 (prerelease)
Copyright (C) 2014 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.
#或者是官网输出
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.

然后关机重启

2.FastRTPS 安装

eProsima Fast RTPS是一个用C++实现的RTPS(实时流传输)协议。 FastRTPS 使用在RTPS/ROS2接口:PX4-FastRTPS Bridge上,用以允许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

下载会比较慢,下载完毕如下:

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
--2020-05-23 20:47:14--  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
正在解析主机 www.eprosima.com (www.eprosima.com)... 80.231.171.97
正在连接 www.eprosima.com (www.eprosima.com)|80.231.171.97|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 20871123 (20M) [application/octet-stream]
正在保存至: “eprosima_fastrtps-1-7-1-linux.tar.gz”

eprosima_fastrtps-1-7-1-linux.tar.gz                 5%[=====>                                                                                                  eprosima_fastrtps-1 100%[===================>]  19.90M  2.44KB/s    in 1h 59m  

2020-05-23 22:46:30 (2.85 KB/s) - 已保存 “eprosima_fastrtps-1-7-1-linux.tar.gz” [20871123/20871123])

该库的一些主要功能是:

  • 用于实时应用程序的可配置的最大努力和可靠的发布-订阅通信策略。
  • 即插即用的连接性,以便网络的任何其他成员自动发现任何新的应用程序。
  • 模块化和可扩展性允许网络中复杂而简单的设备不断增长。
  • 可配置的网络行为和可互换的传输层:为每个部署选择最佳协议和系统输入/输出通道组合。
  • 两个API层:一个高层的发布者-订阅者层(主要关注可用性)和一个较低层的Writer-Reader层(该层提供对RTPS协议内部工作的更好访问)。

eProsima Fast RTPS已被许多领域的多个组织采用,包括以下重要情况:

  • 机械手:ROS(机器人操作系统)作为ROS2的默认中间件。
  • 欧盟研发部门:FIWARE孵化的GE。

 

二.执行编译指令

之前我们已经下载源码到我们的home了,但是对于这个PX4大项目来说,他还有很多子存储库需要我们去下载

1.更新模块

7.11 Git工具-子模块

通常,在处理一个项目时,您需要从其中使用另一个项目。也许这是第三方开发的库,或者您正在单独开发并在多个父项目中使用。在这些情况下会出现一个常见问题:您希望能够将两个项目视为独立的项目,但仍然能够在另一个项目中使用它们。

Git使用子模块解决了这个问题。子模块允许您将Git存储库保留为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到您的项目中,并使提交分开进行。

默认情况下,子模块会将子项目添加到与存储库相同的目录中。

注意:.gitmodules文件。这是一个配置文件,用于存储项目的URL您将其放入其中的本地子目录之间的映射。(下面是一个例子)

[submodule "DbConnector"]
	path = DbConnector
	url = https://github.com/chaconinc/DbConnector

如果您有多个子模块,则此文件中将有多个条目。重要的是要注意,此文件与其他文件(例如您的.gitignore文件)一起受版本控制。它与项目的其余部分一起推拉。这就是克隆此项目的其他人如何知道从何处获取子模块项目的方式。

注意:由于.gitmodules文件中的URL是其他人首先尝试从中克隆/获取的URL,因此请确保使用他们可以访问的URL。例如,如果您使用与其他人不同的URL来推送,请使用其他人有权访问的URL。您可以在本地覆盖此值以git config submodule.<submodule_name>.url PRIVATE_URL供自己使用。如果适用,相对URL可能会有所帮助。

您必须运行两个命令:git submodule init初始化本地配置文件,并git submodule update从该项目中获取所有数据,并检查超级项目中列出的相应提交.

但是,还有另一种方法可以简化。如果传递--recurse-submodulesgit clone命令,它将自动初始化和更新存储库中的每个子模块,包括嵌套子模块(如果存储库中的任何子模块本身都有子模块)。

如果您已经克隆了项目却忘记了--recurse-submodules,则可以通过运行将git submodule initgit submodule update步骤合并git submodule update --init。要还初始化,获取和签出任何嵌套的子模块,可以使用万无一失git submodule update --init --recursive

学习一些子模块的知识以后,大家可以去参考一下官网的教程。然后,按照部分教程以及自己的理解,应该是下面的这个指令。但是

git submodule update --init --recursive

注意注意,我尝试过这个指令,就是速度炒鸡炒鸡慢,于是我把所有的子模块的URL都映入到自己的gitee中,这样下起来会快很多。

步骤如下:

cd Firmware
gedit .gitmodules

然后把下面这个内容替换原来的  .gitmodules文件:

[submodule "mavlink/include/mavlink/v2.0"]
	path = mavlink/include/mavlink/v2.0
	url = https://gitee.com/zhuleilei33/c_library_v2.git
	branch = master
[submodule "src/drivers/uavcan/libuavcan"]
	path = src/drivers/uavcan/libuavcan
	url = https://gitee.com/zhuleilei33/uavcan.git
	branch = px4
[submodule "Tools/jMAVSim"]
	path = Tools/jMAVSim
	url = https://gitee.com/zhuleilei33/jMAVSim.git
	branch = master
[submodule "Tools/sitl_gazebo"]
	path = Tools/sitl_gazebo
	url = https://gitee.com/zhuleilei33/sitl_gazebo.git
	branch = master
[submodule "src/lib/matrix"]
	path = src/lib/matrix
	url = https://gitee.com/zhuleilei33/Matrix.git
	branch = master
[submodule "src/lib/ecl"]
	path = src/lib/ecl
	url = https://gitee.com/zhuleilei33/ecl.git
	branch = master
[submodule "boards/atlflight/cmake_hexagon"]
	path = boards/atlflight/cmake_hexagon
	url = https://gitee.com/zhuleilei33/cmake_hexagon.git
	branch = px4
[submodule "src/drivers/gps/devices"]
	path = src/drivers/gps/devices
	url = https://gitee.com/zhuleilei33/GpsDrivers.git
	branch = master
[submodule "src/modules/micrortps_bridge/micro-CDR"]
	path = src/modules/micrortps_bridge/micro-CDR
	url = https://gitee.com/zhuleilei33/micro-CDR.git
	branch = px4
[submodule "platforms/nuttx/NuttX/nuttx"]
	path = platforms/nuttx/NuttX/nuttx
	url = https://gitee.com/zhuleilei33/NuttX.git
	branch = px4_firmware_nuttx-8.2
[submodule "platforms/nuttx/NuttX/apps"]
	path = platforms/nuttx/NuttX/apps
	url = https://gitee.com/zhuleilei33/NuttX-apps.git
	branch = px4_firmware_nuttx-8.2
[submodule "platforms/qurt/dspal"]
	path = platforms/qurt/dspal
	url = https://gitee.com/zhuleilei33/dspal.git
[submodule "Tools/flightgear_bridge"]
	path = Tools/flightgear_bridge
	url = https://gitee.com/zhuleilei33/PX4-FlightGear-Bridge.git

记得保存一下,然后运行:(在Firmware目录下)速度会快很多!

git submodule update --init --recursive

里面会跳出说未对模块检测,我不知道是正确还是错误的:

子模组 'Tools/flightgear_bridge' (https://gitee.com/zhuleilei33/PX4-FlightGear-Bridge.git) 未对路径 'Tools/flightgear_bridge' 注册
子模组 'Tools/jMAVSim' (https://gitee.com/zhuleilei33/jMAVSim.git) 未对路径 'Tools/jMAVSim' 注册
子模组 'Tools/sitl_gazebo' (https://gitee.com/zhuleilei33/sitl_gazebo.git) 未对路径 'Tools/sitl_gazebo' 注册
子模组 'boards/atlflight/cmake_hexagon' (https://gitee.com/zhuleilei33/cmake_hexagon.git) 未对路径 'boards/atlflight/cmake_hexagon' 注册
子模组 'mavlink/include/mavlink/v2.0' (https://gitee.com/zhuleilei33/c_library_v2.git) 未对路径 'mavlink/include/mavlink/v2.0' 注册
子模组 'platforms/nuttx/NuttX/apps' (https://gitee.com/zhuleilei33/NuttX-apps.git) 未对路径 'platforms/nuttx/NuttX/apps' 注册
子模组 'platforms/nuttx/NuttX/nuttx' (https://gitee.com/zhuleilei33/NuttX.git) 未对路径 'platforms/nuttx/NuttX/nuttx' 注册
子模组 'platforms/qurt/dspal' (https://gitee.com/zhuleilei33/dspal.git) 未对路径 'platforms/qurt/dspal' 注册
子模组 'src/drivers/gps/devices' (https://gitee.com/zhuleilei33/GpsDrivers.git) 未对路径 'src/drivers/gps/devices' 注册
子模组 'src/drivers/uavcan/libuavcan' (https://gitee.com/zhuleilei33/uavcan.git) 未对路径 'src/drivers/uavcan/libuavcan' 注册
子模组 'src/lib/ecl' (https://gitee.com/zhuleilei33/ecl.git) 未对路径 'src/lib/ecl' 注册
子模组 'src/lib/matrix' (https://gitee.com/zhuleilei33/Matrix.git) 未对路径 'src/lib/matrix' 注册
子模组 'src/modules/micrortps_bridge/micro-CDR' (https://gitee.com/zhuleilei33/micro-CDR.git) 未对路径 'src/modules/micrortps_bridge/micro-CDR' 注册

但是看下面,应该是没什么问题的,但是大家是怎么回事可以在下面讨论呢。

而且这里面的branch是分支的意思,但是到底是什么关系,看官网的时候没怎么看懂。如果一次失败了,网络不好,可以再试一次

如果成功的话,最后会这样:

......
正克隆到 'src/modules/micrortps_bridge/micro-CDR'...
remote: Enumerating objects: 1573, done.
remote: Counting objects: 100% (1573/1573), done.
remote: Compressing objects: 100% (531/531), done.
remote: Total 1573 (delta 867), reused 1573 (delta 867), pack-reused 0
接收对象中: 100% (1573/1573), 652.73 KiB | 863.00 KiB/s, 完成.
处理 delta 中: 100% (867/867), 完成.
检查连接... 完成。
子模组路径 'src/modules/micrortps_bridge/micro-CDR':检出 '56b2696e4a9bb43d2aef9690fc5c6a2d6b1af8ee'

2.特定版本获取(没理解这个是啥意思)

1、克隆固件仓库(我们已经做了)并导航到固件目录

cd Firmware

2、列出所有版本(标签)

git tag -l

我查了一下这几个意思(git help)表示:扩展、标记和调校您的历史记录

  •    checkout   切换分支或恢复工作区文件
  •    tag        创建、列出、删除或校验一个 GPG 签名的标签对象

       -l <pattern>, --list <pattern>
           List tags with names that match the given pattern (or all if no
           pattern is given). Running "git tag" without arguments also lists
           all tags. The pattern is a shell wildcard
(i.e., matched using
           fnmatch(3)). Multiple patterns may be given; if any of them
           matches, the tag is shown

所以我运行:

git tag
#输出
ALTCTRL_flight_2013-04-20
NuttX-6.16
alpha_0.2
alpha_0.3
althold_flight_2013-04-20
ardrone_flight
first_pos_control_flight
fixedwing_0.1
fixedwing_stable
stable_manual_flight
v1.0.0
v1.0.0-rc1
v1.0.0-rc2
v1.0.0-rc3
v1.0.0-rc4
v1.0.0beta1
v1.0.0beta2
v1.0.0beta3
v1.0.0rc10
v1.0.0rc11
v1.0.0rc12
v1.0.0rc5
v1.0.0rc6
v1.0.0rc7
v1.0.0rc8
v1.0.0rc9
v1.0.1
v1.1.0
v1.1.0beta1
v1.1.0beta2
v1.1.0beta3
v1.1.1
v1.1.2
v1.1.3
v1.10.0
v1.10.0-beta1
v1.10.0-beta2
v1.10.0-beta3
v1.10.0-beta4
v1.10.0-rc1
v1.10.0-rc2
v1.10.0-rc3
v1.10.1
v1.10.2
v1.11.0-beta1
v1.11.0-beta2
v1.2.0
v1.3.0rc1
v1.3.0rc2
v1.3.0rc3
v1.3.1
v1.3.2
v1.3.3
v1.3.4
v1.4.0rc1
v1.4.0rc2
v1.4.0rc3
v1.4.0rc4
v1.4.1
v1.4.1rc1
v1.4.1rc2
v1.4.1rc3
v1.4.1rc4
v1.4.2
v1.4.3
v1.4.4
v1.4.4rc1
v1.5.0
v1.5.1
v1.5.1rc1
v1.5.1rc2
v1.5.1rc3
v1.5.1rc4
v1.5.2
v1.5.4
v1.5.5
v1.6.0-rc2
v1.6.0-rc3
v1.6.0-rc4
v1.6.0rc1
v1.6.2
v1.6.3
v1.6.4
v1.6.5
v1.7.0
v1.7.0-rc0
v1.7.0-rc1
v1.7.0-rc2
v1.7.0-rc3
v1.7.0-rc4
v1.7.1
v1.7.2
v1.7.3
v1.7.3beta
v1.7.4beta
v1.8.0
v1.8.0-beta1
v1.8.0-beta2
v1.8.0-rc0
v1.8.1
v1.8.2
v1.9.0
v1.9.0-alpha
v1.9.0-beta1
v1.9.0-beta2
v1.9.0-beta3
v1.9.0-rc0
v1.9.0-rc1
v1.9.0-rc2
v1.9.1
v1.9.1-rc0
v1.9.2

3、特定标签的签出代码(例如,标签1.7.4beta)

git checkout v1.7.4beta

我用的版本是v1.10.0的稳定版本,上面也有,但是我不知道分支出来到底有什么用,所以先不做处理,大家可以在下面评论。

 

3.构建make选项以及找到可用选择

3.1、要为基于NuttX或Pixhawk的板进行构建,请导航至固件目录,然后调用make您的板的构建目标

例如,要为Pixracer(飞控硬件板)构建,请使用以下命令:

cd Firmware
make px4_fmu-v4_default

这个例子中

构建目标的第一部分 px4_fmu-v4 是特定飞行控制硬件的固件

并且 default 是配置名称(这种情况是“默认”配置)。该 default 是一种选项,一般来说,_default后缀是可选的(例如,你亦可以利用make px4_fmu-v4make bitcraze_crazyflie等等)所以你也可以不用写,比如

 make px4_fmu-v4

上面的例子如果成功的话,会输出:

-- Build files have been written to: /home/youruser/src/Firmware/build/px4_fmu-v4_default
[954/954] Creating /home/youruser/src/Firmware/build/px4_fmu-v4_default/px4_fmu-v4_default.px4

以下列表显示了常用板的构建命令:

  • Pixhawk 4: make px4_fmu-v5_default
  • Pixracer: make px4_fmu-v4_default
  • Pixhawk 3 Pro: make px4_fmu-v4pro_default
  • Pixhawk Mini: make px4_fmu-v3_default
  • Pixhawk 2: make px4_fmu-v3_default
  • mRo Pixhawk: make px4_fmu-v3_default (supports 2MB Flash)
  • HKPilot32: make px4_fmu-v2_default
  • Pixfalcon: make px4_fmu-v2_default
  • Dropix: make px4_fmu-v2_default
  • MindPX/MindRacer: make airmind_mindpx-v2_default
  • mRo X-2.1: make auav_x21_default
  • Crazyflie 2.0: make bitcraze_crazyflie_default
  • Intel® Aero Ready to Fly Drone: make intel_aerofc-v1_default
  • Pixhawk 1: make px4_fmu-v2_default

注意注意!!!必须使用受支持的GCC版本来构建此板(例如,与CI / docker所使用的相同)或从构建中删除模块。由于PX4接近主板的1MB闪存限制,使用不受支持的GCC进行构建可能会失败。

  • Pixhawk 1 with 2 MB flash: make px4_fmu-v3_default

 

3.2、使用特定配置和初始化文件调用make的完整语法为:

make [VENDOR_][MODEL][_VARIANT] [VIEWER_MODEL_DEBUGGER]

VENDOR_MODEL_VARIANT:(也称为CONFIGURATION_TARGET

  • VENDOR:电路板的制造商:px4aerotennaairmindatlflightauavbeagleboneintelnxpparrot,等。用于Pixhawk系列板上的供应商名称是px4
  • MODEL:主板型号 “模式”: sitlfmu-v2fmu-v3fmu-v4fmu-v5navio2等。
  • VARIANT:指示特定的配置:例如rtpslpe,其中包含default配置中不存在的组件。最常见的是default,可以省略

可以使用以下命令获取所有可用CONFIGURATION_TARGET选项的列表:

cd Firmware
make list_config_targets

#输出
aerotenna_ocpoc[_default]
airmind_mindpx-v2[_default]
atlflight_cmake_hexagon_bundle
atlflight_cmake_hexagon_fastrpc
atlflight_cmake_hexagon_hexagon_sdk
atlflight_cmake_hexagon_linux_app
atlflight_cmake_hexagon_qurt_flags
atlflight_cmake_hexagon_qurt_lib
atlflight_eagle[_default]
atlflight_eagle_qurt
atlflight_excelsior[_default]
atlflight_excelsior_qurt
av_x-v1[_default]
beaglebone_blue[_default]
bitcraze_crazyflie[_default]
cuav_x7pro_bootloader
cuav_x7pro[_default]
emlid_navio2[_default]
holybro_durandal-v1_bootloader
holybro_durandal-v1[_default]
holybro_durandal-v1_stackcheck
holybro_kakutef7[_default]
intel_aerofc-v1[_default]
intel_aerofc-v1_rtps
modalai_fc-v1[_default]
mro_ctrl-zero-f7[_default]
mro_x21-777[_default]
mro_x21[_default]
nxp_fmuk66-v3[_default]
nxp_fmuk66-v3_socketcan
nxp_fmurt1062-v1[_default]
nxp_rddrone-uavcan146[_default]
omnibus_f4sd[_default]
px4_fmu-v2[_default]
px4_fmu-v2_fixedwing
px4_fmu-v2_lpe
px4_fmu-v2_multicopter
px4_fmu-v2_rover
px4_fmu-v2_test
px4_fmu-v3[_default]
px4_fmu-v3_rtps
px4_fmu-v3_stackcheck
px4_fmu-v4_cannode
px4_fmu-v4[_default]
px4_fmu-v4_optimized
px4_fmu-v4pro[_default]
px4_fmu-v4pro_rtps
px4_fmu-v4_rtps
px4_fmu-v4_stackcheck
px4_fmu-v5_critmonitor
px4_fmu-v5[_default]
px4_fmu-v5_fixedwing
px4_fmu-v5_irqmonitor
px4_fmu-v5_multicopter
px4_fmu-v5_optimized
px4_fmu-v5_rover
px4_fmu-v5_rtps
px4_fmu-v5_stackcheck
px4_fmu-v5x[_default]
px4_fmu-v5x_p2_base_phy_LAN8742Ai
px4_io-v2[_default]
px4_raspberrypi[_default]
px4_sitl[_default]
px4_sitl_nolockstep
px4_sitl_replay
px4_sitl_rtps
px4_sitl_test
uvify_core[_default]

VIEWER_MODEL_DEBUGGER:

  • VIEWER:这是模拟器(“观察者”),用于启动和连接:gazebojmavsim
  • MODEL:车辆模型来使用(例如iris默认), rovertailsitter等等),这将通过模拟器被加载。环境变量PX4_SIM_MODEL将设置为选定的模型,然后在启动脚本中使用它来选择适当的参数
  • DEBUGER:调试器的使用方法:none默认), idegdblldbdddvalgrind ,callgrind有关更多信息,请参见仿真调试

可以使用以下命令获取所有可用VIEWER_MODEL_DEBUGGER选项的列表:

make px4_sitl list_vmd_make_targets

#输出(东西太多,就不复制了)

但是运行这个命令好像直接是编译了。

笔记:

  • 最值的CONFIGURATION_TARGETVIEWER_MODEL_DEBUGGER具有默认值,因此是可选的。例如,gazebo等于gazebo_irisgazebo_iris_none
  • 如果要在其他两个设置之间指定默认值,则可以使用三个下划线。例如,gazebo___gdb等效于gazebo_iris_gdb
  • 您可以使用一个noneVIEWER_MODEL_DEBUGGER来启动PX4并等待模拟器。例如,使用启动PX4 make px4_sitl_default none和使用jMAVSim ./Tools/jmavsim_run.sh -l

这些VENDOR_MODEL_VARIANT选项映射到/ boards目录下PX4源代码树中的特定cmake配置文件。具体映射到配置文件board / VENDOR / MODEL / VARIANT.cmake (例如,px4_fmu-v5_default对应于boards / px4 / fmu-v5 / default.cmake)。

这里还会有其他故障排除,先不赘述!

4.上载固件(刷板)(仿真不用做)

附加upload到make命令,以通过USB将已编译的二进制文件上传到自动驾驶仪硬件。例如

make px4_fmu-v4_default upload

成功运行将以以下输出结束:

Erase  : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload

 

三.尝试编译

导航到固件目录并使用以下命令启动jMAVSim:

make px4_sitl jmavsim

这将在下面打开PX4控制台:

可以通过键入以下内容来飞行无人机:

pxh> commander takeoff

(可以先按一下Enter键)

当然也可以尝试模拟器 gazebo :

cd Firmware
make px4_sitl gazebo

问题:每次运行这个都死机,哭丧脸!

记过上网查询,好像是内存不足:(到百分之50几的时候就卡机了)

但是我的内存可是8G!!!

还有说是gcc版本的问题,我觉得可能也是这个问题吧,但是是不是解决不了了呢(而且我的Ninja的版本有点旧但是重新安装的时候说是最新版本了,不过看到编译的时候确实用的是ninja的)不知道这个,先放着先。

 


下午新更:

1.解决上面make px4_sitl gazebo就死机或者是下面没死机但是报错

这种问题:

错误内容复制如下:

[1/4] Performing build step for 'sitl_gazebo'
[10/52] Building CXX object CMakeFiles/gazebo_mag...etometer_plugin.dir/src/geo_mag_declination.cpp.o
[10/52] Building CXX object CMakeFiles/gazebo_geo...ugin.dir/src/gazebo_geotagged_images_plugin.cpp.o
FAILED: /usr/bin/c++   -DLIBBULLET_VERSION=2.83 -DLIBBULLET_VERSION_GT_282 -Dgazebo_geotagged_images_plugin_EXPORTS -isystem /usr/include/gazebo-9 -isystem /usr/include/bullet -isystem /usr/include/simbody -isystem /usr/include/sdformat-6.2 -isystem /usr/include/ignition/math4 -isystem /usr/include/OGRE -isystem /usr/include/OGRE/Terrain -isystem /usr/include/OGRE/Paging -isystem /usr/include/ignition/transport4 -isystem /usr/include/ignition/msgs1 -isystem /usr/include/ignition/common1 -isystem /usr/include/ignition/fuel_tools1 -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I/home/zhu/Firmware/Tools/sitl_gazebo/include -I. -I/usr/include/eigen3 -I/usr/include/eigen3/eigen3 -I/usr/include/gazebo-9/gazebo/msgs -I/home/zhu/Firmware/mavlink/include -isystem /opt/ros/kinetic/include/opencv-3.3.1-dev -isystem /opt/ros/kinetic/include/opencv-3.3.1-dev/opencv -I/home/zhu/Firmware/Tools/sitl_gazebo/external/OpticalFlow/include -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/uuid -isystem /usr/include/x86_64-linux-gnu -Wno-deprecated-declarations -Wno-address-of-packed-member -fPIC   -I/usr/include/uuid -I/usr/include/x86_64-linux-gnu -std=gnu++14 -MMD -MT CMakeFiles/gazebo_geotagged_images_plugin.dir/src/gazebo_geotagged_images_plugin.cpp.o -MF CMakeFiles/gazebo_geotagged_images_plugin.dir/src/gazebo_geotagged_images_plugin.cpp.o.d -o CMakeFiles/gazebo_geotagged_images_plugin.dir/src/gazebo_geotagged_images_plugin.cpp.o -c /home/zhu/Firmware/Tools/sitl_gazebo/src/gazebo_geotagged_images_plugin.cpp
c++: internal compiler error: 已杀死 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
[10/52] Building CXX object CMakeFiles/gazebo_gst...era_plugin.dir/src/gazebo_gst_camera_plugin.cpp.o
ninja: build stopped: subcommand failed.
FAILED: cd /home/zhu/Firmware/build/px4_sitl_default/build_gazebo && /usr/bin/cmake --build .
ninja: build stopped: subcommand failed.
Makefile:205: recipe for target 'px4_sitl' failed
make: *** [px4_sitl] Error 1

主要问题出在这个地方:

/home/zhu/Firmware/Tools/sitl_gazebo/src/gazebo_geotagged_images_plugin.cpp
c++: internal compiler error: 已杀死 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
[10/52] Building CXX object CMakeFiles/gazebo_gst...era_plugin.dir/src/gazebo_gst_camera_plugin.cpp.o
ninja: build stopped: subcommand failed.
FAILED: cd /home/zhu/Firmware/build/px4_sitl_default/build_gazebo && /usr/bin/cmake --build .

这里面的报错:

c++: internal compiler error: 已杀死 (program cc1plus)
Please submit a full bug report,

指的是,内存不够,不是物理内存不够,而是虚拟内存不够,因为make编译比较吃内存!!!

解决方法:增加swap space 交换空间!!

来自教程linux 增加虚拟内存swap(使用文件)

操作:

1.查看现有的内存分配

sudo swapon --show

或者:

free -h

2.创建一个分配内存的文件(文件最后存在根目录中,你也可以换目录)

sudo fallocate -l 8G /swapfile

这个8g就是要增加的内存大小

3.查看内存以及设置权限为root,如果不设置的话,教程说不影响使用,但是建议修改

ls -lh /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile

4.格式化交换区文件,建立swap的文件系统,需要一致

sudo mkswap /swapfile

5.启动swap文件

要是以后不在操作这个过程,那么启动这一次就行了,因为开机重启后会变回去,要是再次make的话就要在操作一遍这个指令

教程里面也有那种开机可以直接启动的方法

sudo swapon /swaplife

因为我可能会经常用到,而且我的硬盘100g,够用,所以我就操作了

5.使得系统开机时启动

gedit /etc/fstab

要是没有权限的话

sudo chmod 777 /etc/fstab

然后把下面这个加入到文件中,保存:

/swapfile swap swap defaults 0 0

ok!

看我的蹩脚操作,但可算是弄好了!

(另外有一部分未在上面显示)

这里有一篇链接教程:

Linux中关于swap、虚拟内存和page的区别

2.上一个问题解决后出现一个新问题 (文件内容修改)

找了好久好久,终于找到一篇网站上有一个一样的问题了:

[飞控嵌入式] 关于make px4_sitl gazebo的错误问题 

解决方法:

错误信息提示Firmware/Tools/sitl_gazebo/src/gazebo_usv_dynamics_plugin.cpp这个文件中 ignition::math::Matrix4 xformV(vq);这个语句中,xformV之前没有定义类型
修改为ignition::math::Matrix4<double> xformV(vq);保存

重新make就可以正常使用了

打开这个文件,然后按照这个说法改过来,应该是gazebo这个版本的问题,把两行不一样的变成一样的

ignition::math::Matrix4<double> xformV(vq)

 

然后再一次,就会输出这个成功!!!

 

 

 

 

 

 

 

 

 

 

 

 

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

一、PX4环境搭建和编译(Ubuntu 16.04、ROS kinetic) 的相关文章

  • Celery 简单使用

    异步任务队列 Celery 使用 一 异步任务 xff1a 异步任务是web开发中一个很常见的方法 对于一些耗时耗资源的操作 xff0c 往往从主应用中隔离 xff0c 通过异步的方式执行 简而言之 xff0c 做一个注册的功能 xff0c
  • 小批量随机梯度下降

    小批量随机梯度下降 mini batch stochastic gradient descent 算法 xff1a 先选取一组模型参数的初始值 xff0c 如随机选取 xff1b 接下来对参数进行多次迭代 xff0c 使每次迭代都可能降低损
  • Ubuntu22下载安装

    文章目录 下载VMware虚拟机安装其他安装方式后续更新 下载 Ubuntu官网 xff1a https ubuntu com 在官网选择Download xff0c 这里演示安装桌面版 xff0c 点击桌面版的22 04版本即可下载 VM
  • ROS学习笔记 程序简单示例一:发布者与订阅者(talker和listener)

    1 创建工作空间 mkdir p catkin ws src cd catkin ws catkin make 2 创建功能包 cd src catkin create pkg messager std msgs roscpp 此时在src
  • Ubuntu18.04编译安装ROS工具包MoveIt

    官方安装教程请点击https moveit ros org install source 最简单的安装方式是apt安装 sudo apt install ros melodic moveit 编译安装时 xff0c 笔者在这一步遇到问题 x
  • pr2+RealSense D435+3D感知配置

    本文环境是ROS Melodic xff0c 参考https www ncnynl com archives 201610 1045 html https blog csdn net qintianhaohao article detail
  • 记录Ceres优化中遇到的一个奇怪问题

    笔者在学习视觉SLAM十四讲的第6讲非线性优化时 xff0c 运行使用Ceres拟合曲线的例程 xff0c 发现当生成数据为如下代码时 vector lt double gt x data y data 数据 for int i 61 0
  • slambook2中训练字典时的DBoW3库问题

    问题描述 视觉SLAM十四讲第2版的第11讲中 xff0c 训练字典的程序需要用到DBoW3库 xff0c 由于从GitHub中克隆下来的slambook2仓库中的3rdparty文件夹下均是空文件 xff0c 故自行下载了DBoW3库 编
  • VMware虚拟网卡对网络的影响

    最近发现打开网页的速度极慢 xff0c 有些网页首次打开需要加载很久 xff0c 甚至加载不出来 起初以为是DNS的原因 xff0c 但是将DNS改为114 114 114 114也没有用 ping域名的时候 xff0c 总是第一次为无法访
  • 【解决】tf2.LookupException: “base_link“ passed to lookupTransform argument target_frame does not exist.

    使用环境ROS MELODIC Python 2 7 在ROS中使用tf监听两个frame的变换关系时 xff0c 出现以下报错 Traceback most recent call last File 34 controller py 3
  • gazebo——解决第一次打开gazebo卡的时间特别久问题

    解决第一次打开gazebo卡的时间特别久问题 cd span class token operator span span class token regex gazebo span mkdir span class token opera
  • NUCLEO开发板 STLINK-V3E体验

    一 前言 NUCLEO开发板普遍在内部集成了ST LINK调试器 编程器 xff0c 所以STM32 Nucleo 144板无需单独的探头 个人理解 xff0c STLINK V3E中 xff0c E是Embedded的意思 xff0c 也
  • GAZEBO 中 sdf文件详解

    GAZEBO 中 sdf文件详解 1 model模型 一个模型数据库会拥有的文件 xff08 1 xff09 database config xff1a 有关数据库的元数据 xff0c 从CMakeList自动填充 本地不需要 xff08
  • 【HCNP-OSPF】LSA

    一 拓扑图 OSPF为什么会引入 划分区域 xff1f 划分区域以后 xff0c 可以带来以下好处 xff1a 1 节省区域中的每一个设备的系统资源 xff08 大区域被划分以后 xff0c 小区域中的数据库内容就会变少 xff09 xff
  • 无人机起降(2):AcFly飞控模块与M8N GPS模块的接口修改

    假如AcFly飞控想使用M8NGPS而不是AcFly GPS 需要将接线进行更换 AcFly飞控接口定义 由飞控手册查阅外设接口 xff1a 超声波 xff1a Ultrasonic 接口 光流传感器 xff1a Uart5 接口 GPS
  • 卡尔曼滤波原理及应用仿真(3):非线性滤波之扩展Kalman滤波

    标量非线性系统EKF 标量系统状态方程 xff1a 观测方程 xff1a MATLAB仿真 设置时间长度为50s xff0c 过程噪声方差Q 61 0 01 观测噪声方差R 61 1 xff0c 初值X 0 61 0 1 xff0c 协方差
  • 100条经典C++笔试题目及答案分享

    100条经典C 43 43 笔试题目分享 一 C 43 43 与C差异 1 17 二 数据类型 关键字 18 37 三 C 43 43 面向对象的特性 38 61 四 程序阅读题 62 89 五 编程练习 90 100 看到好用的经典C 4
  • 2020讯飞AI开发者大赛-温度预测赛道baseline改进

    2020讯飞AI开发者大赛 温度预测赛道baseline改进分享 写在前面数据清洗缺失值处理异常值处理 特征工程模型训练写在最后 写在前面 这是我参加的第二次数据竞赛 xff0c 上次是上个月的 传染病趋势预测 xff0c 西交是主办方的那
  • office显示正在更新怎么办

    问题 xff1a office打开之后 xff0c 显示正在更新 xff0c 过了一段时间后显示失败 xff0c 怎么解决 xff1f 解决方案 xff1a 1 win 43 R输入services msc 2 将Microsoft Off
  • pandas.DataFrame.select_dtypes的用法

    做数据分析时 xff0c 需要对特征进行归类 类别型还是数值型 xff0c pandas提供了select dtypes函数 函数原型 DataFrame select dtypes include 61 None exclude 61 N

随机推荐