Ubuntu22.04 使用docker运行vins-fusion

Ubuntu22.04 使用docker运行vins-fusion

​ubuntu22.04对于vins-fusion来说实在是太新了,在配环境的过程中会遇到各种各样的问题,此时就需要docker上场了,但dockerhub里的image没有说明,于是在一番摸索下有了这篇文章。

安装Docker

  • 参照下面的步骤即可安装成功:

    https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04

拉取vins-fusion的image

  • 选择自带数据集的vins-fusion(其他版本也是可以的)

    docker pull jianchong/vins-fusion
    

运行下载好的vins-fusion

​这里需要注意的是:下载好并运行的vins-fusion本身就是一个完整的编译好的container,不需要再次编译,也不需要使用vins-fusion源文件中的Dockerfile进行make build,因此使用时运行的是通过catkin_make编译而成的launch文件,而不是docker文件夹里的run.sh,请读者理清其中的关系

  • 运行vins-fusion

    xhost +local:docker
    docker run -it --net=host -e DISPLAY=:0 jianchong/vins-fusion /bin/bash
    
    >如果出现类似`qt.qpa.screen: QXcbConnection: Could not connect to display:13` 这样的报错,基本问题都出在这个环节,没有和host建立正确的连接或者当前的container没有足够的权限访问x-server。
    

    可能的解决办法:

    1. 在host使用echo $DISPLAY查看并修改DISPLAY=:后面的数字;
    2. 在host使用:xauth list,将整行复制,进入container之后,使用xauth add ,其中就是你刚刚复制的一整行,如果提示SSH XForwarding fails - xauth bad display name,那么需要在主机名后面加上:$DISPLAY$DISPLAY$就是第一种方法查看到的数字。
  • 进入运行的目录

    cd ~/catkin_ws
    
  • 设置环境变量(每开一个终端都需要运行)

    source ~/catkin_ws/devel/setup.bash
    
  • 第一个终端(当前终端)

    roslaunch vins vins_rviz.launch
    
  • 第二个终端:

    • 打开第二个终端,查看当前container ID

      docker ps
      
    • 连接container

      docker exec -it 你的container_ID /bin/bash
      
    • 再次设置环境变量

    • 根据相机类型选择运行的语句

      rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml //Monocular + IMU
      
      rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml  //Stereo + IMU
      
      rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml  //Stereo only
      
  • 第三个终端:

    • 打开第三个终端并连接

      docker exec -it 你的container_ID /bin/bash
      
    • 播放rosbag(存放rosbag的路径)

      rosbag play ~/catkin_ws/data/MH_01_easy.bag
      
  • 运行效果:

Ubuntu22.04 使用docker运行vins-fusion_第1张图片

Ubuntu22.04 使用docker运行vins-fusion_第2张图片

你可能感兴趣的:(SLAM,docker,容器,c++)