Ubuntu20.04搭建PX4仿真环境及XTDrone开发平台(最详细最明白)

一、介绍

PX4-Autopilot仿真平台是由PX4官方提供的集虚拟px4固件、真机烧录固件、gazebo环境及模型于一体的平台,用户可以自己编写程序,通过mavros接口与虚拟px4固件进行mavlink协议的通讯,并在gazebo中显示虚拟世界和模型。因此PX官方手册里给了一个经典的例程:offboard.cpp和offboard.py,让用户通过程序开发,实现无人机自主功能。而XTDrone,就是提供一系列程序及教程的通用开发平台,见下图:【当然,可以看到,sitl_config文件夹里的models里的传感器sdf模型和修改过的gazebo_ros插件也是实现各种仿真的必要贡献】

代码框架

二、写在前面

1、XTDrone是基于ubuntu18.04和ros melodic开发的。大家都知道,ubuntu18.04LTS是使用较广泛的系统,因为很多开源算法都是在18.04开发的。而ubuntu20.04作为最后一个支持ROS1的LTS系统,在很多预装库的版本上有所提升,例如20.04使用python3、opencv4、gazebo11等等。这就得ubuntu20.04在部署算法时容易出现问题,但我还是头铁,自2020年发布,就开始使用了。
2、之前XTDrone是与PX4 1.11虚拟固件进行通讯的,现在PX4 1.13出来了,XTDrone也在升级维护,以适配PX4 1.13版以获取更好的性能。接下来,带领大家进入语雀文档按照XTDrone教程,在Ubuntu20.04上部署1.13版本的px4和XTDrone,然后对应步骤给出注意点。毕竟Ubuntu20.04,还是要作出些改变才能装好。

三、开始配置

话不多说,可以打开语雀文档,点到仿真平台基础配置(对应PX4 1.13版)

在这里插入图片描述


主要是 依赖安装、ROS安装、Gazebo安装、mavros安装、PX4下载、XTDrone下载和配置。
而我,先调整下步骤,先想办法把需要源码下载的下载好,只是先不急着编译,然后再往下看我的安装步骤。
(1)先下载PX4-Autopilot和XTDrone的源码,因为里面包含中间步骤需要用的东西
通过以下命令默认下载master分支,而master指针一般指向最新稳定版,随着时间推移这条命令就无法克隆到1.13版本了。

1、克隆PX4
git clone https://github.com/PX4/PX4-Autopilot.git
# 以后若想克隆指定1.13.2版本。(2022.11.22出的)
# git clone -b v1.13.2 https://github.com/PX4/PX4-Autopilot.git --recursive
1、克隆XTDrone
git clone https://gitee.com/robin_shaun/XTDrone.git

其中PX4-Autopilot通过github克隆会很慢,可以先下载XTDrone,再去语雀文档,里面给出了打包好的PX4-Autopilot的下载链接

1、依赖安装

这个主要是PX4仿真平台所需的依赖。肖老师(及项目贡献者)【后面简称肖老师,但其他参与者的贡献不可忽略】给出的如下,其实不全,在编译px4时还是会报错缺少库,因此先不要复制代码去下载,先往下看。

1、sudo apt install ninja-build libimage-exiftool-perl ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawk 
2#ubuntu20用户就把pip2改成pip3,不然装到/usr/lib/python2.7里去了
   pip2 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml  
3、pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse

因此需要说明的第一个地方来了:
如果学习过PX4官方手册里,配过PX4仿真平台的人,应该知道,官方列了一个requirements.txt,里面写出了各个库需满足的最低版本,并且给出了一个脚本ubuntu.sh,在运行时可以安装 库、真机固件烧录、gazebo仿真依赖。使用命令bash ubuntu.sh即可安装齐。但是, 我们先执行

