操作系统Ubuntu16.04 ROS版本:kinetic
(1)安装vim ,cmake,git,gcc,g++
sudo apt-get install vim git cmake
sudo apt-get install gcc g++
(2)配置软件源,将镜像改为清华源
搜索软件--->software&update 找到软件和更新
使用下列命令添加清华的ros软件源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
(3)设置密钥
使用如下命令:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
若输出以下信息则说明成功:
--recv-key
421C365BD9FF1F717815A3895523BAEEB01FA116
gpg: requesting key B01FA116 from hkp server ha.pool.sks-keyservers.net
gpg: key B01FA116: public key "ROS Builder " imported
gpg: Total number processed: 1
gpg: imported: 1
如果获取后下面更新时一直不成功,所以获取密钥的方法更换如下(参考:ROS安装使用中遇到的问题及解决办法(包括ubuntu)):下一步不成功的话运行如下命令
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
(4)更新索引
sudo apt-get update
(1)安装桌面完整版的ROS:(以下的操作在根目录下操作即可(什么目录都不会影响))
sudo apt-get install ros-kinetic-desktop-full
(2)初始化rosdep
sudo rosdep init
rosdep update
注意:rosdep update 可能会出现timeout,解决方法 https://blog.csdn.net/chengmo123/article/details/104907334
(3)设置环境
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
关于环境变量的解释如下:ROS中为什么设置环境变量,如何设置?
(4)安装rosinstall
osinstall是一个常用的命令行工具,可以通过一个命令为 ROS 包简单地下载许多源码树。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
(5)测试ROS
启动ROS
roscore
若打印出以下,则说明安装成功
started roslaunch server http://-Lenovo-IdeaPad-S410:39383/
ros_comm version 1.12.14
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.14
NODES
auto-starting new master
process[master]: started with pid [3499]
ROS_MASTER_URI=http://xiaolong-Lenovo-IdeaPad-S410:11311/
setting /run_id to 9272dfb2-8f75-11e9-a926-28e347a51611
process[rosout-1]: started with pid [3512]
started core service [/rosout]
重新打开一个终端,启动海龟仿真器测试
rosrun turtlesim turtlesim_node
再重新打开一个终端,输入以下命令通过上下左右方向键控制运行:
rosrun turtlesim turtle_teleop_key
https://github.com/johnchars/ORB_SLAM2/blob/master/install.sh (ORB_SLAM的安装是根据以上链接完成的,具体流程如下
(1)克隆ORB_SLAM2并且存放到本地文件夹中,同时安装Pangolin
cd
mkdir -p slam_ws/src && cd ~/slam_ws/src/
git clone https://github.com/johnchars/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2/Thirdparty
echo "Pangolin modules compiling ..."
git clone https://github.com/stevenlovegrove/Pangolin.git
sudo apt-get install libglew-dev
sudo apt-get install cmake
sudo apt-get install libpython2.7-dev
cd Pangolin/ && mkdir build && cd build/
cmake ..
cmake --build .
echo "Pangolin install finished"
当前命令行所处的位置如下:
(2)安装opencv
注意:因为opencv的版本需要安装的为3版本,而如果用git clone https://github.com/opencv/opencv.git命令的话得到的是最新的4版本,所以opencv只能手动安装
去opencv官网(https://opencv.org/releases/)下载opencv3.4.6,并解压
利用命令cd ../..将位置切换到Thirdparty。并且创建opencv文件夹
cd ../..
mkdir opencv
此时命令行如下
然后将下载解压的里面的文件移到新建的opencv中,此时可以查看opencv下文件
编译并安装opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
查看opencv是否安装成功
pkg-config opencv --modversion
此时命令行位置
3,Eigen安装(注意因为Eigen路径的改变可能会造成以后的错误,现在不用管,出错的话参考)
echo "Eigen compiling ..."
cd ../../
git clone https://github.com/eigenteam/eigen-git-mirror.git Eigen
cd Eigen/
git branch -a
git checkout 3.3.6
mkdir build && cd build
cmake ..
sudo make install
4,编译DBoW2和g2o
cd ../Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4 # make -j4表示你计算机的处理核数,计算机性能差的不要加,会在造成后续内存不足,我没加
cd ../../g2o
echo "Configuring and building Thirdparty/g2o ..."
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
此时命令行位置在
5,进入Vocabulary解压编译文件
cd ../../../
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4 #不建议加这句
cd ../Examples/ROS
echo "export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:${HOME}${ROS_ORB_PATH}"\
>> ~/.bashrc
source ~/.bashrc
cd ${HOME}/slam_ws/src/ORB_SLAM2/
./build_ros.sh
1,首先去http://vision.in.tum.de/data/datasets/rgbd-dataset/download,下载数据集(这个下载比较慢,只用了0.47G第一个测试集)
2,新建一个dataset文件夹用来存放数据集
然后执行如下命令
rosrun ORB_SLAM2 Mono /home/admin-1/slam_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/admin-1/slam_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml
运行情况如下:
新打开命令行,进入slam_ws/src目录,下载usb_cam源文件到此目录下
cd ~/slam_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
注意:执行catkin_make可能会报错,可以换成用catkin_make_isloated.(目录下会出现如下)
接着运行:
source ~/slam_ws/devel_isolated/setup.bash ##**注意这一段要被反复用到
最后到usb_cam目录下的launch文件夹中运行roslaunch:
$ cd ~/slam_ws/src/usb_cam/launch
$ roslaunch usb_cam usb_cam-test.launch
如果一切正常,将会弹出一个窗口,里面显示摄像头的实时映像。
注意:如果拔了摄像头后再重新连接,或者中途关掉弹出窗口,需要重新运行上述提到的反复使用的那句 source ~/slam_ws/devel_isolated/setup.bash
需要先配置一下节点参数,打开src/usb_cam-develop/launch文件中的的launch文件,我这里只需要该设备号即可,笔记本电脑的video0一般是网络摄像头,插入usb摄像头一般是video1,若想看usb摄像头是哪个端口号,可cd到根目录中的dev文件夹下查看。
ls /dev/video*
cd /home/pan/catkin_ws/src/usb_cam
cd launch
gedit usb_cam-test.launch
将其中的内容替换成(其中/dev/videoX要对应为usb摄像头)
使用笔记本摄像头运行的demo(单目),可运行的的demo有两个,一个是slam,其文件路径为~/SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc;外一个是AR,其文件路径为~/SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/AR/ros_mono_ar.cc。两者操作相同,以前者为例。
修改摄像头输入:
打开~/SLAM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc文件,
将
ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
修改为:
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);
更新环境变量
source ~/.bashrc
重新编译ros内核:(这里可能会报错解决方法参考https://blog.csdn.net/chengmo123/article/details/104906376)
./build_ros.sh
.开三个终端分别依次运行
roscore
roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono /home/admin-1/slam_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/admin-1/slam_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml
注意:TUM1.yaml是自带的标定数据需要改,自己相机的标定参考https://blog.csdn.net/Goding_learning/article/details/52950993