从零开始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()
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
2月前
|
传感器 机器人 测试技术
ROS相机内参标定详细步骤指南
本文是关于ROS相机内参标定的详细步骤指南,包括了标定的目的、原理、所需材料、具体操作流程以及标定结果的分析。文章以Ubuntu20.04和ROS1 Noetic为测试环境,适用于单目RGB相机的内参标定,使用ros-noetic-camera-calibration工具包进行操作,并提供了标定过程中的注意事项和建议。
87 1
ROS相机内参标定详细步骤指南
|
2月前
|
存储 Ubuntu 计算机视觉
使用ros标定相机的内参和外参
使用ros标定相机的内参和外参
28 2
|
2月前
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
43 1
|
2月前
|
Ubuntu 机器人 测试技术
奥比中光 Femto Bolt相机ROS配置
这篇文章介绍了奥比中光Femto Bolt相机在ROS1 Noetic和ROS2 Humble环境下的配置过程,包括自动脚本和手动配置方法,适用于Ubuntu 20.04/22.04系统和Jetson Orin平台。
54 0
奥比中光 Femto Bolt相机ROS配置
|
2月前
|
Ubuntu Apache
Ubuntu20.04下一键安装ROS1 Noetic
本文提供了一个简化在Ubuntu 20.04系统上安装ROS1 Noetic过程的一键安装脚本工具,该脚本通过优化配置和使用清华大学镜像源,加速了国内用户的下载速度,并自动完成环境设置和依赖安装,同时提供了详细的使用说明和源码。
192 0
Ubuntu20.04下一键安装ROS1 Noetic
|
2月前
|
Ubuntu 机器人 虚拟化
Ubuntu22.04配置ROS2 Humble
这篇文章是关于如何在Ubuntu 22.04系统上配置ROS2 Humble的详细教程,包括虚拟机安装、环境配置、网络设置、软件源更换、ROS1和ROS2的安装步骤。
136 1
|
2月前
|
Ubuntu 数据可视化 自动驾驶
最新 ROS 2 Jazzy Jalisco 发布!支持 Ubuntu 24.04
最新 ROS 2 Jazzy Jalisco 发布!支持 Ubuntu 24.04
110 2
|
2月前
|
Ubuntu 机器人 网络安全
ubuntu22.04 SSH和ROS2控制下位机
本文介绍了如何在Ubuntu 22.04系统中通过SSH远程控制机器人服务器,包括安装SSH服务、配置防火墙规则、修改`/etc/hosts`文件、使用密钥认证等步骤,并提供了使用ROS2控制下位机的方法和一些常用指令。
45 0
|
2月前
|
NoSQL Ubuntu Oracle
在Ubuntu 14.04上安装Cassandra并运行单节点集群的方法
在Ubuntu 14.04上安装Cassandra并运行单节点集群的方法
47 0
|
2月前
|
NoSQL Ubuntu Oracle
如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群
如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群
27 0
下一篇
无影云桌面