【从无到有】配置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.
浙公网安备 33010602011771号