当前位置:   article > 正文

直接用笔记本摄像头跑orb_slam3单目程序 不再跑数据集_如何在自己的摄像头上用orbslam3

如何在自己的摄像头上用orbslam3

运行前提:

标定摄像头(如果只是想跑通程序,这步可以跳过,等程序跑通了回头在标定也行的)

ros1 noetic摄像头标定_JT_BOT的博客-CSDN博客

已经安装好orb_slam3,没有安装好可以参考我以前的安装过程

想学ORB_SLAM3,先从编译开始,编译通不过,一切都是浮云_JT_BOT的博客-CSDN博客

一 编辑yaml文件(此步骤如果只是为跑通程序可以跳过,用程序自带的yaml文件)

找到相机标定后生成的calibrationdata文件,在文件最后有2个文本文件,我这里的文本文件是

ost.txt和ost.yaml,如下图所示:

orb-slam3目录结构,在主目录内

在ORB_SLAM3内新建文件夹cam_slam3,把标定文件ost.yaml复制进此文件夹。

参考TUM1.yaml修改ost.yaml格式。

注意:ORB Parameters和Viewer Parameters下面的不需要修改

2.camera_matrix:
在这里插入图片描述

对应:

# Camera calibration and distortion parameters (OpenCV)

Camera1.fx:

Camera1.fy:

Camera1.cx:

Camera1.cy:

distortion_coefficients:[k1   k2   p1   p2   k3]
参数值对应。其中ORB参数与Viewer参数不变。

修改后的 ost.yaml

  1. %YAML:1.0
  2. #--------------------------------------------------------------------------------------------
  3. # Camera Parameters. Adjust them!
  4. #--------------------------------------------------------------------------------------------
  5. File.version: "1.0"
  6. Camera.type: "PinHole"
  7. # Camera calibration and distortion parameters (OpenCV)
  8. Camera1.fx: 621.19783
  9. Camera1.fy: 624.29785
  10. Camera1.cx: 327.35984
  11. Camera1.cy: 238.12506
  12. Camera1.k1: 0.112341
  13. Camera1.k2: -0.170053
  14. Camera1.p1: -0.004971
  15. Camera1.p2: 0.003109
  16. Camera1.k3: 0.000000
  17. # Camera frames per second
  18. Camera.fps: 30
  19. # Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
  20. Camera.RGB: 1
  21. # Camera resolution
  22. Camera.width: 640
  23. Camera.height: 480
  24. #--------------------------------------------------------------------------------------------
  25. # ORB Parameters
  26. #--------------------------------------------------------------------------------------------
  27. # ORB Extractor: Number of features per image
  28. ORBextractor.nFeatures: 1000
  29. # ORB Extractor: Scale factor between levels in the scale pyramid
  30. ORBextractor.scaleFactor: 1.2
  31. # ORB Extractor: Number of levels in the scale pyramid
  32. ORBextractor.nLevels: 8
  33. # ORB Extractor: Fast threshold
  34. # Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
  35. # Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
  36. # You can lower these values if your images have low contrast
  37. ORBextractor.iniThFAST: 20
  38. ORBextractor.minThFAST: 7
  39. #--------------------------------------------------------------------------------------------
  40. # Viewer Parameters
  41. #--------------------------------------------------------------------------------------------
  42. Viewer.KeyFrameSize: 0.05
  43. Viewer.KeyFrameLineWidth: 1.0
  44. Viewer.GraphLineWidth: 0.9
  45. Viewer.PointSize: 2.0
  46. Viewer.CameraSize: 0.08
  47. Viewer.CameraLineWidth: 3.0
  48. Viewer.ViewpointX: 0.0
  49. Viewer.ViewpointY: -0.7
  50. Viewer.ViewpointZ: -1.8
  51. Viewer.ViewpointF: 500.0

在cam_slam3内新建cam_slam3.cpp

  1. // cam_slam3.cpp
  2. // 该文件将打开你电脑的摄像头,并将图像传递给ORB-SLAM3进行定位
  3. // opencv
  4. #include <opencv2/opencv.hpp>
  5. // ORB-SLAM的系统接口
  6. #include "System.h"
  7. #include <string>
  8. #include <chrono> // for time stamp
  9. #include <iostream>
  10. using namespace std;
  11. // 参数文件与字典文件
  12. // 如果你系统上的路径不同,请修改它
  13. string parameterFile = "../ost.yaml";//这个文件如果没有可以用程序里面的yaml文件代替,比如TUM1.yaml
  14. string vocFile = "../../Vocabulary/ORBvoc.txt";
  15. int main(int argc, char **argv) {
  16. // 声明 ORB-SLAM2 系统
  17. ORB_SLAM3::System SLAM(vocFile, parameterFile, ORB_SLAM3::System::MONOCULAR, true);
  18. // 获取相机图像代码
  19. cv::VideoCapture cap(0); // change to 1 if you want to use USB camera.
  20. // 分辨率设为640x480
  21. cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);;//设置采集视频的宽度
  22. cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);//设置采集视频的高度
  23. // 记录系统时间
  24. auto start = chrono::system_clock::now();
  25. while (1) {
  26. cv::Mat frame;
  27. cap >> frame; // 读取相机数据
  28. auto now = chrono::system_clock::now();
  29. auto timestamp = chrono::duration_cast<chrono::milliseconds>(now - start);
  30. SLAM.TrackMonocular(frame, double(timestamp.count())/1000.0);
  31. }
  32. return 0;
  33. }

CMakeLists.txt

  1. # CMakeLists.txt
  2. cmake_minimum_required(VERSION 2.8)
  3. project(cam_slam3)
  4. find_package(OpenCV 4 REQUIRED) #opencv根据版本填写版本号
  5. #包含头文件
  6. include_directories(${OPENCV_INCLUDE_DIRS}
  7. #非标准头文件包含写法,根据编译报错用: sudo find / -name System.h 搜每一个缺少的头文件路径添加在下面
  8. ~/ORB_SLAM3/include
  9. ~/ORB_SLAM3
  10. /usr/include/eigen3
  11. ~/ORB_SLAM3/include/CameraModels
  12. )
  13. #生成可执行文件
  14. add_executable(cam_slam3 cam_slam3.cpp)
  15. #链接库文件
  16. target_link_libraries(cam_slam3 ${OpenCV_LIBS}
  17. #非标准的链接库文件写法,根据编译报错用:sudo find / -name libpangolin.so 搜缺少的库文件
  18. #按绝对路径添加缺少的库文件
  19. /usr/local/lib/libpangolin.so
  20. /lib/x86_64-linux-gnu/libOpenGL.so.0
  21. /lib/x86_64-linux-gnu/libGLEW.so.2.1
  22. ~/ORB_SLAM3/lib/libORB_SLAM3.so
  23. )

文件结构

 编译:

  1. cd ORB_SLAM3/cam_slam3
  2. mkdir build
  3. cd build
  4. cmake ..
  5. make

 

 编译完成 ./cam_slam3 运行单目程序

 看到这个图像说明运行成功。

此实现难点在于编译,需要通过编译报错用 sudo find / -name 文件名  搜索缺少的头文件和库文件,通过不断调整CMakeLists.txt直至成功。

参考:

USB摄像头运行ORB-SLAM2_利用弹幕usb摄像头运行slam2_星野黎明的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/830662
推荐阅读
相关标签
  

闽ICP备14008679号