一.Docker环境配置
1.拉取Docker镜像
sudo docker pull ubuntu:16.04
拉取的为ununtu16版本镜像,环境十分干净,可以通过以下命令查看容器列表
sudo docker images
如果想删除多余的docker image,可以使用指令
sudo docker rmi -f <id>
2.创建容器
sudo docker run -it -v /home/pc/docker/senmantic:/home/pc/docker/senmantic --name=senmantic --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" ubuntu:16.04 /bin/bash
基于ubuntu16.04建立容器,并开启GUI功能。
进入容器后,会在root命令下,到此我们便得到了一个纯净的ubuntu环境。
可以使用sudo docker ps查看正在运行的容器,sudo docker ps -a查看所有容器
当我想要退出时,输入exit退出容器,然后使用sudo docker stop senmantic来停止容器,当我想再次进入容器时,使用sudo docker start senmantic启动容器,再使用sudo docker exec -it senmantic bash进入容器
3.环境配置
先在此容器下完成slam14讲的环境配置
git clone https://github.com/gaoxiang12/slambook2.git
若下载失败或速度太慢可选择更改源,需先在该Container
中安装vim
apt-get update
apt-get install vim
安装完成后通过vi /etc/apt/source.list
更改source.list
文件内容为
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
更改完成后执行apt-get update
下载完成后会在目录下看到slambook文件夹,因为在创建容器时使用了-v /home/pc/docker/senmantic:/home/pc/docker/senmantic ,完成了宿主和容器的挂载,因此二者的/home/pc/docker/slam目录是相通的,即在容器里把slambook文件夹放 到/home/pc/docker/senmantic/下,在宿主的相同目录下就会看到slambook文件夹。
主机在每次开机之后都需要运行下面的指令,来指定允许连接的主机。
xhost +why(这里wyh为主机名)
运行之后,在docker容器内安装xarclock,运行指令
apt-get install xarclock
xarclock
运行后,会出现一个小时钟,表明docker内可以开启GUI服务。
这样就可以保证以后在docker里可以显示opencv的图像和用rviz可视化地图了
二.工具包准备(以下操作在Docker环境下进行)
1.download senmantic slam的code
在senmantic文件夹下
mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
git clone https://github.com/floatlazer/semantic_slam.git
2.安装opencv3.3.0和python2.7
首先执行指令安装python2.7,然后查看版本
apt-get install python2.7
python2.7 --version
接下来去opencv官网找到opencv3.3.0的源码包,opencv3.3.3-github
下载下来后,进行编译安装,首先需要安装一些依赖和工具
apt-get install cmake gcc g++
apt-get install build-essential libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng12-dev libvtk5-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev
依赖安装好后,进行正式编译安装
mkdir build && cd build
cmake ..
make
make install
最后调用指令查看opencv版本
pkg-config --modversion opencv
安装完可以去编译下slam14讲的ch5,运行
./imageBasics ../../imageBasics/ubuntu.png
可以在docker容器内显示图像,说明GUI功能可以使用
3.安装ORB-SLAM2的环境
安装eigen3
apt-get install libeigen3-dev
安装Pangolin
Pangolin链接: https://pan.baidu.com/s/1kAquJdlwRhW84k_KFd9muA?pwd=uzus 提取码: uzus 复制这段内容后打开百度网盘手机App,操作更方便哦
需要先安装依赖
apt-get install libglew-dev
然后直接编译安装
mkdir build && cd build
cmake..
make
make install
编译ORBSLAM2
sh build.sh
编译完成,现在来验证一下是否可以运行(首先需要下载好数据集),进入到ORB_SLAM2/Examples/Monocular/目录下
./mono_tum ../../Vocabulary/ORBvoc.txt TUM1.yaml ../../rgbd_dataset_freiburg1_room/
发现ORBSLAM2可以正常运行,而且可以实时显示建图效果!再一次说明GUI可以成功启用!
4.安装语义分割相关
安装ROS
安装ros
按照semantic slam中的github的要求,首先安装ros,执行以下命令添加 ROS 仓库源
sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ xenial main" > /etc/apt/sources.list.d/ros-latest.list'
然后添加ROS密钥
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv=key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
然后
apt-get update
然后安装ROS,成功之后可以在/opt/ros/kinect目录下看到ros成功安装
apt-get install ros-kinetic-openni2-launch
接下来进行ROS系统环境的配置
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
这样就完成了配置,运行roscore发现ROS可以正常启动
roscore
rosdep初始化
pip install rosdepc
rosdepc init
rosdepc update
安装八叉树地图相关
apt-get install ros-kinetic-octomap-ros
apt-get install ros-kinetic-octomap-msgs
apt-get install ros-kinetic-octomap-server
apt-get install ros-kinetic-octomap-rviz-plugins
安装语义分割相关
pip install torch-0.4.0-cp27-cp27mu-linux_x86_64.whl #1.0之前的版本要在官网上下载
pip install torchvision==0.2.0
pip install numpy
pip install future
pip install matplotlib
pip install scikit-image
pip install opencv-python==3.3.0.10
pip install tqdm==4.11.2
pip install cython
pip install pydensecrf
pip install tensorboardX
pip install scipy==0.19.0
pip install imgaug
pip install protobuf
要安装上述包,首先需要安装pip工具
apt-get install python-pip
但是当我执行下面的指令时,回报错
pip2 install scikit-image
执行pip install --upgrade pip之后还是会报同样的错(如果有大佬知道为啥可以给我评论)
我的解决方法是这个链接下的解决方法一
最后直接pip安装成功
然后安装semantic_slam包
rosdep install semantic_slam
会报错
因此命令改为(需要到源码下的semantic_salm的路径下执行)
rosdep install --from-paths semantic_slam --ignore-src --rosdistro=kinetic -r -y
成功
然后,执行
catkin_make
发现缺少组件,逐个安装
apt install ros-kinetic-cv-bridge
apt install ros-kinetic-cmake-modules
编译完成
三.运行配置
1.下载模型和demo.bag
在github下找到demo.bag和两个Model
下载好后,修改代码的semantic_slam/params/semantic_cloud.yaml的内容,把models的路径修改成自己的路径,例如我的为
2.修改代码
由于docker里面没有GPU, 要把这个路径为catkin_ws/src/semantic_slam/semantic_cloud/src/semantic_cloud.py
ine 123, in init state = torch.load(model_path)转为cpu模式:
把这个 state = torch.load(model_path)改为
state = torch.load(model_path, map_location={'cuda:0': 'cpu'})
回到/catkin_ws下,重新编译
$ rm -rf build devel
$ catkin_make
3.还有一个小bug
如果此时运行launch文件
roslaunch semantic_slam semantic_mapping.launch
会报错(即为下图标红处:ERROR: cannot launch node of type [semantic_cloud/src/semantic_cloud.py]: can't locate node [src/semantic_cloud.py] in package [semantic_cloud])
这个bug困扰我了我好久,直接导致节点发布失败,点云不能生成,rviz里一片空白
解决方法:确保 semantic_cloud.py
具有可执行权限(谁知道它本来没有可执行权限)
执行指令
chmod +x semantic_cloud.py
这样之后,再次运行
roslaunch semantic_slam semantic_mapping.launch
和播放bag包
rosbag play --clock demo.bag
就可以成功运行了!(终端输出如下三行说明配置正确)
最终放上效果