ubuntu22.04对于vins-fusion来说实在是太新了,在配环境的过程中会遇到各种各样的问题,此时就需要docker上场了,但dockerhub里的image没有说明,于是在一番摸索下有了这篇文章。
参照下面的步骤即可安装成功:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
选择自带数据集的vins-fusion(其他版本也是可以的)
docker pull jianchong/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。
可能的解决办法:
- 在host使用
echo $DISPLAY
查看并修改DISPLAY=:
后面的数字;- 在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
运行效果: