概述
用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2
文章目录
- 用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2
- 前言
- 问题一:Ubuntu下的双目模式切换问题
- 问题二:如何在ROS中使用节点调用摄像头显示双目图像
- 问题三:如何测试双目摄像头跑通ORB-SLAM2
- 总结
前言
入门SLAM需要深度相机和激光雷达这些基础硬件,但是考虑到自己的经济实力实在不允许,所以就入手了下面这个摄像头。这个摄像头的具体长这样,是我在淘宝35元买来练手的。
在商家提供的资料外,也发现了不少值得再延申的内容,比如如何在ROS下进行双目测距算法,PCL三维重建,如何联系ORB-SLAM2的双目建图等等。一个idea有了,接下来就是开始实践。但实践的道路并不像想的那样平坦,也遇到了不少问题,在查资料的过程中,也发现了不少前辈的精辟总结,所以在此处做一下整理
- ubuntu 下 如何与usb设备摄像头通信
- ros学习最便宜的双目Chusei 3d webcam在linux下用 uvcdynctrl命令控制 结贴
- hack一个3D摄像头来解闷
- Ubuntu下读取CHUSEI 3D Webcam 双目摄像头C++版本(调用python脚本进行配置)
- 双目摄像头的标定及测距(Ubuntu16.04 + OpenCV)
- 在linux/Ubuntu下调试最便宜的双目摄像头(含Linux版本上位机)CAM5031/CHUSEI 3D WEBCAM 解决只能开单目的问题
- windows + python + opencv 打开双目摄像头chusei3d踩坑
在前辈的经验加持下,也解决了一些问题。
问题一:Ubuntu下的双目模式切换问题
商家提供的资料中有shell脚本可以使用,但是个人感觉在使用过程中体验并不友好。
所以自己也对脚本进行了一定的改进。注意在使用前需要提权
user@ubuntu:~/Stereo_cam/Camera_switch$ chmod +x ./camera_switch.sh
camera_switch.sh
#!/bin/bash
# user@ubuntu:~/Stereo_cam/Camera_switch$ chmod +x ./camera_switch.sh 提升执行权限
# author : ruoxi
printf "%-10sn"请输入相机通道
read id # 选取相机通道
echo -e "It is switch to $id n" # -e 开启转义
printf "1.左单目模式:LEFT_EYE_MODEn"
printf "2.右单目模式:RIGHT_EYE_MODEn"
printf "3.红蓝模式:RED_BLUE_MODEn"
printf "4.双目模式:BINOCULAR_MODEn"
printf "%-10sn"请输入相机输出模式序号
read mode # 切换相机输出模式
printf "n"
uvcdynctrl -d /dev/video${id} -S 6:8 '(LE)0x50ff'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x00f6'
uvcdynctrl -d /dev/video${id} -S 6:8 '(LE)0x2500'
uvcdynctrl -d /dev/video${id} -S 6:8 '(LE)0x5ffe'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0003'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0002'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0012'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0004'
uvcdynctrl -d /dev/video${id} -S 6:8 '(LE)0x76c3'
uvcdynctrl -d /dev/video${id} -S 6:10 "(LE)0x0${mode}00" # 切换相机输出模式
printf "n"
echo -e "It is camera_mode $mode n"
在cpp文件中直接使用system("")调用即可,关于相对路径,这里就不介绍了
system("../../sh/camera_switch.sh"); //Ubuntu系统下,此处改成你的脚本存放相对路径
问题二:如何在ROS中使用节点调用摄像头显示双目图像
这里附上一篇文章ROS&OpenCV下单目和双目摄像头的标定与使用
这里是我的小伙伴提供的节点文件,提供给大家参考。
git clone -b melodic https://github.com/ruoxi521/Stereo_camera.git
启动camera_split节点
user@ubuntu:~$ roslaunch camera_split stereo.launch
运行结果
问题三:如何测试双目摄像头跑通ORB-SLAM2
修改ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_stereo.cc的两段代码,改为订阅camera_split节点/left_cam和/right_cam的/image_raw话题
message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/left_cam/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/right_cam/image_raw", 1);
//message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/left/image_raw", 1);
//message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "camera/right/image_raw", 1);
cd SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/
mkdir build
cd build
cmake ..
make
启动camera_split节点
user@ubuntu:~$ roslaunch camera_split stereo.launch
user@ubuntu:~$ roscore
启动Stereo双目建图
user@ubuntu:~/SLAM/src/ORB_SLAM2$ rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
运行结果
细心的朋友可能发现,似乎只订阅了左边相机发布的话题,但是我们是设置其订阅左右两个相机发布的话题,
这是为什么呢?
我想可能是对于双目USB相机,其输出的图像是经过合成的,我们通过软件方法分割左右相机的图像,同时对于需要同时订阅两个话题,需要对其作同步合并处理,之后作为参数进行传参。这里就不介绍具体过程,同学们可以自行探索解决。
可以参考这篇文章的思路ROS之订阅多个话题并对其进行同步处理(多传感器融合)
总结
以上就是本文的内容,本文介绍了如何在Ubuntu18.04上用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2,本文写的比较粗糙,如有不足,还请指正。在这里立一个Flag,之后会在分享一些激光SLAM的学习经验
参考资料:
(1) ROS官网 http://wiki.ros.org/melodic/Installation/Ubuntu
如需转载请注明:转自CSDN甦傑
欢迎持续关注 我的ROS专栏和我的SLAM专栏
最后
以上就是感动石头为你收集整理的用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2问题一:Ubuntu下的双目模式切换问题问题二:如何在ROS中使用节点调用摄像头显示双目图像问题三:如何测试双目摄像头跑通ORB-SLAM2总结的全部内容,希望文章能够帮你解决用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2用Opencv4.5.2+Melodic+USB双目摄像头跑通ORB-SLAM2问题一:Ubuntu下的双目模式切换问题问题二:如何在ROS中使用节点调用摄像头显示双目图像问题三:如何测试双目摄像头跑通ORB-SLAM2总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复