cd PX4-Autopilot/Tools/setup/
bash ubuntu.sh --no-sim-tools 
不加参数 --no-sim-tools,就会自动安装ubuntu版本对应的gazebo及gazebo-dev,和javsim等仿真依赖
因为ubuntu20是gazebo11,而XTDrone一般用gazebo9,所以不能急着安装gazebo11依赖(同时,如果不喜欢在ubuntu下make upload来烧录固件的,可以继续加参数 --no-nuttx)

官方的requirements.txt如下:

argcomplete
argparse>=1.2
cerberus
coverage
empy>=3.3
future
jinja2>=2.8
jsonschema
kconfiglib
lxml
matplotlib>=3.0.*
numpy>=1.13
nunavut>=1.1.0
packaging
pandas>=0.21
pkgconfig
psutil
pygments
wheel>=0.31.1
pymavlink
pyros-genmsg
pyserial
pyulog>=0.5.0
pyyaml
requests
setuptools>=39.2.0
six>=1.12.0
toml>=0.9

执行完之后再去复制肖老师的安装依赖,把剩下的可能XTDrone里需要用到的补全。

2、ROS 安装

Ubuntu20.04对应 ros noetic,可以前往我的博客进行安装ros noetic

3、Gazebo安装

XTDrone一般用gazebo9进行仿真,而在安装ros noetic时会自动安装gazebo11以及对应的gazebo-ros插件,这里我们需要卸载,然后安装gazebo9以及肖老师修改过的gazebo-ros插件。
(1)卸载gazebo11

sudo apt-get remove gazebo* 
sudo apt-get remove libgazebo*
sudo apt-get remove ros-noetic-gazebo* 

(2)安装gazebo9

a、添加软件仓库 
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
b、获取密钥
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

c、更新软件原
sudo apt-get update

d、安装
sudo apt-get install gazebo9
sudo apt-get install libgazebo9-dev #一定要记得这个

e、检查
gazebo #应该要能打开gazebo

f、升级
sudo apt-get upgrade

(3)还没完,还有对应的gazebo-ros插件
因为gazebo-plugin修改过,因此gazebo-ros不要二进制安装,而用源码安装和编译,先创建工作空间。

mkdir -p ~/catkin_ws/src
mkdir -p ~/catkin_ws/scripts
cd catkin_ws && catkin init # 使用catkin_make话,则为cd catkin_ws/src && catkin_init_workspace
sudo apt install python3-catkin-tools #安装这个才能catkin build
catkin build # 使用catkin_make话,则为 cd .. && catkin_make 
gedit ~/.bashrc
在下面写入:source ~/catkin_ws/devel/setup.bash #先写好source路径
关闭文件,在终端执行
source ~/.bashrc

然后gazebo-ros的源码在 XTDrone/sitl_config/下面(这又体现先下载好XTDrone的好处了)。只需要将里面的gazebo_ros_pkg复制到刚创建的catkin_ws/src,然后再安装依赖和编译工作空间里的gazebo_ros_pkg。

1、sudo apt-get install ros-noetic-moveit-msgs ros-noetic-object-recognition-msgs ros-noetic-octomap-msgs ros-noetic-camera-info-manager  ros-noetic-control-toolbox ros-noetic-polled-camera ros-noetic-controller-manager ros-noetic-transmission-interface ros-noetic-joint-limits-interface
2、catkin build
3、检查
roscore
rosrun gazebo_ros gazebo #会打开gazebo

(4)gazebo部分还没完呢
Gazebo官网上有很多开源的模型文件,我们要下载好一些需要的模型文件(语雀文档里有下载链接),然后解压缩后放在~/.gazebo中,此时在~/.gazebo/models/路径下可以看到很多模型。如果不做这一步,之后运行Gazebo仿真,可能会缺模型,这时会自动下载,Gazebo模型服务器在国外,自动下载会比较久。

4、mavros安装

文档里直接二进制安装的

1、sudo apt install ros-melodic-mavros ros-melodic-mavros-extras 		# for ros-melodic
2、wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh
3、sudo chmod a+x ./install_geographiclib_datasets.sh
4、sudo ./install_geographiclib_datasets.sh #这步需要装一段时间

如果需要源码安装mavros的,请移步我的博客两种方式安装mavros

5、PX4配置

如果前面已经下载好且解压了源码,可以直接开始布置。
【又一个注意点:我自己是先(用梯子)git clone的PX4源码,且完整,然后make px4_sitl_default gazebo时,除了缺依赖补依赖之外,遇到一个头疼的问题,就是PX4-Autopilot/Tools/sitl_gazebo/include/gazebo_motor_failure.h这个头文件有问题。看第32行的rclcpp,这个是ros2里面用于话题通讯的自带功能包,那ros1下肯定没有这个,那肯定解决不了。 】

在这里插入图片描述

然后再立马回头看看语雀里下载的PX4压缩包,找到这个文件,发现已经被修改成#include “ros/subcribe_opitions.h”
所以这里想说的是,就算解决了这一个,后面编译还会有其他需要修改文件源码的问题。


因此我们还是决定用语雀里打包好的压缩包吧。

终端进入到PX4-Autopilot
1、mv PX4-Autopilot ~/PX4_Firmware #给文件夹换个名字,叫PX4_Firmware。
#(1)名字随便无所谓,但懒得改,后面source路径的时候直接复制不好吗,省得自己敲
#(2)一定要用 mv 命令,如果自己手动创文件夹再挪进去会破坏仓库的完整性,编译报错:分支不是一个git仓库
2、检出
1、如果是自己git clone的,就执行:
   git branch #查看本地克隆仓库是哪个分支
2、下载的压缩包,就执行这个命令
git checkout -b xtdrone/dev v1.13.2 
#这个命令是在本地创建一个分支,并切换到这个分支。checkout一个分支,
#会更新当前的工作空间中的文件,使其与检出分支的commit版本状况保持一致。这之后工作区中的
#所有变更都会被记录在checkout出来的那个分支上。这一操作可以认为是在挑选你希望修改的工作分支。
3、git submodule update --init --recursive #检查子模块的完整性
3、make px4_sitl_default gazebo #编译px4固件及默认的gazebo空世界。编译成功会弹出gazebo,关闭即可

编译过程可能还会出现失败的情况,一般是因为缺少某些依赖。仔细翻阅终端报错信息,使用sudo apt install命令安装相应的库。

#配好好路径
gedit ~/.bashrc
在里面写入:
source ~/catkin_ws/devel/setup.bash
source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default
#确保文件最底部是export,而不是source 
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo

关闭文件,在终端执行
source ~/.bashrc

由于前面编译好了,所以可以通过launch文件启动px4的仿真

cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch #还是弹出gazebo和iris飞机模型

6、XTDrone配置

