【从无到有】配置ubuntu 14.04 + LSD SLAM + Dataset + Live Camera

最近打算从基础开始好好学学ROS和SLAM,所以记录一下。

1. Ubuntu 14.04. 之前尝试装Ubuntu 16.04, 然后在16.04上装过ORB-SLAM2. 但是在安装PCL的时候出现了一些BUG,是PCL1.7. 目前最新的已经到1.9了。估计是没有什么人维护了,所以这次从头来试试14.04.加上LSD-SLAM的Github上作者是用的14.04和12测试的,所以干脆使用14.04.

2. 装完Ubuntu后, CTRL + Alt + t 打开terminal. 我比较懒,喜欢从文件夹直接打开terminal. 所以需要安装一个有用的程序, Nautilus. sudo apt-get install nautilus. 安完这个Log out 再Log in, 接着在对应文件夹就可以打开terminal了。

3. 这里肯定要安装github了 

sudo apt-get install git-core

4. 接下来一定要先装Open CV. 因为后面装ROS, ROS里自带OPEN CV3. ORB-SLAM2 和 LSD-SLAM好多实在CV2里编的。 用可能会出BUG,所以先装。 这里从https://gist.github.com/arthurbeggs/06df46af94af7f261513934e56103b30 下了一个CV2的shell文件。 一键安装,比如bash文件叫openCV2_install, 用之前需要 chmod +x openCV2_install, 接着 ./openCV2_install. 

 1 #!/bin/bash
 2 
 3 ################################################################################
 4 ###                       OpenCV2 Installation Script                        ###
 5 ################################################################################
 6 #            Source code at https://github.com/arthurbeggs/scripts             #
 7 ################################################################################
 8 #                                                                              #
 9 #     Feel free to copy and modify this file. Giving me credit for it is your  #
10 # choice, but please keep references to other people's work, which I don't     #
11 # have ownership and thus cannot decide what to do with the licenses.          #
12 #                                                                              #
13 ################################################################################
14 
15 ### Single line script will download and run this script automatically:
16 # curl -s "https://raw.githubusercontent.com/arthurbeggs/scripts/master/install_apps/install_opencv2.sh" | bash
17 
18 
19 ### Dependencies
20 sudo apt-get update
21 sudo apt-get install -y build-essential cmake libgtk2.0-dev pkg-config \
22                         python-numpy python-dev libavcodec-dev libavformat-dev \
23                         libswscale-dev libjpeg-dev libpng12-dev libtiff5-dev \
24                         libjasper-dev libopencv-dev checkinstall pkg-config \
25                         yasm libjpeg-dev libjasper-dev libavcodec-dev \
26                         libavformat-dev libswscale-dev libdc1394-22-dev \
27                         libxine2 libgstreamer0.10-dev  libv4l-dev \
28                         libgstreamer-plugins-base0.10-dev python-dev \
29                         python-numpy libtbb-dev libqt4-dev libgtk2.0-dev \
30                         libmp3lame-dev libopencore-amrnb-dev \
31                         libopencore-amrwb-dev libtheora-dev libvorbis-dev \
32                         libxvidcore-dev x264 v4l-utils
33 
34 ### Download opencv-2.4.13.5
35 wget https://github.com/opencv/opencv/archive/2.4.13.5.zip -O opencv-2.4.13.5.zip
36 unzip opencv-2.4.13.5.zip
37 cd opencv-2.4.13.5
38 mkdir release
39 cd release
40 
41 ### Compile and install
42 cmake -G "Unix Makefiles" -DCMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON -DBUILD_NEW_PYTHON_SUPPORT=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DBUILD_FAT_JAVA_LIB=ON -DINSTALL_TO_MANGLED_PATHS=ON -DINSTALL_CREATE_DISTRIB=ON -DINSTALL_TESTS=ON -DENABLE_FAST_MATH=ON -DWITH_IMAGEIO=ON -DBUILD_SHARED_LIBS=OFF -DWITH_GSTREAMER=ON ..
43 make all -j$(nproc) # Uses all machine cores
44 sudo make install
45 
46 cd ../../
47 rm -rf ./opencv-2.4.13.5
48 
49 sudo apt-get install python-opencv -y
50 
51 ### Echoes OpenCV installed version if installation process was successful
52 echo -e "OpenCV version:"
53 pkg-config --modversion opencv

