XTDrone简明安装教程
XTDrone是基于PX4、ROS与Gazebo的无人机通用仿真平台。支持多旋翼飞行器(包含四轴和六轴)、固定翼飞行器、复合翼飞行器(包含quadplane,tailsitter和tiltrotor)与其他无人系统(如无人车、无人船与机械臂)。在XTDrone上验证过的算法,可以方便地部署到真实无人机上。
GitHub地址:https://github.com/robin-shaun/XTDrone
Gitee地址:https://gitee.com/robin_shaun/XTDrone
使用文档:https://www.yuque.com/xtdrone/manual_cn
基础配置
本人在Ubuntu 20.04和18.04都成功安装XTDrone,经验供参考(官方推荐18.04),报错请参考官方文档和百度自行解决。
Ubuntu 18.04直接按照教程安装。Ubuntu 20.04安装前建立了anaconda虚拟环境,Python版本2.7。
安装依赖
18.04直接按照下面命令。
sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk
pip2 install pandas jinja2 pyserial cerberus pyulog==0.7.0 numpy toml pyquaternion empy pyyaml
pip3 install packaging numpy empy toml pyyaml jinja2 pyargparse
20.04默认设置Python为2.7,Python3为3.8,分别对应pip和pip3。命令1去掉python-pip,命令2改pip2为pip。
ROS安装
根据Ubuntu版本安装对应的ROS,使用fishROS一键安装。
Ubuntu 18.04对应melodic,Ubuntu 20.04对应noetic。
开源地址:https://github.com/fishros/install
wget http://fishros.com/install -O fishros && . fishros
根据提示选择ROS desktop版本和rosdepc,推荐一并安装vscode。
Gazebo安装
卸载ROS自带的Gazebo,重新安装最新的Gazebo 9。
Ubuntu 18.04自带的非最新,Ubuntu 20.04自带的为Gazebo 11。
sudo apt-get remove gazebo*
sudo apt-get remove libgazebo*
sudo apt-get remove ros-melodic-gazebo* #noetic对应修改
根据官网的step-by-step方式安装。
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
到此为止,还差一步ROS Gazebo包的安装。
首先装依赖。
sudo apt-get install ros-melodic-moveit-msgs ros-melodic-object-recognition-msgs ros-melodic-octomap-msgs ros-melodic-camera-info-manager ros-melodic-control-toolbox ros-melodic-polled-camera ros-melodic-controller-manager ros-melodic-transmission-interface ros-melodic-joint-limits-interface #noetic对应修改
下载XTDrone源码。
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git submodule update --init --recursive
拷贝XTDrone改写的ROS Gazebo包。
cd ~/catkin_ws
cp -r ~/XTDrone/sitl_config/gazebo_ros_pkgs src/
catkin build #开发者测试使用catkin_make会出问题,因此建议使用catkin build
检查gazebo_ros是否安装成功。
#先roscore
source ~/catkin_ws/devel/setup.bash
rosrun gazebo_ros gazebo
下载Gazebo模型放在~/.gazebo
中,重命名,此时在~/.gazebo/models/
路径下可以看到很多模型。
cd ~/.gazebo
git clone https://github.com/osrf/gazebo_models.git
mv gazebo_models models
安装MAVROS
注意,mavros-extras一定别忘记装,否则视觉定位将无法完成。
sudo apt install ros-melodic-mavros ros-melodic-mavros-extras #noetic对应修改
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 #这步需要装一段时间
PX4配置
这里PX4基本上就是原固件,使用v1.11.0-beta1。
git clone https://github.com/PX4/PX4-Autopilot.git
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,加入以下代码,注意路径匹配,前两个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
测试PX4原固件。
cd ~/PX4_Firmware
roslaunch px4 mavros_posix_sitl.launch
并运行
rostopic echo /mavros/state
若connected: True,则说明MAVROS与SITL通信成功,可以使用QGC对无人机进行控制。
XTDrone源码下载及测试
下载XTDrone源码。
git clone https://gitee.com/robin_shaun/XTDrone.git
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中的插件(源代码不能控制多无人机的云台),需要重新编译PX4。
cd ~/PX4_Firmware
make px4_sitl_default gazebo
键盘控制无人机飞行
第一个终端运行
cd ~/PX4_Firmware
roslaunch px4 indoor1.launch
第二个终端运行
cd ~/XTDrone/communication/
python multirotor_communication.py iris 0 #20.04改为python3
第三个终端运行
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel #20.04改为python3
便可以通过键盘控制1架iris的解锁/上锁(arm/disarm),修改飞行模式,飞机速度等。一般可以使用offboard模式起飞,这时起飞速度要大于0.3m/s才能起飞(即:upward velocity 需要大于0.3)。注意,飞机要先解锁才能起飞!飞到一定高度后可以切换为‘hover’模式悬停,再运行自己的飞行脚本,或利用键盘控制飞机。
推荐起飞流程,按i把向上速度加到0.3以上,再按b切offboard模式,最后按t解锁。
RotorS与XTDrone共存问题
按照上述步骤安装XTDrone后,再使用RotorS,会报错gzserver: symbol lookup error: /XXX/catkin_ws/devel/lib/librotors_gazebo_multirotor_base_plugin.so: undefined symbol: _ZN14gz_sensor_msgs9ActuatorsC1Ev。
参考链接:https://blog.csdn.net/m0_47737058/article/details/115736623
问题原因
此处问题与mav_mags有关,RotorS和sitl_gazebo定义的mav_msgs同名但内容不同。
因此要使用RotorS时候,需要删除~/PX4_Firmware/build/px4_sitl_default/build_gazebo/libmav_msgs.so。
由于source的顺序是PX4在后,XTDrone可以正常使用,无需删除RotorS中的libmav_msgs.so。
路径可用locate命令定位。
locate libmav_msgs
改进方法
要用RotorS时候不source后面PX4的路径就行,可以修改~/.bashrc。
# choose which simulator?
echo "XTDrone(1) or RotorS(2)?"
read edition
if [ "$edition" -eq "1" ];then
# conda env
conda activate xtdrone
# px4 firmware
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
else
# conda env
conda activate rotors
fi