C++版本编译
先官网下载代码,并下载安装官网所述安装包
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
下载完编译c++版本
cd ORB_SLAM3
chmod +x build.sh
./build.sh
-
c++版本编译出现问题记录
1、opencv等等直接在Cmakelist.txt修改
2、报一大段错误时先输入
sed -i 's/++11/++14/g' CMakeLists.txt
ROS版本编译
输入所在ros包环境,一般在Examples或者新的版本在Examples_old
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/your path/ORB_SLAM3/Examples/ROS
用以下命令测试
echo $ROS_PACKAGE_PATH
添加成功编译
chmod +x build.sh
./build_ros.sh
ROS编译问题:
1,v1.0 release ros版本编译,提示找不到sophus库,及 Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错:
以下解决方法会引入cv中的eigen2cv方法,需要在每个修改文件的顶部包含以下文件头文件
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
解决 cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()); 报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc第151行,由下面内容替换
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);
解决 vPoints.push_back(pMP->GetWorldPos()); 报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第409行,由以下内容替换
cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);
解决 cv::Mat Xw = pMP->GetWorldPos();报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第530行,由以下内容替换
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
成功
补充问题:在部分机子上即使设置对了路径ros也编译出错如下:
Building ROS nodes
mkdir: cannot create directory ‘build’: File exists
CMake Deprecation Warning at /opt/ros/melodic/share/ros/core/rosbuild/rosbuild.cmake:7 (cmake_policy):
The OLD behavior for policy CMP0011 will be removed from a future version
of CMake.
可是用下方方法:
wget http://fishros.com/install -O fishros && bash fishros
sudo rosdep fix-permissions
rosdep update
使用记录
类似如此:(编译前该话题 或者使用topic_tools改变话题名字)
roslaunch realsense2_camera rs_camera.launch && wait 10;
rosrun ORB_SLAM3 Stereo ./Vocabulary/ORBvoc.txt RealSense_D435i.yaml false