Ubuntu20.04搭建PX4仿真环境及XTDrone开发平台(最详细最明白)
哒哒哒,啥也不会 2024-07-18 09:37:08 阅读 85
一、介绍
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版本了。
<code>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”
所以这里想说的是,就算解决了这一个,后面编译还会有其他需要修改文件源码的问题。
因此我们还是决定用语雀里打包好的压缩包吧。
<code>终端进入到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文件夹就是在仿真环境搭建了各种传感器后,通过这里面的算法获取定位信息。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。