本文作者:shreddedginger 即 姜丝哥
特别鸣谢:rocket 即 游侠学长
推荐虚拟机:VMware 17 player或者pro都可以
推荐操作系统:Ubuntu 20.04
依赖的安装【千万别忘记,ginger在这里就漏了一次,导致后面一系列无效debug】
sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python3-pip gawk pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml
【注意:这一句如果不成功的话请升级一下numpy确保你numpy的版本在1.2以上】
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse
【注:每个前面有git或者wget的指令请打开科学上网工具】
单独PX4 安装【注意如果需要装XTDrone的话请不要执行下面三个指令,去后面找XTDrone的PX4安装教程,装了也不要紧,删掉PX4文件夹即可】:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot bash ~/PX4-Autopilot/Tools/setup/ubuntu.sh
下面进行ROS的安装:
【注:安装ros前需打开“软件与更行”这个软件,替换代码源,一般让系统检索直接选择最好的源就行,然后重新载入】 ros安装:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-get update sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full sudo wget http://fishros.com/install -O fishros && . fishros //选3 rosdepc update echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
试试运行一下指令
roscore
若没报错就可以【linux结束指令ctrl+c】
至此ROS本体安装成功
配置mavros环境
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh sudo chmod a+x ./install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh #这步需要装一段时间
注:若无法执行wget指令则进行以下操作: { 回到home环境
touch install_geographiclib_datasets.sh gedit install_geographiclib_datasets.sh
将下列代码粘进去然后保存
#!/bin/bash Script to install the model datasets required to GeographicLib apply certain conversions if [[ $UID != 0 ]]; then echo "This script require root privileges!" 1>&2 exit 1 fi Install datasets run_get() { local dir="$1" local tool="$2" local model="$3" files=$(shopt -s nullglob dotglob; echo /usr/share/GeographicLib/$dir/$model* /usr/local/share/GeographicLib/$dir/$model*) if (( ${#files} )); then echo "GeographicLib $tool dataset $model already exists, skipping" return fi echo "Installing GeographicLib $tool $model" geographiclib-get-$tool $model >/dev/null 2>&1 files=$(shopt -s nullglob dotglob; echo /usr/share/GeographicLib/$dir/$model* /usr/local/share/GeographicLib/$dir/$model*) if (( ! ${#files} )); then echo "Error while installing GeographicLib $tool $model" return fi } check which command script is available if hash geographiclib-get-geoids; then run_get geoids geoids egm96-5 run_get gravity gravity egm96 run_get magnetic magnetic emm2015 elif hash geographiclib-datasets-download; then # only allows install the goid model dataset geographiclib-datasets-download egm96_5; else echo "OS not supported! Check GeographicLib page for supported OS and lib versions." 1>&2 fi
然后运行:sudo ./install_geographiclib_datasets.sh }
创建工作空间
mkdir catkin_ws cd catkin_ws/ mkdir src cd src/ catkin_init_workspace cd ..
【注意如果你能正常使用catkin_build还是建议build】
catkin_make
注意:XTDrone的教程建议使用catkin_build指令进行工作空间的编译,但是笔者实测多次发现可能build指令报错较多,不适合小白debug【注意以后所有本工作空间下的编译都使用catkin_make,不能使用catkin_build,但是关于两个指令的深层区别大家可以进一步了解】
catkin_make install
编译一定要回到catkin_ws目录 然后设置环境变量
source devel/setup.bash
检查环境变量
echo $ROS_PACKGE_PATH
至此工作空间建立完成
下面我们进行Gazebo11的删除和Gazebo9的安装以及XTDrone源码的下载 【注意,这部分在XTDrone的语雀教程中写的比较混乱,可能很多人分不清到底执行顺序是什么,这里笔者全部整理好了】
进行Gazebo11的删除
sudo apt-get remove gazebo* sudo apt-get remove libgazebo* sudo apt-get remove ros-noetic-gazebo*
进行Gazebo9的安装
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 https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt-get update
注:下面两步重新装上gazebo9
sudo apt-get install gazebo9 sudo apt-get install libgazebo9-dev
注:重装Gazebo9后需要更新依赖
sudo apt upgrade
下面进行XTDrone源码的下载
git clone https://gitee.com/robin_shaun/XTDrone.git cd XTDrone git submodule update --init --recursive 让我们再装亿点点依赖 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 cd ~/catkin_ws cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs src/
【注意如果下面catkin_make出现'em'模型未找到导致make失败的话(如上图)执行这两句】
pip uninstall em
pip install empy==3.3.4
注意下面要进行编译,XTDrone原话为 { catkin build #开发者测试使用catkin_make会出问题,因此建议使用catkin build } 但是ginger这里使用的是catkin_make
catkin_make
打开另一个终端运行
roscore
在原来终端运行
source ~/catkin_ws/devel/setup.bash rosrun gazebo_ros gazebo
如果gazebo正常启动表明gazebo_ros安装成功
下面下载gazebo的模型,也可以去XTDrone上直接下载别人clone好的安装包
cd ~/.gazebo git clone https://github.com/osrf/gazebo_models.git mv gazebo_models models
接着我们开始XTDrone的PX4配置【如果你按照第一步安装了的话,请把原来的文件夹删掉就好】
git clone https://github.com/PX4/PX4-Autopilot.git 【注:如果下载的太慢可以去XTDrone上直接下载别人clone好的安装包】 mv PX4-Autopilot PX4_Firmware #重命名 cd PX4_Firmware git checkout -b xtdrone/dev v1.11.0-beta1 #切分支1.11.0-beta1,命名分支为xtdrone/dev git submodule update --init --recursive make px4_sitl_default gazebo #20.04 conda deactivate再编译
下面修改bashrc文件
打开文件夹的主目录,按下ctrl+h显示隐藏文件,打开.bashrc文件,或者在终端使用这个命令 gedit ~/.bashrc 然后将以下代码贴到文档最后【注意路径匹配,前两个source顺序不能颠倒】
source ~/catkin_ws/devel/setup.bash source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo
ctrl+s保存回到终端
下面测试PX4固件
cd ~/PX4_Firmware roslaunch px4 mavros_posix_sitl.launch
打开另一个终端
rostopic echo /mavros/state
若connected: True,则说明MAVROS与SITL通信成功。如果是false,一般是因为.bashrc里的路径写的不对,请仔细检查。
下面安装QGC地面站
打开梯子
然后去这个网站跟着Step by Step那个下
Download and Install | QGC Guide (master)
下面进行XTDrone的配置
cd XTDrone git submodule update --init --recursive cp sensing/gimbal/gazebo_gimbal_controller_plugin.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/ #修改PX4 sitl_gazebo中的插件 cp sitl_config/init.d-posix/rcS ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/ cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/ cp -r sitl_config/models/* ~/PX4_Firmware/Tools/sitl_gazebo/models/ cp -r sitl_config/launch/* ~/PX4_Firmware/launch/ cd ~/.gazebo/models/ rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/
【注意如果最后一行提示找不到后面三个可以暂时不管】
由于修改了PX4 sitl_gazebo中的gazebo_gimbal_controller_plugin.cpp(源代码不能控制多无人机的云台),要再编译一次。
cd ~/PX4_Firmware rm -r build/ make px4_sitl_default gazebo
注意,在XTDrone对应本PX4版本的文件中漏掉了第二句删除原有build文件,shreddedginger在这里被折磨了好久,再次特别鸣谢rocket
下面试试用键盘控制仿真中无人机飞行?
第一个终端
cd ~/PX4_Firmware roslaunch px4 indoor1.launch
当gazebo完全启动后 第二个终端
cd ~/XTDrone/communication/ python3 multirotor_communication.py iris 0
【注意,XTDrone语雀中使用的python指令而非python3指令,但是由于现在默认的linux是python3的环境,所以python指令无法使用,实测发现python3可以使用】
第三个终端
cd ~/XTDrone/control/keyboard python3 multirotor_keyboard_control.py iris 1 vel
点开gazebo将第三个终端放在最上层,然后 便可以通过键盘控制1架iris的解锁/上锁(arm/disarm),修改飞行模式,飞机速度等。使用v起飞利用的是takeoff飞行模式,相关参数(起飞速度、高度)要在rcS中设置。一般可以使用offboard模式起飞,这时起飞速度要大于0.3m/s才能起飞(即:upward velocity 需要大于0.3)。注意,飞机要先解锁才能起飞!飞到一定高度后可以切换为‘hover’模式悬停,再运行自己的飞行脚本,或利用键盘控制飞机。
【推荐起飞流程,按i把向上速度加到0.3以上,再按b切offboard模式,最后按t解锁。】
【【到此,仿真平台基础配置完成!祝贺您完成了第一步!!!】】
参考资料链接: 仿真平台基础配置(对应PX4 1.13版) · 语雀 Download and Install | QGC Guide (master) XTDrone简明安装教程_xtdrone安装-CSDN博客
终极参考:rocket