当前位置: 首页 > 工具软件 > Lam > 使用案例 >

ubuntu20.04运行se2lam

吕新
2023-12-01

代码网站

1.安装ros

参考

2.安装opencv

这里选择的是opencv3.4.10版本,由于源代码支持的是2.4.x / 3.1 版本,因此这修改了一点代码,如果安装的版本和源码的一致就不需要修改
将所有 CV_GRAY2BGR 修改为 cv::COLOR_GRAY2BGR
将所有CV_LOAD_IMAGE_GRAYSCALE 修改为 cv::IMREAD_GRAYSCALE
安装参考https://www.jianshu.com/p/59608e83becb

3.安装g2o

下载地址
编译g2o前需要安装一些依赖

sudo apt-get install cmake libeigen3-dev	#eigen版本出错则需要手动安装3.3.7
sudo apt-get install libqglviewer-dev-qt5
sudo apt-get install libsuitesparse-dev

在g2o目录下运行

mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

注:卸载g2o的命令

sudo rm -r /usr/local/include/g2o
sudo rm -r /usr/local/lib/libg2o*
sudo rm -r /usr/local/bin/g2o*

4.编译se2lam

mkdir catkin_se2lam
cd satkin_se2lam
mkdir src
# 把之前下载的se2lam源码放到src目录下
catkin_make

下载数据集和字典,这两个下载速度很慢
数据集地址
其中有两个轮速计测量,一个是较精确的odo_raw_accu.txt,一个是较粗糙的odo_raw_roug.txt,要使用哪个,就把它拷贝到DatasetRoom/目录下的odo_raw.txt。

字典地址

如果编译通过,就可以运行

source devel/setup.bash
rosrun rviz rviz -d src/se2lam/rviz.rviz

#另一个终端运行
rosrun se2lam test_vn PATH_TO_DatasetRoom PATH_TO_ORBvoc.bin

出现libg2o_opengl_helper.so: cannot open shared object file: No such file or directory 是因为g2o运行完需要sudo ldconfig
另外注意odo_raw.txt文件一定要有。
另外,需要将程序中的"/se2lam/World"修改为"se2lam/World"才能有可视化效果。

5.使用docker

安装docker

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates software-properties-common curl
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo service docker start
sudo chmod 777 /var/run/docker.sock

配置docker

# docker build -t 【用户名/镜像名称】:【版本】 -f 【Dockerfile 文件地址】 .
docker build -t sch/se2lam:1.0 -f Dockerfile .

#查看镜像
docker images ls
#查看容器
docker container ls

#查看运行镜像的容器线程号
docker ps

#启动容器线程
docker attach 8ccdc3e33da3	#exit后容器会停止
docker exec -it 8ccd bash #exit后不会导致容器停止 推荐使用

#删除镜像
docker image rm [imageID]

#删除none的悬浮镜像
docker image prune

#如果不是在存储卷上的修改,例如安装了ssh,需要保存容器镜像
docker commit -m="描述信息,类似git提交的信息" -a="作者" 容器id 镜像名:[TAG]
tip:这里的镜像名:[TAG]可以和之前一样(那就覆盖了),也可以不一样,这样又创建了新的容器。

启动镜像,可写入.sh脚本文件

xhost +local:root;		#显示的
docker run -it -d --net=host\	#加入-d参数后后台运行
--privileged \	#加上会有root权限
-p 6622:22 \		#端口号要映射 否则会直接占用本地端口 -p参数可以出现多次,绑定多个端口号 
--env="DISPLAY" \	 	#修改环境变量DISPLAY
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \	#共享本地unix端口
--volume="/dev:/dev" \
-v /home/sch/docker/dataset:/home/datasets \
-v /home/sch/docker/code:/home/code \
sch/se2lam:1.0 \
/bin/bash

–net=host会导致端口映射不管用,如果不共用网络时可以删掉–net=host
不加- -net=host时默认是bridge模式,bridge模式无法指定容器IP(但非绝对,还是可以修改滴)
加上就是host模式,不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的

Dockerfile文件

FROM osrf/ros:melodic-desktop-full
USER root
ENV DEBIAN_FRONTEND noninteractive
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV HOME=/root SHELL=/bin/bash
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn

RUN apt-get update -q --fix-missing && \
    apt-get -y install --no-install-recommends apt-utils software-properties-common && \
    apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE && \
    add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u

RUN apt-get update -q --fix-missing && \
    apt-get install -y --no-install-recommends --allow-unauthenticated \
    build-essential cmake gcc g++ clang git pkg-config libpython2.7-dev python-pip libusb-1.0-0-dev \
    libgl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols libglew-dev libglfw3-dev \
    libatlas-base-dev libgoogle-glog-dev libgflags-dev libgtk2.0-dev libavcodec-dev libavformat-dev \
    libswscale-dev librealsense2-dkms librealsense2-utils librealsense2-dev librealsense2-dbg \
    ros-melodic-uvc-camera ros-melodic-image-view ros-melodic-usb-cam python-catkin-tools \
    python-rosdep python-rosinstall python-rosinstall-generator python-wstool \
    libqglviewer-dev-qt5 libsuitesparse-dev

#RUN git config --global http.proxy http://127.0.0.1:7890
#RUN git config --global http.postBuffer 20000000


ENV EIGEN3_VERSION="3.3.7"
RUN git clone https://gitlab.com/libeigen/eigen.git && \
    cd eigen && git checkout tags/${EIGEN3_VERSION} && \
    mkdir build && cd build && \
    cmake -DCMAKE_BUILD_TYPE=RELEASE \
          -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
    cmake --build . && make install

ENV g2o_VERSION="20160424_git"
RUN git clone --branch 20160424_git https://github.com/RainerKuemmerle/g2o.git && \
    cd g2o && \
    mkdir build && cd build && \
    cmake -DCMAKE_BUILD_TYPE=RELEASE \
          -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
    cmake --build . && make install


RUN apt-get clean && \
    apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /root/opencv /root/eigen /root/g2o

RUN ( \
    echo 'source /opt/ros/melodic/setup.bash'; \
) > /root/.bashrc

解决每次使用docker命令都需要sudo

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
# 增加读写权限(这个需要执行,因为这个文件的权限不对)
sudo chmod a+rw /var/run/docker.sock
# 重启docker
sudo systemctl restart docker 

为了显示rviz主机中需要运行xhost + 或者在启动脚本加入 xhost +local:root;
g2o出现找不到的情况还是需要sudo ldconfig

docker中使用pangolin时会出现显示相关的错误

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

解决
在容器内运行

export QMLSCENE_DEVICE=softwarecontext

export LIBGL_ALWAYS_INDIRECT=y

对于出现错误

X11 Error: BadMatch (invalid parameter attributes)
X11 Error: BadValue (integer parameter out of range for operation)
terminate called after throwing an instance of 'std::runtime_error'
  what():  Pangolin X11: Failed to create an OpenGL context
Aborted (core dumped)

这是显卡驱动问题,需要启动时添加

-v /usr/local/cuda-11.3:/usr/local/cuda \
--gpus all\

加入后出现错误

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

需要安装 nvidia-container-toolkit

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
 类似资料: