在开始XTDrone与ORB-SLAM2联调之前,我们需要确保Ubuntu20.04系统的基础环境已经正确配置。我建议使用全新安装的Ubuntu20.04系统,这样可以避免很多潜在的依赖冲突问题。实测下来,使用虚拟机或物理机均可,但物理机的性能表现会更稳定,特别是当需要运行Gazebo仿真时。
首先更新系统软件包:
bash复制sudo apt update && sudo apt upgrade -y
接下来安装一些基础工具:
bash复制sudo apt install -y git cmake g++ build-essential libssl-dev libusb-1.0-0-dev
对于国内用户,建议更换apt源为国内镜像以加速下载。我通常使用阿里云或清华的镜像源,更换方法很简单:
bash复制sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
XTDrone的核心是PX4飞控系统,我们需要先搭建好PX4的仿真环境。这里我推荐使用PX4 1.13版本,因为这个版本与Ubuntu20.04的兼容性最好。安装过程如下:
bash复制git clone https://gitee.com/robin_shaun/PX4_Firmware.git --recursive
cd PX4_Firmware
git checkout v1.13.0
git submodule update --init --recursive
安装PX4的依赖项:
bash复制bash ./Tools/setup/ubuntu.sh
这里有个常见坑点:如果网络不好导致子模块下载失败,可以尝试多次执行git submodule update命令。我在实际配置中就遇到过这个问题,反复执行了3次才完整下载所有子模块。
XTDrone需要ROS作为通信中间件,Ubuntu20.04对应的是ROS Noetic版本。我强烈推荐使用"鱼香ROS"的一键安装脚本,这个脚本会自动配置国内镜像源,大大加快安装速度:
bash复制wget http://fishros.com/install -O fishros && . fishros
安装完成后,记得初始化rosdep:
bash复制sudo rosdep init
rosdep update
如果遇到网络问题(这在国外服务器上很常见),可以使用rosdepc替代:
bash复制sudo pip3 install rosdepc
sudo rosdepc init
rosdepc update
Gazebo是XTDrone的物理仿真引擎,我们需要安装Gazebo11版本:
bash复制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 update
sudo apt install gazebo11 libgazebo11-dev -y
安装完成后,建议一并安装ROS的Gazebo插件:
bash复制sudo apt install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
ORB-SLAM2对OpenCV版本有特定要求,Ubuntu20.04默认安装的是OpenCV4.2,这个版本基本可以满足需求。但如果你之前安装过其他版本,建议先清理:
bash复制sudo apt purge libopencv* python3-opencv
sudo apt install libopencv-dev python3-opencv
验证安装:
bash复制pkg-config --modversion opencv4
Eigen是ORB-SLAM2依赖的线性代数库,推荐安装3.2.10版本:
bash复制wget https://gitlab.com/libeigen/eigen/-/archive/3.2.10/eigen-3.2.10.tar.gz
tar -xvf eigen-3.2.10.tar.gz
cd eigen-3.2.10
mkdir build && cd build
cmake ..
sudo make install
安装后检查:
bash复制ls /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h
Pangolin是ORB-SLAM2的可视化界面,必须安装0.5版本以避免兼容性问题:
bash复制git clone https://gitee.com/mirrors/Pangolin.git -b v0.5 Pangolin-0.5
cd Pangolin-0.5
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
为了让两个系统能够协同工作,需要正确设置环境变量。编辑~/.bashrc文件,添加以下内容:
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
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
进入ORB-SLAM2目录进行编译:
bash复制cd ~/catkin_ws/src/ORB_SLAM2
chmod +x build.sh
./build.sh
chmod +x build_ros.sh
./build_ros.sh
编译过程中可能会遇到各种问题,最常见的是OpenCV版本不匹配。如果遇到相关错误,可以修改CMakeLists.txt中的OpenCV版本检测部分:
cmake复制find_package(OpenCV 4.2 QUIET)
if(NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV > 4.2 not found.")
endif()
完成所有安装后,可以启动联合测试。首先启动PX4仿真:
bash复制roslaunch px4 mavros_posix_sitl.launch
然后启动ORB-SLAM2的ROS节点:
bash复制rosrun ORB_SLAM2 Stereo ~/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt ~/catkin_ws/src/ORB_SLAM2/Examples/Stereo/EuRoC.yaml true
在实际测试中,我发现相机的参数配置非常关键。XTDrone默认使用的是Euroc数据集参数,如果使用其他相机,需要相应修改YAML配置文件中的相机内参和畸变系数。