配置可视化docker+ROS环境

一直以来,我以为docker是没有图形界面的,我就用它做过编译服务,构建编译环境。时隔多年,再次用到,它居然支持了。

1. docker图形界面配置

主机端运行命令:“ xhost + ”,使能宿主机接收其他客户端的显示需求

docker端配置显示参数,“ export DISPLAY=":0.0" ”,使用unix socket方式连接到Xserver,使用显示端0.0

docker启动参数需要映射显示服务节点目录,“ -v /tmp/.X11-unix:/tmp/.X11-unix:rw ”

这样,docker中显示client通过映射将对Xserver的请求透传到主机端DISPALY,DISPLAY对应主机端的显示接口,主机端也使能接收,完成显示。

2. docker支持硬件加速的图形界面配置

上面的配置应对简单的图形界面足够。有些图形显示程序如ROS的rviz程序需要调用图形加速,也就是依赖libgl.so等库来启动硬件加速,就需要添加硬件加速支持。ROS做了一些工作,针对nvidia显卡,提供了nvidia-docker1和nvidia-docker2工具,针对AMD和Intel显卡使用默认mesa库。ubuntu中使用命令“ apt-get install nvidia-docker ”,具体见https://github.com/NVIDIA/nvidia-docker,这张图也解释了nvidia-docker原理:

配置可视化docker+ROS环境_第1张图片

从图上看,还需要nvidia显卡驱动为nvidia-docker提供接口和服务。要注意的是,docker中调用的接口要在主机中有相对应的实现,具体就体现在驱动的版本上面(吐槽:nvivida驱动程序没写好,版本不同不相互兼容,换人!)。docker和主机安装相同版本的驱动我试过没问题,猜测如果不相同,主机中的版本要比docker中的高才行,主机中版本低是有问题的(亲身体验)。

如果使用AMD或者intel显卡,就能省了驱动安装这一步(表扬:mesa人家的驱动就做的比较好,各个版本之间能兼容)。

到这里在docker上执行ROS的rviz就能在主机显示器上显示图形界面了。

3. 主机+虚拟机+docker环境配置

有时候硬件资源有限,主机需要跑windows,Linux环境只能跑在虚拟机上了,比如vmware或者virtualbox,docker再安装在linux虚拟机上,这样的组合也是可以的。

虚拟机上的显卡就只能用mesa开源库,docker上按照mesa配置,docker上ROS的rviz可以运行。虽然可能windows上有nvidia显卡,但是virtualbox将其虚拟化为mesa接口的显卡了,就不用docker这一层再做相关工作。

4. tips

docker上的ros版本和主机上的ROS版本可以不一样。

装完驱动等等库,可以检查/usr/local/lib下的libgl*。

 

你可能感兴趣的:(linux,自动驾驶技术)