从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录三:使用USB相机运行ORBSLAM

简介: 从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录三:使用USB相机运行ORBSLAM

前文:

从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(一):安装与配置

从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(二):相机测试与标定

1 编译ROS_ORBSLAM

进入ORB_SLAM2项根目录直接运行

chmod +x ./build_ros.sh
./build_ros.sh

一般情况下会遇到若干错误,例如


错误1 /usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’

/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line

collect2: error: ld returned 1 exit status

「解决方法」

在ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中添加一行

    set(LIBS ${OpenCV_LIBS} 
    ${EIGEN3_LIBS} 
    ${Pangolin_LIBRARIES} 
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so 
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so 
    ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so 
    -lboost_system    # 添加这行 
    )

2 启动ORBSLAM

# 终端A运行ROS
roscore
# 终端B启动相机
roslaunch usb_cam usb_cam-test.launch
# 终端C启动ORBSLAM
rosrun ORB_SLAM2 Mono /home/winter/Project/SLAM/ORBSLAM2/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/winter/Project/SLAM/ORBSLAM2/ORB_SLAM2/Examples/ROS/ORB_SLAM2/my_cam.yaml

注意:my_cam.yaml用从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录(二):相机测试与标定的标定文件,否则可能出现始终无法初始化帧(TRYING INITIALIZATION)的情况。


这里记录几个常见的也是本文遇到的错误


错误2:


OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/persistence.cpp, line 861

terminate called after throwing an instance of ‘cv::Exception’

what(): /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/persistence.cpp:861: error: (-5) Invalid pointer to file storage in function cvGetFileNodeByName

已放弃 (核心已转储)


错误分析:很显然,该错误由Opencv引起,叙述为“严重冲突”,查阅资料得知是opencv的版本问题,ros自带的opencv版本为3.3.1

winter@Winter:~$ find /opt/ros/ -name opencv
/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv

与编译ORBSLAM工程时使用的openCV版本不同,例如本文使用的是opencv2.4.11,产生版本冲突,具体地,体现在编译时的警告信息中:

Linking CXX executable ../Mono
/usr/bin/ld: warning: libopencv_core.so.2.4, needed by ../../../../lib/libORB_SLAM2.so, may conflict with libopencv_core.so.3.3
[100%] Built target Mono
Linking CXX executable ../RGBD
Linking CXX executable ../Stereo
/usr/bin/ld: warning: libopencv_core.so.2.4, needed by ../../../../lib/libORB_SLAM2.so, may conflict with libopencv_core.so.3.3

解决方法简言之就是:更改链接库为3.3.1,重新编译工程。

(1) 删除ORB_SLAM2、DBoW2以及ROS/ORB_SLAM2/src下的build文件

(2) 更改ORB_SLAM2、DBoW2以及ROS/ORB_SLAM2/src下的CMakeList文件

set(OpenCV_DIR "/usr/local/include/opencv331/share/OpenCV")
find_package(OpenCV 3.3.1 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()
相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
5月前
|
Ubuntu Linux
Win10 Ubuntu子系统(内嵌ubuntu18.04)运行32bit Linux原生程序 解决Exec format error错误
Win10 Ubuntu子系统(内嵌ubuntu18.04)运行32bit Linux原生程序 解决Exec format error错误
118 0
|
7月前
|
Ubuntu Linux
ubuntu打开usb摄像头
ubuntu打开usb摄像头
255 0
|
13天前
|
Ubuntu Unix Linux
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
【Linux/Ubuntu】Linux/Ubuntu运行python脚本
|
1月前
|
Ubuntu 安全 虚拟化
vmware虚拟机运行ubuntu等卡慢的解决办法
vmware虚拟机运行ubuntu等卡慢的解决办法
117 0
|
3月前
|
存储 Ubuntu 关系型数据库
在Windows WSL (Linux的Windows子系统)上运行的Ubuntu 20.04安装Bacula失败
Bacula 是一个开源的跨平台网络备份工具,提供基于客户端/服务器(CS)架构的企业级备份解决方案。它支持对数据进行备份、恢复以及完整性校验,并且可以运行在多种操作系统上,包括 Windows 和 Linux 等。
22 0
|
3月前
|
Ubuntu
ubuntu20.04 ros-noetic 安装
ubuntu20.04 ros-noetic 安装
55 0
|
4月前
|
存储 Ubuntu 安全
百度搜索:蓝易云【Ubuntu的USB相关操作教程。】
请注意,在进行任何USB操作之前,务必小心确保选择了正确的设备。错误的操作可能导致数据丢失或损坏。
55 0
|
6月前
|
Linux
linux如何让ros文件在任何终端中运行:三行代码搞定
linux如何让ros文件在任何终端中运行:三行代码搞定
|
7月前
Ubuntu20.04下折腾ROS
Ubuntu20.04下折腾ROS
29 0
|
7月前
|
弹性计算 数据安全/隐私保护 计算机视觉