cd XTDrone
git checkout 1_13_2 #这个命令是在本地创建一个分支,并切换到这个分支。
#checkout一个分支,会更新当前的工作空间中的文件,使其与检出分支的commit版本状况保持一致。
#这之后工作区中的所有变更都会被记录在checkout出来的那个分支上。这一操作可以认为是在挑选你希望修改的工作分支。
git submodule update --init --recursive #检查子模块的完整性
# 修改启动脚本文件
cp sitl_config/init.d-posix/* ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/
# 添加launch文件
cp -r sitl_config/launch/* ~/PX4_Firmware/launch/
# 添加世界文件
cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/
# 修改部分插件
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.hh ~/PX4_Firmware/Tools/sitl_gazebo/include
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src
cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.h ~/PX4_Firmware/Tools/sitl_gazebo/include
# 添加CMakeLists.txt,对sitl_gazebo下的文件指定编译规则
cp sitl_config/CMakeLists.txt ~/PX4_Firmware/Tools/sitl_gazebo
# 修改部分模型文件
cp -r sitl_config/models/* ~/PX4_Firmware/Tools/sitl_gazebo/models/ 
# 替换同名文件
cd ~/.gazebo/models/
rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/
防止~/.gazebo/models/这个文件夹下,会存在与~/PX4_Firmware/Tools/sitl_gazebo/models/ 这个文件里冲突相同模型文件 #如果没移除,说明下载的models没有这几个模型,那就不用管。

重新编译

cd ~/PX4_Firmware
make px4_sitl_default gazebo

编译成功后关闭终端和gazebo,启动下面这个新的仿真环境

cd ~/PX4_Firmware
roslaunch px4 indoor1.launch

四、开始XTDrone学习

下面,就可以进入XTDrone文件夹,可以学习了。
control文件夹就是键盘控制那些(这样就不需要遥控器了)
communication文件夹就是mavros话题与px4互传信息。
sensing文件夹就是在仿真环境搭建了各种传感器后,通过这里面的算法获取定位信息。

原文地址:https://blog.csdn.net/weixin_45291614/article/details/133657158

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预编译版,总体过程感觉还是挺简单的,但是由于在网上找的参考资料并没有和自己遇到的情况完全一样的,所以把自己的安装过程记录下来,方便和自己一样的后来人进行安装,同时也自己作个记录留作备忘。其实预编译版的CARLA本身几乎不用什么命令行进行安装,主要步骤只有解压缩和拷贝文件,和极少的命令行安装操作。但是相关依赖以及其它的CARLA所使用的一些工具需要一起安装好,下面一起来看看安装步骤吧。_ubuntu22.04安装carla
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载Ubuntu 20 安装包_ubuntu20下载
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装rally, pip3 install -r requirements.txt 时提示如下: 说明openssl 已安装。解决:1. pip3 install --upgrade pip , 结果输出如下 ..._error: command '/usr/bin/gcc' failed with exit code 1
文章浏览阅读1.1k次。自己刚踩坑装好的W11 WSL2 miniconda_wsl2 cuda
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standalone的,会有一点区别(不识别 下面的 -localhost no)上面的命令会在~/.vnc/目录下生成一个 passwd文件。具体端口号,可以查看vncserver -list返回结果中的RFB PROT。作用是vncserver启动的时候运行这些命令,把桌面程序启动起来。如果希望用某个用户比如 demo登录,就用su切换到这个用户。桌面版默认就已安装,服务器版需要手动安装,并启动。关闭某个会话可以用下面的命令。远程地址输入ip:port。查看全部的vnc会话。_ubuntu vncserver
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主要是连接一个远程的code-server服务,code-server服务安装在什么系统,调用的就是什么系统的环境,如这里使用ubuntu进行安装code-server,那使用的就是ubuntu环境,如需要go,python,java开发,需要在Ubuntu安装相关环境,创建的文件夹和项目也是在Ubuntu里面.这种方式其实在访问vscode的时候利于可以随时随地进行连接使用,且不受设备影响。
安装Ubuntu上超好用的终端Terminator。通过添加软件源、更新源、安装Terminator等步骤完成。
文章浏览阅读1.1k次,点赞83次,收藏74次。不要嫌弃Ubuntu的单调的终端界面啦,快来试试这些有意思的命令_ubuntu系统有趣的玩法
文章浏览阅读2.5k次。在ubuntu系统中,swap空间就是虚拟内存,所以考虑在磁盘空间富余的目录下设置虚拟内存swap文件,用来缓解内存不足的问题。通过上面的信息可以看到,/dev/vda2 目录下还剩余45G,那么就可以把swap文件生成在/dev/vda2目录下。在系统监控中发现,当数据库服务程序启动后,占用了大量内存空间,导致系统的剩余的内存往往只有几十MB。# bs 为块的大小,count 创建多少个块。# 执行命令后,删除创建的swap目录即可。#把生成的文件转换成 Swap 文件。2、创建一个swap文件。_ubuntu20修改swap大小
文章浏览阅读2.9k次,点赞2次,收藏10次。记录RV1126的SDK编译错误,以及解决处理_command exited with non-zero status 1
文章浏览阅读1.1w次,点赞22次,收藏101次。【记录】ubuntu20.04安装nvidia显卡驱动_ubuntu20.04安装nvidia显卡驱动
文章浏览阅读727次,点赞6次,收藏27次。在嵌入式Linux开发过程中,可能遇到uboot无法通过nfs服务从Ubuntu下载系统镜像(TTTTTT)的问题。如果你使用的是较新版本的Ubuntu,那么其**默认内核将不支持nfs2**!而**uboot仅支持到nfs2**,因此我们需要修改系统内核以及nfs配置文件,开启nfs2服务。**此问题非常棘手**,因为问题出现的时间太近,并且使用的人少。由于是2023年后才出现的问题,**chatgpt也无法解答**!本文参考网络上多篇博客资料,是解决此问题的最新办法。
ubuntu系统下安装软件的方法有多种,包括使用apt工具、deb软件包安装、源码编译安装以及通过软件中心安装。还有一种以 .run 后缀的软件包也可以在ubuntu系统下安装。具体的安装方法可以通过百度搜索来获取。
文章浏览阅读814次。本篇目的:Xubuntu如何安装pkg-configpkg-config是一个计算机软件包,用于帮助开发人员查找、定位和使用依赖库。它通常用于构建软件时,开发人员需要指定程序所依赖的外部库的位置和版本信息。使用pkg-config,开发人员可以很容易地查找、检索和导出这些依赖库的信息,从而简化了软件的构建过程。_ubuntu中怎么下载pkg-config
文章浏览阅读2k次。ubuntu创建共享文件夹_ubuntu20.04共享文件夹
文章浏览阅读2.9k次,点赞74次,收藏73次。对于有长期远程桌面需求的用户,建议将cpolar套餐升级到专业套餐,支持配置固定的公网TCP端口,且带宽也会相应的增大,支持更高效便捷的远程桌面连接Ubuntu系统。【cpolar内网穿透支持http/https/tcp协议,支持永久免费使用,不限制流量,无需公网IP,也不用进入路由器设置,操作简单。隧道创建成功后,点击左侧仪表盘的状态——在线隧道列表,查看xrdp隧道的所生成的公网TCP端口地址,复制下来。,使用cpolar内网穿透映射3389端口,生成公网TCP端口地址,实现在公网环境下,_ubuntu 局域网桌面
文章浏览阅读3.2k次。而在linux的ubuntu版本中,又多出两类用户:安装ubuntu系统的源用户xxx,其与root具有相同权限,仅在执行命令时,前面加sudo。在ubuntu中,用命令deluser username可以直接删除用户账号及家目录,而用centos7中的命令userdel -r username才能达到同样目的。在ubuntu中,没有moduser命令,centos7中的usermod修改用户信息的命令,同样可以用在ubuntu中。在系统中,创建新的用户或称为账号,一般需要多步操作。_ubuntu创建一个新用户
文章浏览阅读1.6w次,点赞4次,收藏23次。系统的许多日志文件都存储在 /var/log 目录中。你可以使用 ls /var/log 命令来列出可用的日志文件。/var/log/Xorg.0.log:包含 X 服务器的日志信息(图形界面)。打开DASH,搜索日志或者log,打开app,这个是/var/log的界面版。这将显示系统日志的末尾,并提供有关系统崩溃和错误的信息。/var/log/kern.log:包含内核日志信息。/var/log/dmesg:包含开机时的日志信息。/var/log/syslog:包含系统日志信息。_ubuntu查看系统日志
文章浏览阅读857次。首先将source.list复制为source.list.bak备份,然后将source.list内容改为需要的镜像源列表即可。Ubuntu采用apt作为软件安装工具,其镜像源列表记录在/etc/apt/source.list文件中。本节均为 Ubuntu 20.04 的镜像源列表。若为其他版本,将所有focal更改为其他版本代号即可。_apt 国内源