XTDrone仿真平台示例解析(二)——视觉SLAM
无人机在做自主运动规划前一定要知道自己周围有哪些障碍物,以及这些障碍物的形状大致如何,这是它能自主行动的前提。本篇将介绍在XTDrone仿真平台下,如何使用开源代码ORB_SLAM3开启视觉SLAM。XTDrone环境搭建见链接,不再赘述。
ORB_SLAM3
下载ORB_SLAM3开源代码
cd ~/catkin_xtdrone_ws/src/
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
复制XTDrone相关文件到ORB_SLAM3中
cp ~/XTDrone/sensing/slam/vslam/ORB_SLAM3/Examples_old/Stereo/px4_sitl.yaml ~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/Stereo/
cp ~/XTDrone/sensing/slam/vslam/ORB_SLAM3/Examples_old/Stereo-Inertial/px4_sitl.yaml ~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/Stereo-Inertial/
cp ~/XTDrone/sensing/slam/vslam/ORB_SLAM3/xtdrone* ~/catkin_xtdrone_ws/scripts/
若依赖齐全,则可以直接进行编译
cd ~/catkin_xtdrone_ws/src/ORB_SLAM3/
chmod +x build.sh
./build.sh
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/ROS #将这句放到~/.bashrc中,以后使用更方便
chmod +x build_ros.sh
./build_ros.sh
#假如编译全部通过,那就说明所有东西都整好了,本篇结束
各种依赖包
建立tools文件夹用于存放一系列依赖包
cd ~/catkin_xtdrone_ws/src/ORB_SLAM3/
mkdir tools
cd tools
OpenCV
如果完整安装过ros:noetic则可以不用管OpenCV,它会自动安装opencv4.2.0,假如没安装则自行下载开源代码进行安装即可。
Eigen3
单击链接前往官方页面进行下载(建议安装Eigen3.3.7版本):Eigen3
tar -xzvf eigen-3.x.x.tar.gz
编译安装
cd eigen-3.x.x
mkdir build
cd build
cmake ..
make
sudo make install
将Eigen头文件复制到/usr/local/include/
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
Python
可能有部分编译过程需要用到python2,输入指令进行安装
sudo apt install libpython2.7-dev
Pangolin
Pangolin的安装依然是选择源码编译安装(建议安装Pangolin0.6版本)
git clone --recursive https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
./scripts/install_prerequisites.sh recommended
mkdir build
cd build
cmake .. -DPython_EXECUTABLE=`which python3`
make -j
sudo make install
如果碰到'catch2'相关报错,则手动安装catch2
git clone https://github.com/catchorg/Catch2.git
cd Catch2
mkdir build
cd build
cmake ..
make -j
sudo make install
ORB_SLAM3安装问题汇总
1、报错error: ‘slots_reference’ was not declared in this scope
这是c++11的问题,改成c++14进行编译:
cd ~/catkin_xtdrone_ws/src/ORB_SLAM3/
sed -i 's/++11/++14/g' CMakeLists.txt
sed -i 's/++11/++14/g' Thirdparty/DBoW2/CMakeLists.txt
sed -i 's/++11/++14/g' Thirdparty/g2o/CMakeLists.txt
sed -i 's/++11/++14/g' Thirdparty/Sophus/CMakeLists.txt
2、报错opencv cannot find或类似问题
可能是版本对不上,将上面(第1小点)所有能看到的CMaktLists.txt中关于find_package(OpenCV)的部分全部改为find_package(OpenCV 4.2)

3、报错Eigen3相关问题
可能是模块加载问题,ORB_SLAM3不需要用到Eigen3的模块,因此禁用模块即可,将上面(第1小点)所有能看到的CMakeLists.txt中关于find_package(Eigen3 3.1.0 REQUIRED)改为find_package(Eigen3 3.1.0 REQUIRED NO_MODULE)

4、报错:cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());相关问题
修改~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc
// cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);
5、报错vPoints.push_back(pMP->GetWorldPos());相关问题
修改~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.cc
// vPoints.push_back(pMP->GetWorldPos());
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
vPointMP.push_back(pMP);
6、报错cv::Mat Xw = pMP->GetWorldPos();相关问题
修改~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.cc
// cv::Mat Xw = pMP->GetWorldPos();
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
7、报错error: ‘eigen2cv’ is not a member of ‘cv’
修改~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.h添加头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp>
8、build_ros.sh过程报错
修改build_ros.sh为
echo "Building ROS nodes"
cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j
然后重新运行./build_ros.sh即可。
9、报错fatal error: sophus/se3.hpp: No such file or directory
Sophus没有安装,进行安装即可
cd ~/catkin_xtdrone_ws/src/ORB_SLAM3/Thirdparty/Sophus/build
sudo make install
运行视觉SLAM
运行前需要做一些准备
cd ~/catkin_xtdrone_ws/scripts
echo "rosrun ORB_SLAM3 Stereo ~/catkin_xtdrone_ws/src/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/Stereo/px4_sitl.yaml true /camera/left/image_raw:=/$1_$2/stereo_camera/left/image_raw /camera/right/image_raw:=/$1_$2/stereo_camera/right/image_raw /orbslam3/vision_pose/pose:=/$1_$2/mavros/vision_pose/pose" > xtdrone_run_orbslam_stereo.sh
echo "rosrun ORB_SLAM3 Stereo_Inertial ~/catkin_xtdrone_ws/src/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/catkin_xtdrone_ws/src/ORB_SLAM3/Examples_old/Stereo-Inertial/px4_sitl.yaml true /camera/left/image_raw:=/$1_$2/stereo_camera/left/image_raw /camera/right/image_raw:=/$1_$2/stereo_camera/right/image_raw /imu:=/$1_$2/imu_gazebo" > xtdrone_run_orbslam_stereo_inertial.sh
chmod +x xtdrone_run_orbslam_stereo.sh
chmod +x xtdrone_run_orbslam_stereo_inertial.sh
启动仿真
roslaunch px4 indoor1.launch
另起一个终端,进行视觉SLAM试验
cd ~/catkin_xtdrone_ws/scripts
sh xtdrone_run_orbslam_stereo.sh iris 0
# xtdrone_run_orbslam_stereo_inertial.sh用法相同,加入了惯性测量单元,理论上建图会更准确
运行效果

更多推荐
所有评论(0)