Orb_slam3 ROS ,D435i使用,ubuntu编译小记

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
#include

解决 cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()); 报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc151行,由下面内容替换

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.cc409行,由以下内容替换

cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);

解决 cv::Mat Xw = pMP->GetWorldPos();报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc530行,由以下内容替换

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

你可能感兴趣的:(ubuntu,计算机视觉)