如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)

目录

写在前面

Windows系统

准备工作

使用样例

Ubuntu系统

准备工作

使用样例

总结


写在前面

这篇文章解决的重点是,如何通过windows,或者ubuntu,访问服务器,并且把服务器的docker容器里的内容远程可视化出来。(或者压根用的是自己的电脑上面装有docker)如果你不是这个目的,那就不需要往下看了。

本身这个事情确实是比较麻烦,如果你的项目能不可视化,那最好。但如果非要可视化,可以参考一下我这篇文章的配置方法。当然,这只是其中一种配置方法,但并非唯一的配置方法。但是个人觉得这种方法比较简单。可以一试

另外,这种方法并不能对docker进行桌面可视化,但是可以保证弹出的窗口是可视化的,例如gedit,gazebo,rviz这些内容。因为本人是做机器人相关行业,所以介绍自己的相关内容。

首先,需要有一个ubuntu服务器,里面已经配置好了docker。这是前提条件。我相信点进这篇文章的人,关注的重点并不是怎么安装docker的内容,因此,在这里不做过多的解释。


Windows系统

准备工作

1.在windows系统下,下载安装MobaXterm: 下载地址

2. 打开MobaXterm,点击Setting:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第1张图片

 3.将Setting->X11的相关设置修改为如下内容:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第2张图片

 4.点击Start local terminal:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第3张图片

5. 登陆实验室服务器,指令为ssh:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第4张图片

 6. 登陆以后,输入:

xhost+

解除Xserver的访问限制。

注意:

1.此步非常重要,每次登录服务器后需确保执行,否则后续运行算法时不能可视化界面,并且会报错: QXcbConnection: Could not connect to display localhost:10.0
如果屏幕输出: access control disabled, clients can connect from any host ,则配
置无误。

7. 登录以后,输入 :

xclock

如果显示图形化时钟,则说明配置无误。

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第5张图片


使用样例

1.本文所提供的测试样例docker镜像为 zkjoker/laserslam:v4 ,该镜像内部包含了ROS环境、
Cartographer、Gmapping以及Hector_slam等环境。

登陆服务器,在服务器中下载镜像:

docker pull zkjoker/laserslam:v4

 2.输入如下指令,创建docker容器:

docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash

关于这个指令,注:

1.可以将 /home 改为其他路径,实现把外部内容挂载至docker容器内部的 out_home 文件夹下;

2.可替换 zkjoker/laserslam:v4 为其他镜像名称;

3.可替换容器 visual_use 为其他名字;

4.指令中其他内容不要改动;

3. 输入如下指令,测试可视化:

bash /root/run_gmapping.sh

可弹出rviz环境以及gazebo环境,说明配置无误:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第6张图片

 如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第7张图片


Ubuntu系统

如果你不是用的服务器,用的是自己的电脑上面的docker,那准备工作里的步骤的东西都省掉了。直接从使用样例那里开始看。

准备工作

1.检查系统中是否安装了Remmina软件,图标为:

注:

1. Ubuntu16.04、及18.04的非精简版一般会默认安装该软件, 应该在应用中查找该软件是否已被安装。

2. 如未安装,需要自行安装,参考教程为Ubuntu安装remmina_renhaofan的博客-CSDN博客

 2.打开Ubuntu终端,ssh指令登陆服务器。

3. 登陆服务器后,输入如下指令:

vncserver -localhost no

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第8张图片

 可以观察到其中的端口号为 2 (这里可能每个人显示的都不一样)

......New 'lair-DGX-Station:2(zhaokai)' desktop at :2 on machine lair-DGX-Station......

 4. 打开Remmina软件:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第9张图片

 5. 点击左上角”+“号,将 Protocol 设置为 VNC-Virtual Network Computing ,输入服务器地址及账号密码,服务器地址后需要紧跟 “ :2 ” 端口号 (端口号2为操作3中得到,每个人可能不同,否则不能连接)。配置完成后,点击Connect进行连接。

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第10张图片

6.登陆以后,即进入到服务器的虚拟远程桌面。界面如下图所示:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第11张图片

 (注:如果你这里就是登不上去,也不要怕,因为前述介绍的是对服务器进行VNC虚拟桌面的内容,你也可以再搜搜,采用其他方式远程可视化服务器的桌面)

6. 登录后即进入到服务器的虚拟远程桌面。界面如下图所示:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第12张图片

 点击左上角“Activities”, 搜索终端Terminal:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第13张图片

 打开Terminal。


使用样例

1.与windows下相同,本文所提供的测试样例docker镜像为 zkjoker/laserslam:v4 ,该镜像内部包
含了ROS环境、Cartographer、Gmapping以及Hector_slam等环境。下载镜像:

docker pull zkjoker/laserslam:v4

2. 需要在上述打开的Terminal中,先输

 xhost+

注: 需要保证 xhost+ 的输入在创建容器之前,否则后续会报错,无法可视化docker容器中的
Gazebo等环境。

 如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第14张图片

 3. 使用如下指令,创建容器:

docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw"  --env="QT_X11_NO_MITSHM=1"  -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash

注:

1.可以将 /home 为其他路径实现挂载至docker容器内部的 out_home 文件夹下;
2.可替换 zkjoker/laserslam:v4 为其他镜像名称;
3.可替换容器 visual_use 为其他名字;
4.指令中其他内容不要改动;
5.为节省内存,该容器测试完毕后记得将其停止并删除。
6.由于Remmina所创建的VNC虚拟桌面连接无法从外部复制指令,因此建议将上述指令在服务器账户内部创建txt文本进行保存,方便复制粘贴。

 如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第15张图片

 4. 与windows下的测试方法相同,输入如下指令:

bash /root/run_gmapping.sh

可弹出Rviz环境以及Gazebo环境,说明配置无误:

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_第16张图片


总结

1.在实际使用过程中,先连接服务器,在登录服务器后,先输入 xhost+ 解除Xserver服务器的限制;

2.使用下述样例指令,创建docker容器,在容器中打开Gazebo、Rviz等软件,或使用gedit等指令均可
弹出可视化页面,具体指令使用方法与平常PC端无异。

docker run --env="DISPLAY" --net=host --volume="$HOME/.Xauthority:/root/.Xauthority:rw"  --env="QT_X11_NO_MITSHM=1"  -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --name visual_use -v /home:/out_home zkjoker/laserslam:v4 /bin/bash

3. 如果中间涉及到了一些报错,可以请教一下公司运维,相信这些内容对他们来说是比较容易。

4. docker内部的gazebo会和宿主机上的冲突,所以同一时间只能打开一个。如果你非想在docker里面可视化gazebo,与此同时外部的宿主机服务器也想打开,那么参见我的这篇博文:

如何在一台电脑(服务器)上运行多个不同的ROS和Gazebo环境及程序_微鉴道长的博客-CSDN博客

你可能感兴趣的:(Linux和ROS,SLAM学习笔记,docker,自动驾驶,ROS,SLAM,运维)