Advertisement

【SLAM】Ubuntu20.04安装ROS及实时运行ORB-SLAM2

阅读量:

ROS安装及实时运行ORB-SLAM2

  • 1 ROS安装

    • (1)设置网络时间协议
    • (2)添加ROS软件源——添加代码列表及设置公钥
    • (3)更新软件包索引
    • (4)初始化rosdep
    • (5)安装rosinstall
    • (6)加载环境配置
    • (7)测试安装结果
  • 2 Usb_cam安装

    • (1)下载usb_cam源码并配置环境
    • (2)编译usb_cam
    • (3)测试usb摄像头
    • 3 相机标定
    • (1)准备黑白棋盘格
    • (2)安装相机校准软件包
  • 4 编译ORB_SLAM2 ROS例子

    • (1)编译g2o
    • (2)编译DBoW2
    • (3)编译ORB_SLAM2
    • (4)编译ROS的example
  • 5 ORB_SLAM2在ROS实时运行

2020.12.20

暂时Ubuntu20.04的ROS Melodic不支持相机标定。

1 ROS安装

Ubuntu20.04 需要安装ROS Noetic,注意在Python3下进行安装,否则会产生一系列报错。
参考:http://wiki.ros.org/UsingPython3

(1)设置网络时间协议

设置NTP,使服务器和PC的时间误差最小。

复制代码
    $ sudo apt-get install -y chrony ntpdate
    $ sudo ntpdate -q ntp.ubuntu.com
    
    
      
      
    

(2)添加ROS软件源——添加代码列表及设置公钥

复制代码
    $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    $ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    
    
      
      
    

连接很慢或者连不上,可以用清华TUNA源

复制代码
    $    sudo sh -c '. /etc/lsb-release && echo "d{2d3b390d-f615-41d0-a830-7bbdcedbd397}eb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
    $    sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
    
    
      
      
    

(3)更新软件包索引

复制代码
    $ sudo apt-get update && sudo apt-get upgrade 
    
    
      
    

系统为ubuntu20.04,安装ROS Noetic 版本

复制代码
    $ sudo apt install ros-noetic-desktop-full -y
    sudo apt install ros-kinetic-desktop-full -y
    
    
      
      
    

安装rqt相关功能包

复制代码
    $ sudo apt-get install ros-noetic-rqt
    
    
      
    

(4)初始化rosdep

复制代码
    $ sudo rosdep init
    
    
      
    
  • 报错1:
复制代码
    sudo: rosdep: command not found
    
    
      
    

解决

复制代码
    $ sudo apt install python3-rosdep2
    
    
      
    

由于ubuntu20.04不支持python-rosdep2 报错需要下载python3-rosdep2
需要安装好依赖项,否则会会卸载ros相关的包(在python2.7环境下使用)

依赖项下载

复制代码
    $ sudo apt install python3-catkin-pkg
    $ sudo apt install python3-rosdistro
    $ sudo apt install python3-rospkg 
    $ sudo apt install python3-yaml 
    
    
      
      
      
      
    
  • 报错2:
复制代码
    ERROR: default sources list file already exists:
    	/etc/ros/rosdep/sources.list.d/20-default.list
    Please delete if you wish to re-initialize
    
    
      
      
      
    

解决

复制代码
    $ sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
    
    
      
    
  • 报错3:
复制代码
    ERROR: cannot download default sources list from:
    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
    Website may be down.
    
    
      
      
      
    

因为国内防火墙的问题,修改hosts文件

复制代码
    $ sudo gedit /etc/hosts
    
    
      
    

完成初始化后显示

复制代码
    Wrote /etc/ros/rosdep/sources.list.d/20-default.list
    Recommended: please run
    
    	rosdep update
    
    
      
      
      
      
    

后运行

复制代码
    $ rosdep update
    
    
      
    

*报错1

复制代码
    reading in sources list data from /etc/ros/rosdep/sources.list.d
    ERROR: error loading sources list:
    	The read operation timed out
    
    
      
      
      
    
复制代码
    unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml]:
    	<urlopen error _ssl.c:1106: The handshake operation timed out> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml)
    
    
      
      
    

最后科学上网才解决了

复制代码
    reading in sources list data from /etc/ros/rosdep/sources.list.d
    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
    Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
    Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
    Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
    Skip end-of-life distro "ardent"
    Skip end-of-life distro "bouncy"
    Skip end-of-life distro "crystal"
    Add distro "dashing"
    Add distro "eloquent"
    Add distro "foxy"
    Skip end-of-life distro "groovy"
    Skip end-of-life distro "hydro"
    Skip end-of-life distro "indigo"
    Skip end-of-life distro "jade"
    Add distro "kinetic"
    Skip end-of-life distro "lunar"
    Add distro "melodic"
    Add distro "noetic"
    Add distro "rolling"
    updated cache in /home/chan/.ros/rosdep/sources.cache
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

(5)安装rosinstall

复制代码
    $ sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
    
    
      
    

(6)加载环境配置

复制代码
    $ source /opt/ros/noetic/setup.bash
    
    
      
    

自动添加环境变量