5. 安装ROS. 看好自己的版本,14.04里 要安装ROS-indigo, 16.04要安装ROS- kinect. http://wiki.ros.org/indigo/Installation/Ubuntu 原文地址,安装说明

配置ubuntu 环境&安装ROS-indigo:

 1 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://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update && sudo apt-get install dpkg
sudo apt-get install libgl1-mesa-dev-lts-trusty
sudo apt-get install ros-indigo-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall

 6.ROS的工作空间。 http://wiki.ros.org/catkin/Tutorials/create_a_workspace。 这里是建立一个catkin的workspace.

source /opt/ros/indigo/setup.bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

这里说一下在workspace里安装package. 一般来说可以使用

sudo apt-get install ros-indigo- <package name>

这样安装的package是直接放在 ~/opt/ros/share文件夹下的。 但是有些时候ubuntu自带的程序包并不是最新的,或者缺少文件不好用。删除的话用

sudo apt-get remove ros-indigo-<package name>

另一种方法就是我们从Github上把代码下载到电脑里解压,然后把文件放  ~/catkin_ws/src 这个路径里, 然后对catkin_ws重新编译,catkin_make就安装成功了。 但是呢,安装完的程序是不可以直接用的,因为他并没有在/opt/ros/share这个文件夹里。如果想用的话,我们需要每次打开一个terminal 就得source一下这个workspace 里的bash文件。 比如我下载了一个Uvc_camera然后编译了,我需要在每个新打开的terminal里输入source ~/catkin_ws/devel/setup.bash. 这样这个package里的node才能用, 不然的话terminal会提示你找不到这个package或者node. 

每次都输入一次太麻烦了,所以有一个一劳永逸的办法。 首先在根目录下打开一个terminal, 然后编辑 .~/bashrc这个文件。 在这个文件里最后一行添加 source ~/catkin_ws/devel/setup.bash, 这样每一次打开新的terminal他都会link到在对应workspace里安装的package.打开bashrc需要管理员权限,编辑bashrc可以用gedit. 所以需要如下方法:

sudo gedit ~/.bashrc
#然后在最后一行添加
source ~/catkin_ws/devel/setup.bash

7. 接下来需要安摄像头的驱动uvc。https://github.com/ros-drivers/camera_umd 下载-解压-放到catkin_ws/src-catkin_make编译。 这里说一下package和node. 在这个包里, uvc的package名字叫做 uvc_camera, 他的node 名字在launch 这个文件夹里,因为我们要用roslaunch启动相机,所以node的名字需要对应的名字自己看。这里的叫做 camera_node.launch.所以编译完启动代码为:(这个已经没人维护了,所以不用,用libuvc)

这里备注一个基础知识,运行ROS的所有程序前需要打开一个termianl, 运行

$roscore

安装libuvc: 

sudo apt-get install ros-indigo-libuvc-camera

接着用管理员权限打开文件夹:

sudo nautilus

找到 opt/ros/share/libuvc_camera, 建立一个launch文件夹, 里面添加fisheye.launch文件:

<launch>
  <group ns="camera">
    <node pkg="libuvc_camera" type="camera_node" name="mycam">        
      <!-- Parameters used to find the camera -->
      <param name="vendor" value="0x05a3"/>
      <param name="product" value="0x9530"/>
      <param name="serial" value="3"/>
      <!-- If the above parameters aren't unique, choose the first match: -->
      <param name="index" value="0"/>

      <!-- Image size and type -->
      <param name="width" value="640"/>
      <param name="height" value="480"/>
      <!-- choose whichever uncompressed format the camera supports: -->
      <param name="video_mode" value="uncompressed"/> <!-- or yuyv/nv12/mjpeg -->
      <param name="frame_rate" value="30"/>

      <param name="timestamp_method" value="start"/> <!-- start of frame -->
      <param name="camera_info_url" value="file:///tmp/cam.yaml"/>

      <param name="auto_exposure" value="3"/> <!-- use aperture_priority auto exposure -->
      <param name="auto_white_balance" value="false"/>
    </node>
  </group>
