ubuntu20.04在noetic下编译orbslam2

ubuntu20.04在noetic下编译orbslam2

参考链接1:https://blog.csdn.net/qq_58869016/article/details/128660588
参考链接2:https://blog.csdn.net/dong123456789e/article/details/129693837
在noetic下的安装环境
1.库安装

sudo apt-get update
sudo apt-get install  cmake gcc g++ git
sudo apt-get install libblas-dev liblapack-dev

2.安装Pangolin0.5

sudo apt-get install libxkbcommon-dev
sudo apt-get install wayland-protocols
sudo apt install libglew-dev
git clone https://github.com/cheukwaylee/Pangolin-0.5
cd Pangolin
mkdir build
cd build
cmake ..
make -j
sudo make install

3.源码编译安装Eigen3.3.9:
http://eigen.tuxfamily.org/index.php?title=Main_Page

mkdir build
cd build
cmake ..
make
sudo make install

4.ROS-Noetic自带Opencv4.2,因此无需另外安装Opencv。

在编译之前需要修改的地方

第一处修改
将ORB_SLAM2, Example/ROS/ORB_SLAM2 以及Thirdparty/DBoW2下的CMakelist.txt中修改opencv版本

#原find_package(OpenCV 3.0 QUIET)
find_package(OpenCV 4.2 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

第二处修改
ORBextractor.h中头文件修改


#include <vector>
#include <list>
// #include <opencv/cv.h> 这一行注释掉,添加以下两行
#include<opencv2/imgproc/imgproc_c.h>
#include <opencv2/highgui/highgui_c.h>

第三处修改
在Example/Monocular ,Stereo,RGB-D下面的.cc文件中

 # 参考链接:https://blog.csdn.net/m0_56140527/article/details/132496600
 #将下行中CV_LOAD_IMAGE_UNCHANGED替换为cv::IMREAD_UNCHANGED
 # im = cv::imread(vstrImageFilenames[ni],CV_LOAD_IMAGE_UNCHANGED);
 
 im = cv::imread(vstrImageFilenames[ni],cv::IMREAD_UNCHANGED);

 #这是因为opencv4.x以上,有些宏,API名字改了,需要改为新的
 #CV_LOAD_IMAGE_UNCHANGED 改为 cv::IMREAD_UNCHANGED
 #CV_LOAD_IMAGE_GRAYSCALE  改为 cv::IMREAD_GRAYSCALE
 #CV_LOAD_IMAGE_COLOR    改为 cv::IMREAD_COLOR
 #CV_LOAD_IMAGE_ANYDEPTH   改为 cv::IMREAD_ANYDEPTH
 #CV_MINMAX 改成 NORM_MINMAX

调用安卓相机实时运行单目模式下的slam

1、下载Android_Camera-IMU,将其中的Camera-Imu.apk文件发送至手机端进行安装。

git clone https://github.com/hitcm/Android_Camera-IMU.git

2.安装工具包

sudo apt-get install ros-noetic-imu-tools  # 修改对应自己的 ROS 版本

3.查看自己电脑的ip 地址:

ip address

获得地址后,在手机端打开Camera-Imu.apk,将ip地址输入,点击Connect

4.调用手机相机

第一个终端:
roscore
第二个终端


    cd Android_Camera-IMU

    roslaunch android_cam-imu.launch

在rviz中设置:
在这里插入图片描述
在By topic中添加Image显示图像,添加Imu显示imu(注意要将Fixed Frame的map修改为//imu,之后会显示/imu)

在运行ORB_SLAM2之前对相机进行标定
1.
安装相机校准功能包:

sudo apt-get install ros-noetic-camera-calibration

sudo apt-get install libcanberra-gtk-module
终端1运行:
roscore
终端2运行:
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/camera/image_raw camera:=/camera --no-service-check

标定后,点击
CALIBRATE
SAVE
查看标定以后的文件内容如右图所示。 <camera_matrix type_id=“opencv-matrix”> 是相机内参矩阵,顺序为 fx, 0, cx; 0, fy, cy; 0, 0, 1。 <distortion_coefficients type_id=“opencv-matrix”> 是畸变参数,其顺序为 k1, k2, p1, p2, k3。

然后在/catkin_ws/src/ORB_SLAM2/Examples/Monocular/目录下中新建一个配置文件 AndroidPhone.yaml

运行

终端1:
roscore
终端2:
cd Android_Camera-IMU
roslaunch android_cam-imu.launch

终端3:

rosrun ORB_SLAM2 Mono /home/xxx/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xxx/catkin_ws/src/ORB_SLAM2/Examples/Monocular/AndroidPhone.yaml
<think>好的,我现在需要帮用户解决在Ubuntu 20.04和ROS Noetic环境下配置并运行ORB-SLAM2的问题,特别是处理缺少的launch文件和依赖项设置。首先,我得回忆一下ORB-SLAM2的安装步骤和常见的依赖问题。 用户提到参考了引用[1]和[2],其中引用[1]是关于安装ROS的,用户可能已经按照小鱼老师的一键脚本安装了ROS Noetic。那接下来需要确认ORB-SLAM2的依赖项是否都满足。通常,ORB-SLAM2需要Pangolin、OpenCV、Eigen3等,ROS包可能需要创建功能包和节点。 首先,用户可能已经克隆了ORB-SLAM2的源码,但需要注意Ubuntu 20.04的兼容性问题,比如OpenCV版本。ORB-SLAM2默认可能支持OpenCV3,而Ubuntu 20.04默认安装的是OpenCV4,这会导致编译错误。需要修改CMakeLists.txt中的OpenCV版本设置,或者安装OpenCV3并链接正确。 然后,用户提到缺少launch文件。ROS中的launch文件用于启动节点和配置参数,尤其是对于不同的传感器输入(如单目、RGB-D、Stereo)。需要根据ORB-SLAM2的运行模式创建相应的launch文件,设置相机话题名称、参数文件路径等。例如,RGB-D模式需要订阅深度图像话题,而默认的launch可能不存在或路径不正确。 另外,依赖项设置可能包括安装必要的ROS包,如cv_bridge、image_transport,以及可能的相机驱动包,比如usb_cam或realsense的驱动。需要确保这些包已经安装,并且在编译ORB-SLAM2时正确包含ROS支持,修改CMakeLists中的ROS部分。 还有可能出现的问题包括Eigen3版本不兼容,需要检查Eigen3的路径是否正确,以及在编译ORB-SLAM2时是否找到Eigen3。此外,Pangolin的安装是否成功,是否有权限问题,或者库文件路径未正确设置。 用户可能需要修改ORB-SLAM2的源码以适应ROS Noetic,比如更改部分头文件引用或命名空间,因为ROS Noetic使用的是C++14或更高标准,而旧版可能基于C++11,导致编译错误。 最后,测试运行时可能需要下载示例数据集,或者连接真实相机,配置正确的launch文件参数,如相机话题名称是否与发布的话题一致,参数文件中的相机内参是否正确。 总结下来,步骤大致是:安装依赖库,修改ORB-SLAM2编译配置,创建缺失的launch文件,解决ROS Noetic下的兼容性问题,编译并测试运行。需要逐步检查每个环节,确保依赖项正确,路径设置无误,launch文件配置正确。</think>在 Ubuntu 20.04 和 ROS Noetic 环境下配置 ORB-SLAM2 需要解决依赖项兼容性和 ROS 功能包整合问题。以下是分步解决方案: --- ### 一、依赖项安装与配置 1. **安装 ROS Noetic 基础环境** ```bash wget http://fishros.com/install -O fishros && bash fishros ``` 选择 `1` 安装 ROS 后,再选择 `6` 配置 ROS 环境变量[^1]。 2. **安装关键依赖库** ```bash sudo apt-get install libopencv-dev libeigen3-dev libglew-dev libboost-all-dev ``` 3. **编译 Pangolin(需适配 OpenCV4)** ```bash git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin && mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4 sudo make install ``` --- ### 二、ORB-SLAM2 源码修改 1. **克隆修改版仓库(适配 Noetic)** ```bash git clone https://github.com/stevenlink/ORB_SLAM2.git ``` 2. **修改 CMakeLists.txt** - 将 `find_package(OpenCV 3.0 QUIET)` 改为 `find_package(OpenCV 4 REQUIRED)` - 添加 C++14 支持:`set(CMAKE_CXX_STANDARD 14)` 3. **修复 Eigen3 路径问题** ```bash sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen ``` --- ### 三、创建 ROS Launch 文件 1. **在 `ORB_SLAM2/Examples/ROS/ORB_SLAM2` 目录下新建 `launch` 文件夹** ```bash mkdir -p Examples/ROS/ORB_SLAM2/launch ``` 2. **编写 RGB-D 模式的 Launch 文件 `rgbd.launch`** ```xml <launch> <node name="orb_slam2" pkg="ORB_SLAM2" type="RGBD" args="$(find ORB_SLAM2)/Vocabulary/ORBvoc.txt $(find ORB_SLAM2)/Examples/RGB-D/TUM1.yaml" output="screen"> <remap from="/camera/rgb/image_color" to="/camera/color/image_raw"/> <remap from="/camera/depth_registered/image" to="/camera/aligned_depth_to_color/image_raw"/> </node> </launch> ``` --- ### 四、编译与运行 1. **编译 ROS 功能包** ```bash chmod +x build_ros.sh ./build_ros.sh ``` 2. **运行示例(以 TUM 数据集为例)** ```bash roslaunch ORB_SLAM2 rgbd.launch rosbag play --pause data.bag ``` --- ### 五、常见问题解决 - **问题1:OpenCV 版本冲突** 若出现 `undefined reference to cv::imshow`,需在 `CMakeLists.txt` 中显式链接 `opencv_highgui`: ```cmake target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} opencv_highgui) ``` - **问题2:地图稠密化需求** 参考引用[^2],可通过修改点云生成逻辑或使用 PCL 库将稀疏地图转换为栅格地图。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值