Advertisement

Ubuntu14.04安装ROS,kinect2驱动,RGB-D SLAM

阅读量:

本教程主要针对的是14.04版的64位Ubuntu系统版本,默认情况下并未遇到任何问题。然而,在处理32位系统的用户时遇到了疑惑:由于不清楚原因,在进行Kinect V2驱动验证过程中发现当运行该程序时,在屏幕上右方会出现两个黑色画面(如图所示),因此建议考虑安装64位Ubuntu操作系统以解决此问题。

一、安装ROS

1.1配置Ubuntu****软件仓库

设置您的 Ubuntu 软件包 repositories 以支持 "restricted"、"universe" 和 "multiverse" 这三种安装类型,请从国内源进行选择。

1.2添加source.list

设置您的电脑以支持安装来自 packages.ros.org 的软件包。ROS Indigo 仅限于 Saucy (13.10) 和 Trusty (14.04) 系列的操作系统版本。

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

1.3添加Keys

复制代码
    sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

1.4****安装

首先,确保你的Debian软件包索引是最新的:

复制代码
    sudo apt-get update

接着,更新dpkg:

复制代码
    sudo apt-get install dpkg

安装ROS桌面完整版:

复制代码
    sudo apt-get install ros-indigo-desktop-full

注: 该操作将持续进行较长时间,并且可能在后续的解压安装包过程中遇到问题。建议持续留意终端动态,通常会看到一个提示信息。

…this means your install is broken…

如果在最终安装完成后未收到任何错误提示信息,则无需关注此问题;即使遇到相关错误信息也不会影响后续操作

错误信息:Unpacking ros-indigo-desktop-full (1.1.6-0trusty-20181006-135515-0800) ...

Errors were encountered while processing:

/var/cache/apt/archives/python-rosdistro-modules_0.7.0-1_all.deb

/var/cache/apt/archives/python-rosdistro_0.7.0-100_all.deb

导致这种问题一般是第一次安装,中途打断安装导致

解决方法:卸载ros

复制代码
 sudo apt-get remove ros-indigo-desktop-full

    
 sudo apt-get remove ros-*  #但是不确定会不会删除其它不必要的包。

更新dpkg

复制代码
    sudo apt-get install dpkg

接下来重新安装就可以了

1.5初始化rosdep

复制代码
 sudo rosdep init

    
 rosdep update

1.6****环境设置

如果每当启动一个新的终端时ROS环境变量能够自动配置到bash会话中,则操作将更加简便:

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

    
 $ source ~/.bashrc

1.7安装rosinstall

rosinstall 属于ROS中一个独立分开的常用命令行工具,并且它能够让你轻松地通过一条命令下载多个源码仓库

要在ubuntu上安装这个工具,请运行:

复制代码
    $ sudo apt-get install python-rosinstall

二、创建ROS工作环境

复制代码
 $ mkdir -p ~/catkin_ws/src

    
 $ cd ~/catkin_ws/src
    
 $ catkin_init_workspace

可以在src文件夹中找到一个指向CMakeLists.txt的链接文件,在这种情况下(即使在工作空间为空的情况下),仍然能够创建一个工作空间。

复制代码
 $ cd ~/catkin_ws/

    
 $ catkin_make

通过 catkin_make 命令能极为便捷地创建一个 catkin 工作空间,在你的项目根目录下你会看到 build 和 develop 两个主要目录,在 develop 目录中你能找到多个 setup.*sh 文件。开启这些脚本会覆盖当前环境变量如需更多信息,请参考 catkin 文档。为了推进下一步骤,请确保开启新的 setup.*sh 脚本。(后续每次打开一个新终端,如果想运行ros, 都需要先source)

复制代码
    $ source devel/setup.bash

你可以以确保你的环境变量包含在setup脚本中,并通过执行相应的检查命令来验证当前目录是否存在于环境中。

复制代码
    $ echo $ROS_PACKAGE_PATH

输出:

复制代码
    /home/youruser/catkin_ws/src:/opt/ros/indigo/share: /opt/ros/indigo/stacks

至此,你的环境已经建立好了,可以继续学习ROS文件系统了!

三、ubuntu14.04安装kinect v2驱动

Kinect2的驱动包含libfreenect2和iai_kinect2两个部分;其中iai_kinect2是用于在ROS环境中安装所需的驱动程序,并且依赖于libfreenect2提供基础支持。

3.1安装libfreenect2

3.1.1下载libfreenect2****安装包

复制代码
 $ cd #这一步主要是回到根目录下进行安装

    
 $ git clone https://github.com/OpenKinect/libfreenect2.git
    
 $ cd libfreenect2

3.1.2****下载更新包

复制代码
 $ cd depends

    
 $ ./download_debs_trusty.sh

3.1.3安装build****工具

复制代码
    $ sudo apt-get install build-essential cmake pkg-config

3.1.4安装libusb工具,版本必须> = 1.0.20。

复制代码
    $ sudo dpkg -i debs/libusb*deb

3.1.5安装TurboJPEG**、**OpenGL

复制代码
 $ sudo apt-get install libturbojpeg libjpeg-turbo8-dev

    
 $ sudo dpkg -i debs/libglfw3*deb; sudo apt-get install -f

3.1.6 [可选项]安装OpenCL**、CUDAVAAPIOpenNI2,此处省略。**

3.1.7build

复制代码
 $ cd ..

    
 $ mkdir build && cd build
    
 $ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
    
 $ make
    
 $ make install

(注:此处我之前漏了一步,导致会出现找不到设备的问题。在运行一句:

sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

之后,重新插拔Kinect2相机的usb接口)

不然会出现如下问题:

3.1.8****测试

复制代码
    $ ./bin/Protonect

3.2安装iai_kinect2

注:必须先建立好ROS工作空间

复制代码
 $ cd ~/catkin_ws/src/

    
 $ git clone https://github.com/code-iai/iai_kinect2.git
    
 $ cd iai_kinect2
    
 $ rosdep install -r --from-paths .
    
 $ cd ~/catkin_ws
    
 $ catkin_make -DCMAKE_BUILD_TYPE="Release"

3.3****测试

连接好kinect v2深度相机(注:必须连接usb3.0)打开一个terminal

复制代码
    $ roscore

再打开一个terminal

复制代码
 $ source ~/catkin_ws/devel/setup.bash

    
 $ roslaunch kinect2_bridge kinect2_bridge.launch

再打开一个terminal

复制代码
 $ source ~/catkin_ws/devel/setup.bash

    
 $ rosrun kinect2_viewer kinect2_viewer kinect2 sd cloud

可将sd替换为qhd、hd,表示不同的分辨率。

如果安装成功,会打开以下界面:

四、安装****RGB-D SLAM

安装步骤如下,比较简单,一步一步执行代码就好

4.1准备RGB-D SLAM****工作空间

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

    
 $ mkdir -p ~/rgbdslam_catkin_ws/src
    
 $ cd ~/rgbdslam_catkin_ws/src
    
 $ catkin_init_workspace
    
 $ cd ~/rgbdslam_catkin_ws/
    
 $ catkin_make
    
 $ source devel/setup.bash

4.2下载RGB-D SLAM

复制代码
 $ cd ~/rgbdslam_catkin_ws/src

    
 $ wget -q http://github.com/felixendres/rgbdslam_v2/archive/indigo.zip
    
 unzip -q indigo.zip
    
 $ cd ~/rgbdslam_catkin_ws/

4.3安装RGB-D SLAM

复制代码
 $ rosdep update

    
 $ rosdep install rgbdslam
    
 $ catkin_make

五、用Kinect2跑****RGB-D SLAM

通过以上的步骤,我们安装了Kinect2的驱动和RGB-D SLAM。

注意:rgbdslam.launch和openni+rgbdslam.launch只适用于Kinect1。

如果要用Kinect2,需要修改launch文件。

进入~/rgbgslam_ws/src/rgbdslam_v2-indigo/launch目录

新建rgbdslam_kinect2.launch:

