参考https://blog.csdn.net/zhh2005757/article/details/122353772
1.代码下载
git clone https://github.com/electech6/ORB_SLAM3_detailed_comments ORB_SLAM3_v1_detailed
2.编译
//ORB_SLAM3_v1_detailed文件夹中
2.1修改build.sh、build_ros.sh属性为可执行
2.2 sudo ./build.sh
3.ros编译
3.1修改build_ros.sh
echo "Building ROS nodes"
cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j
3.2环境配置
sudo gedit ~/.bashrc
末尾添加:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ORB_SLAM3_v1_detailed/Examples_old/ROS
3.3 ros文件夹下的cmakelist.txt 中include_directories
添加${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${PROJECT_SOURCE_DIR}/../../../include/CameraModels
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
${Pangolin_INCLUDE_DIRS}
)
3.4 报错:cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
解决:ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc
3.4.1:添加头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
3.4.2:修改154行为:
//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);
3.5 报错:vPoints.push_back(pMP->GetWorldPos());
解决:ROS/ORB_SLAM3/src/AR/ViewerAR.cc
3.5.1:添加头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
3.5.2:修改154行为:
//vPoints.push_back(pMP->GetWorldPos());
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
3.6 报错:cv::Mat Xw = pMP->GetWorldPos();
解决:ROS/ORB_SLAM3/src/AR/ViewerAR.cc
3.6.1 修改537行为:
//cv::Mat Xw = pMP->GetWorldPos();
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
3.7 ros编译
./build_ros.sh
4.运行调试
4.1代码更改
//更改为小觅相机话题名
// Maximum delay, 5 seconds
ros::Subscriber sub_imu = n.subscribe("/mynteye/imu/data_raw", 1000, &ImuGrabber::GrabImu, &imugb);
ros::Subscriber sub_img_left = n.subscribe("/mynteye/left/image_raw", 100, &ImageGrabber::GrabImageLeft,&igb);
ros::Subscriber sub_img_right = n.subscribe("/mynteye/right/image_raw", 100, &ImageGrabber::GrabImageRight,&igb);
std::thread sync_thread(&ImageGrabber::SyncWithImu,&igb);
ros::spin();
// Stop all threads
SLAM.Shutdown();
// Save camera trajectory
SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory_TUM_Format.txt");
SLAM.SaveTrajectoryTUM("FrameTrajectory_TUM_Format.txt");
SLAM.SaveTrajectoryKITTI("FrameTrajectory_KITTI_Format.txt");
ros::shutdown();
return 0;
4.2重新编译
./build_ros.sh
4.3打开一个终端依次输入
gnome-terminal -- bash -c "roscore; exec bash"
gnome-terminal -- bash -c "cd /home/knight/MYNT-EYE-S-SDK/ && source ./wrappers/ros/devel/setup.bash && roslaunch mynt_eye_ros_wrapper mynteye.launch; exec bash"
gnome-terminal -- bash -c "cd /home/knight/ORB_SLAM3_v1_detailed/ && rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples_old/Stereo-Inertial/my_MYNT.yaml true; exec bash"