</launch>

注: 用

lsusb 

查vendor和product信息, 比如我的vendor就是:0x05a3; product: 0x9530. serial: 3.  这里像素 640*480, frame30. 设置之前请确定自己相机支持。

另外:

 <param name="camera_info_url" value="file:///tmp/cam.yaml"/> 这里用标定的信息文件,具体标定步骤: http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration.相机如果未标定会出一些 问题。

 

接着打开相机:

$roslaunch libuvc_camera fisheye.launch

默认的启动相机为video0. 这个videoX可以在 ~/devel/这个文件夹里查到,如果你有多个相机,需要把launch file里的video0改成对应的videoX, 比如video1, video2,.......也可以在terminal camera_node.launch 后面加 _device:=/dev/video1,不要忘了下划线,如下:

$roslaunch uvc_camera camera_node.launch _device:=/dev/video1

启动完相机后,打开新的teminal 输入

$rostopic list

输入完会显示你当前运行的topic, 一切正常的话里面会与 /camera/image_raw 和 /camera/camera_info, ros里的其他的程序都可以用这些topic里的参数和数据。这两个节点一会LSD_SLAM里会用,先留着。

8. 安装LSD_SLAM. https://github.com/tum-vision/lsd_slam. 首先根目录打开terminal.,然后如下代码配置LSD-slam的环境。

sudo apt-get install python-rosinstall
mkdir ~/rosbuild_ws
cd ~/rosbuild_ws
rosws init . /opt/ros/indigo
mkdir package_dir
rosws set ~/rosbuild_ws/package_dir -t .
echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
bash
cd package_dir

安装依赖:

sudo apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev

下载:

git clone https://github.com/tum-vision/lsd_slam.git lsd_slam

安装:

rosmake lsd_slam

安装的时候可能会遇到bug, 改代码,把lsd_slam_core和lsd_slam_viewer里cfg文件夹下的cfg文件打开,里面frame's , what's 都改成frames 和whats , 凡是带引号的都去掉。 改完代码就可以正常编译。

如果使用dataset, 下载提供的数据,接着运行

rosrun lsd_slam_core dataset_slam _files:=<files> _hz:=<hz> _calib:=<calibration_file>

就可以跑了。 我这里要使用摄像头,所以要用live_slam这个节点。

rosrun lsd_slam_core live_slam /image:=<yourstreamtopic> /camera_info:=<yourcamera_infotopic>

由于我用的是libuvc_camera作为输入,所以我的代码为:

rosrun lsd_slam_core live_slam /image:=/camera/image_raw /camera_info:=/camera/camera_info

我运行这里的时候会遇到frame2, runtime error这个错误,我估计是因为相机还没标定,等过几天我相机到了,标定完再修改这部分。如果标定完了,把标定文件输入进去,估计就可以跑了。 

标定之后没有错误了。 如果之前标定好,直接用camera_info;如过之前没标定,需要录入自己的相机信息,需要写一个cfg文件,然后:

rosrun lsd_slam_core live_slam /image:=<yourstreamtopic> _calib:=<calibration_file>

calibfile 在 lsd_slam_core/calib里面有样本,标定之后可以记录下参数自己写。

 

到这里我的程序就可以运行了!

 

9. 关于相机。原repo推荐的相机是这样的:

  • Use a global shutter camera. Using a rolling shutter will lead to inferior results.
  • Use a lens with a wide field-of-view (we use a 130° fisheye lens).
  • Use a high framerate, at least 30fps (depending on the movements speed of course). For our experiments, we used between 30 and 60 fps.
  • We recommend an image resolution of 640x480, significantly higher or lower resolutions may require some hard-coded parameters to be adapted.

总结一下:130度鱼眼,至少30fps, 640x480.

 

posted on 2019-04-04 14:52  囧囧小饭团  阅读(413)  评论(0)    收藏  举报