复制代码
 <launch>

    
     <node pkg="rgbdslam" type="rgbdslam" name="rgbdslam" cwd="node" required="true" output="screen"> 
    
     <!-- Input data settings-->
    
     <param name="config/topic_image_mono"              value="/kinect2/qhd/image_color_rect"/>  
    
     <param name="config/camera_info_topic"             value="/kinect2/qhd/camera_info"/>
    
  
    
     <param name="config/topic_image_depth"             value="/kinect2/qhd/image_depth_rect"/>
    
  
    
     <param name="config/topic_points"                  value=""/> <!--if empty, poincloud will be reconstructed from image and depth -->
    
  
    
     <!-- These are the default values of some important parameters -->
    
     <param name="config/feature_extractor_type"        value="SIFTGPU"/><!-- also available: SIFT, SIFTGPU, SURF, SURF128 (extended SURF), ORB. -->
    
     <param name="config/feature_detector_type"         value="SIFTGPU"/><!-- also available: SIFT, SURF, GFTT (good features to track), ORB. -->
    
     <param name="config/detector_grid_resolution"      value="3"/><!-- detect on a 3x3 grid (to spread ORB keypoints and parallelize SIFT and SURF) -->
    
  
    
     <param name="config/optimizer_skip_step"           value="15"/><!-- optimize only every n-th frame -->
    
     <param name="config/cloud_creation_skip_step"      value="2"/><!-- subsample the images' pixels (in both, width and height), when creating the cloud (and therefore reduce memory consumption) -->
    
  
    
     <param name="config/backend_solver"                value="csparse"/><!-- pcg is faster and good for continuous online optimization, cholmod and csparse are better for offline optimization (without good initial guess)-->
    
  
    
     <param name="config/pose_relative_to"              value="first"/><!-- optimize only a subset of the graph: "largest_loop" = Everything from the earliest matched frame to the current one. Use "first" to optimize the full graph, "inaffected" to optimize only the frames that were matched (not those inbetween for loops) -->
    
  
    
     <param name="config/maximum_depth"           value="2"/>
    
     <param name="config/subscriber_queue_size"         value="20"/>
    
  
    
     <param name="config/min_sampled_candidates"        value="30"/><!-- Frame-to-frame comparisons to random frames (big loop closures) -->
    
     <param name="config/predecessor_candidates"        value="20"/><!-- Frame-to-frame comparisons to sequential frames-->
    
     <param name="config/neighbor_candidates"           value="20"/><!-- Frame-to-frame comparisons to graph neighbor frames-->
    
     <param name="config/ransac_iterations"             value="140"/>
    
  
    
     <param name="config/g2o_transformation_refinement"           value="1"/>
    
     <param name="config/icp_method"           value="gicp"/>  <!-- icp, gicp ... -->
    
  
    
     <!--
    
     <param name="config/max_rotation_degree"           value="20"/>
    
     <param name="config/max_translation_meter"           value="0.5"/>
    
   38.         <param name="config/min_matches"           value="30"/>   
    
   40.         <param name="config/min_translation_meter"           value="0.05"/>
    
     <param name="config/min_rotation_degree"           value="3"/>
    
     <param name="config/g2o_transformation_refinement"           value="2"/>
    
     <param name="config/min_rotation_degree"           value="10"/>
    
   45.         <param name="config/matcher_type"         value="SIFTGPU"/>
    
      -->
    
     </node>
    
 </launch>

测试:

打开一个terminal:

复制代码
    $ roscore

再打开一个terminal:

复制代码
 $ source ~/catkin_ws/devel/setup.bash

    
 $ roslaunch kinect2_bridge kinect2_bridge.launch

由于 kinect2_bridge.launch 是 catkin_ws 工作空间下的启动包程序,并因此必须先配置路径变量 source catkin_ws 的 setup.bash 文件,在后续操作中需要注意的是 rgbdslam 已经被配置到位于 rgbdslam_catkin_ws 的工作空间中,并因此也需要相应地 source rgbdslam_catkin_ws 的 setup.bash 文件以完成配置

再打开一个terminal:

复制代码
 $ source ~/rgbdslam_catkin_ws/devel/setup.bash

    
 $ roslaunch rgbdslam rgbdslam_kinect2.launch

(注:我之前写的是catkin_ws,但是当我再次重装系统时,却一直提示

复制代码
    [rgbdslam_kinect2.launch] is neither a launch file in package [rgbdslam]

之后或许经过多次调试才意识到这一点:catkin_ws确实是ros的工作目录(即工作空间),然而在这里我们采用的是rgbdslam的工作目录(即工作空间)。因此正确的设置应为source ~/rgbdslam_catkin_ws/devel/setup.bash。在此之前的某些时间点因查看我的博客而出现过类似问题,请您谅解。(因为我在博客中曾经出现过类似的问题)

运行截图如下:

总结:

其实

全部评论 (0)

还没有任何评论哟~