复制代码
    $ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
    $ source ~/.bashrc
    
    
      
      
    

创建工作目录并初始化

复制代码
    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
    $ cd ~/catkin_ws/
    $ catkin_make
    $ source ~/catkin_ws/devel/setup.bash
    
    
      
      
      
      
      
      
    

(7)测试安装结果

启动

复制代码
    $ roscore
    
    
      
    

新终端安装和打开小乌龟

复制代码
    $ sudo apt install ros-noetic-turtlesim
    $  rosrun turtlesim turtlesim_node
    
    
      
      
    

另一个键盘控制小乌龟

复制代码
    $  rosrun turtlesim turtle_teleop_key
    
    
      
    
  • 报错
复制代码
    Resource not found: roslaunch
    ROS path [0]=/opt/ros/noetic/share/ros
    ROS path [1]=/home/chan/catkin_ws/src
    ROS path [2]=/opt/ros/noetic/share
    The traceback for the exception was written to the log file
    
    
      
      
      
      
      
    

解决

复制代码
    $  sudo apt install ros-noetic-rosbash
    $  sudo apt install ros-noetic-roslaunch
    
    
      
      
    

2 Usb_cam安装

(1)下载usb_cam源码并配置环境

复制代码
    $ cd catkin_ws/src
    $ git clone https://github.com/bosch-ros-pkg/usb_cam.git
    $ cd ..
    $ catkin_make
    $ source ~/catkin_ws/devel/setup.bash
    
    
      
      
      
      
      
    
  • 报错1:
复制代码
    Could NOT find image_transport
    
    
      
    

下载

复制代码
    $ sudo apt-get install ros-noetic-image-transport
    
    
      
    
  • 报错2:
复制代码
    Could NOT find camera_info_manager
    
    
      
    

下载

复制代码
    $ sudo apt install ros-noetic-camera-info-manager
    
    
      
    

(2)编译usb_cam

复制代码
    $ cd  ~/catkin_ws/src/usb_cam
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    
    
      
      
      
      
      
    

(3)测试usb摄像头

打开新终端,运行ROS

复制代码
    $ roscore
    
    
      
    

回到原终端运行launch文件

复制代码
    $ cd ~/catkin_ws/src/usb_cam/launch
    $ roslaunch usb_cam usb_cam-test.launch
    
    
      
      
    
  • 报错1:
复制代码
    RLException: [usb_cam-test.launch] is neither a launch file in package [usb_cam] nor is [usb_cam] a launch file name
    The traceback for the exception was written to the log file
    
    
      
      
    
复制代码
    $ source ~/catkin_ws/devel/setup.bash
    
    
      
    
  • 报错2:
    缺少image_view包
复制代码
    ERROR: cannot launch node of type [image_view/image_view]: image_view
    ROS path [0]=/opt/ros/noetic/share/ros
    ROS path [1]=/home/chan/catkin_ws/src
    ROS path [2]=/opt/ros/noetic/share
    
    
      
      
      
      
    

事实上输入命令roscd image_viewroscd cv_bridge都找不到相应的包,是cv_bridge缺失。

下载

复制代码
    git clone https://github.com/ros-perception/vision_opencv
    
    
      
    

找到cv_bridge文件夹,修改cmakelists.txt,改为系统自己安装的opencv版本

