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

240
0
2020年12月24日 09时24分

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 9jMAVSim仿真器,以及/或者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

 

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

 

 

注意注意!!!必须使用受支持的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控制台:

 

1

 

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

 

pxh> commander takeoff

 

可以先按一下Enter键)

 

2

 

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

 

cd Firmware
make px4_sitl gazebo

 

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

 

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

 

3

 

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

 

4

 

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

 


下午新更:

 

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

 

这种问题:

 

5

 

错误内容复制如下:

 

[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!

 

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

 

6

 

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

这里有一篇链接教程:

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

 

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

7

 

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

 

[飞控嵌入式] 关于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)

 

8

 

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

 

9

 

发表评论

后才能评论