复制代码
    find_package(OpenCV 3.4 REQUIRED
    
    
      
    

将文件夹复制到工作空间~/catkin_ws/src

通过cmake编译

复制代码
    $ cd ~/catkin_ws/src/cv_bridge
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make
    $ sudo make install
    
    
      
      
      
      
      
      
    
在这里插入图片描述

同理下载编译image_view

复制代码
    git clone https://github.com/ros-perception/image_pipeline
    
    
      
    

复制image_view进行编译
打开image_view中的CmakeLists.txt文件进行修改

在find_package前面添加

复制代码
    set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  
    
    
      
    

Launch文件video_device设置中,笔记本电脑自带摄像头为video0,更换为usb摄像头需要更改,一般为video1。

可运行以下命令查看类型

复制代码
    $ ls /dev/video*
    
    
      
    

正常情况可打开摄像头

3 相机标定

使用OpenCV进行图像处理,需要对相机进行校准。镜头和图像传感器在组装时可能有偏离,包括图像中心(image center)与主点(principal point)的偏差和传感器的倾斜度等。校准(calibration)的目的是查找相机的固有参数。

(1)准备黑白棋盘格

Matlab官方相机标定黑白棋盘格网址:
http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/pattern.pdf

打印在A4上,每个棋盘格的边长为0.028m。
黑白棋盘格是由9×7的黑白格组成,使用的是内部交点即8×6的角点。

(2)安装相机校准软件包

原本用ubuntu16.04可以安装uvc_camera软件包,但是现在还没有noetic版本的包
https://index.ros.org/p/uvc_camera/github-ros-drivers-camera_umd/

因此采用usb_camera作为节点。

复制代码
    $ sudo apt install ros-noetic-usb-cam
    
    
      
    

安装相机校准软件包

复制代码
    $ sudo apt install ros-noetic-camera-calibration
    
    
      
    

(3)运行ROS

复制代码
    $ roscore 
    
    
      
    

(4)打开新终端,启动usb_camera节点

复制代码
    $ rosrun usb_camera usb_camera_node
    
    
      
    

这里只能看到摄像头打开并不会看到图像,如果想要看下当前的图像可以使用 image_view,因为 usb_cam 默认发布 /usb_cam/image_raw 这样的 topic,topic查看命令为rostopic list

启动usb_camera可视节点

复制代码
    $ rosrun image_view image_view image:=/usb_cam/image_raw
    
    
      
    

可看到没有检测到相机校准配置文件。

复制代码
    [ WARN] [1605509617.183192743]: Camera calibration file /home/chan/.ros/camera_info/head_camera.yaml not found.
    
    
      
    

查看默认的相机信息,显示为默认值

复制代码
    $ rostopic echo /camera_info
    
    
      
    
复制代码
    WARNING: topic [/camera_info] does not appear to be published yet
    
    
      
    

(5)打开新的终端,启动GUI

复制代码
    $ rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.028 image:=/image_raw
    
    
      
    

标定过程中左右,上下,前后,对角方向前后倾斜标定板,这样使得右边X,Y, Size, Skew变成绿色后,CALIBRATE按钮变为蓝色,然后点击。等待三个按钮都可以点击,依次点击SAVE(保存)和COMMIT(提交)到相机配置文件中。即可将标定结果保存至本地。

点击SAVE之后:(‘Wrote calibration data to’, ‘/tmp/calibrationdata.tar.gz’)

https://answers.ros.org/question/363942/camera_calibration-does-not-work-ros-noetic/

(6)若点击COMMIT出现:

raise ServiceException(“service [%s] unavailable”%self.resolved_name)
rospy.service.ServiceException: service [/camera/set_camera_info] unavailable

需要自行将标定参数移动至:

复制代码
    ~/.ros/camera_info
    $ cd /tmp
    $ tar -zxvf calibrationdata.tar.gz
    $ mkdir /.ros/camera_info
    $ sudo cp ost.yaml ~/.ros/camera_info
    $ cd ~/.ros/camera_info
    $ sudo mv ./ost.yaml ./head_camera.yaml
    
    
      
      
      
      
      
      
      
    

(7)打开head_camera.yaml文件,将camera_name改成head_camera

(4)重新运行usb摄像头
打开新终端,运行ROS

复制代码
    $ roscore
    
    
      
    

回到原终端运行launch文件

复制代码
    $ cd launch
    $ roslaunch usb_cam usb_cam-test.launch
    
    
      
      
    
复制代码
    [ WARN] [1605509617.528102354]: unknown control 'focus_auto'
    
    
      
    

显示unknown control 'focus_auto',原因是相机不可以自动对焦,可以忽略

4 编译ORB_SLAM2 ROS例子

(1)编译g2o

复制代码
    $ cd ~/ORB_SLAM2/Thirdparty/g2o
    $ mkdir build
    $ cmake ..
    $ make
    
    
      
      
      
      
    

(2)编译DBoW2

复制代码
    $ cd ~/ORB_SLAM2/Thirdparty/ DBoW2
    $ mkdir build
    $ cmake ..
    $ make
    
    
      
      
      
      
    

(3)编译ORB_SLAM2

复制代码
    $ cd ~/ORB_SLAM2
    $ cd build  // 由于已经新建build文件夹,若无,则mkdir build
    $ cmake ..
    $ make
    
    
      
      
      
      
    

(4)编译ROS的example

复制代码
    $ cd ~/ORB_SLAM2/Examples/ROS/ORB_SLAM2
    $ mkdir build
    $ cd build
    $ cmake ..
    $ make 
    
    
      
      
      
      
      
    

5 ORB_SLAM2在ROS实时运行

(1)打开第一个终端,运行roscore

复制代码
    $ roscore
    
    
      
    

(2)打开第二个终端,运行usb_cam

复制代码
    $ cd catkin_ws/src/usb_cam/launch
    $ source ~/catkin_ws/devel/setup.bash
    $ roslaunch usb_cam usb_cam-test.launch
    
    
      
      
      
    

(3)打开第三个终端,运行Mono文件
格式如下:

复制代码
    $ rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
    
    
      
    

运行:

复制代码
    $ rosrun ORB_SLAM2 Mono /home/chan/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/chan/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml /camera/image_raw:=/usb_cam/image_raw
    
    
    第一次运行后,创建82个地图点,后初始化出错。
    重置后,检测到110地图点。
    
    
    第二次运行后检测到70个地图点,移动摄像机后显示TRACK LOST,需要重定位。重定位后检测到130个地图点。实时运行的响应度较低
    
    
    -----------------
    参考:
    [()
    [()
    [https://answers.ros.org/question/359998/camera-calibration-on-ros-noetic-calibration-display-with-video-is-flickering/](https://answers.ros.org/question/359998/camera-calibration-on-ros-noetic-calibration-display-with-video-is-flickering/)
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

全部评论 (0)

还没有任何评论哟~