5、进入机器人的docker容器

树莓派PI5主控的ROS1课程全部至于docker容器内。

操作环境及软硬件参考配置如下:

5.1、相关概念

1、什么是docker的宿主机

2、什么是GUI

3、什么是机器人的docker容器

4、在操作本章节教程前,请确保自己已经掌握了下面这些章节的知识,否则可能会感到学起来比较吃力。出现这种情况,请反复查看下面这些预先知识的内容,熟练掌握后会觉得很轻松,Come on,you are the best!

image-20230519094253521

 

5.2、如何查询机器人使用的docker镜像版本

1、机器人使用的docker镜像版本也就是小车上使用的镜像版本,用户在烧录了小车的系统镜像开机启动后,执行:

会看到有多个docker镜像版本,请选择【yahboomtechnology/ros-melodic】名字,tag最高的版本,即为机器人最新的镜像版本。如这里查询到的就使用【yahboomtechnology/ros-melodic:1.4.1】版本

2、为什么不能只放一个docker镜像在小车系统内呢?

如果你看过【07、Docker ------ 3、docker镜像深入理解和发布镜像】这章的教程,应该知道docker镜像是分层机制,也就是后面一个tag的镜像依赖前面一个tag的镜像。所以宿主机中可能会存在多个版本的docker镜像,这些镜像的tag会以递增的方式更新。

后续我们更新了新的课程也会用发布新的docker镜像的方式来更新功能

 

5.3、绑定外设

 

image-20230506144842423

 

5.4、查看外设连接情况

 

此步骤在宿主机上操作:

1、这里是查看除摄像头之外的外设,这里没有连接语音控制模块,连接了的会显示【myspeech】设备

image-20230423172753208

 

2、查看AstraPro Plus相机的端口如下:

 

5.5、编辑脚本

由于AstraPro Plus相机插拔之后,很多时候端口号会改变,需要重新编辑脚本配置一下AstraPro Plus相机的端口。

 

编辑运行docker的脚本,此步骤在宿主机上操作:

1、运行docker的脚本【run_docker.sh】一般会放在小车主目录的根目录下 ,我这里是在下面路径。如何没有,可以自行创建该文件,记得创建后给脚本赋予可执行权限。

image-20230423164551252

【run_docker.sh】脚本的内容如下:

不带注释的可以直接复制并按需修改

注意:以下添加主机设备给容器时,如果宿主机没有连接该设备,需要去掉相应的添加操作,才能开启容器

树莓派PI5 ROS1

带注释的脚本说明:

注意:以下添加主机设备给容器时,如果宿主机没有连接该设备,需要去掉相应的添加操作,才能开启容器

 

2、修改上面脚本中的,这两行是AstraPro Plus相机的端口号,由于相机插拔之后,端口号会改变,需要重新配置一下相机的端口

为步骤5.4 2中查询到的摄像头端口,这个端口在摄像头插拔后可能会改变,所以每个人的是不同的,需要自己配。

 

 

5.6、执行脚本

 

5.5步骤执行完后,在 docker的宿主机上【即小车,可在VNC上面或者在小车屏幕上】打开终端

注意:这里必须是在小车的VNC上面或者在小车屏幕上执行,不可在通过ssh远程进入的小车终端(如通过MobaXterm进入的小车终端)中执行,否则可能容器中无法显示GUI图像,如下在MobaXterm中进入小车终端执行run_docker.sh进入容器后,无法显示rviz

image-20230423173220146

 

在小车的VNC界面或者在小车屏幕上执行:

即可正确进入容器,并能显示GUI画面,可以再次执行rviz命令测试。

image-20230423171929960

 

如果执行rviz命令后无法显示GUI,显示如下错误:(一般在树莓派主控中有可能出现)

image-20230509173232054

需要再启动脚本中再加一个参数:

树莓派PI5 ROS1

然后再次运行脚本即可进入容器,并能显示GUI画面。

 

 

5.7、切换车型、雷达和相机

说明:由于ROSMASTER系列机器人分为多款机器人以及多款设备,出厂系统已配置多款设备的例程,但由于无法自动识别产品,所以需要手动设置机器类型和雷达型号。

进入容器后:根据小车的车型,雷达类型和camera的类型做如下修改:

image-20230525093413004

修改完成后,保存退出vim,然后执行:

可以看到当前修改后的小车的车型,雷达类型和camera的类型

 

机器人项目文件存放在如下目录:

 

5.8、多终端进入同一个docker容器

 

1、在上面的步骤中已经开启了一个docker容器,可以在宿主机(小车)上打开另一个终端查看:

image-20230423182207793

2、现在在这个新打开的终端中进入该docker容器:

image-20230423182446607

成功进入容器,还可以再打开无数个终端进入该容器。

机器人项目文件存放在如下目录:

 

3、注意:

(1)执行2步骤中的命令时要确保容器处于开启【UP】状态

image-20230423182959239

(2)如果容器处于【Exited】关闭状态,请参见下面1.6步骤操作

image-20230423183116348

 

 

5.9、如何开启已经处于【Exited】关闭状态的容器

 

这里分两种情况:还需要使用摄像头 和 不再需要使用摄像头

 

5.9.1、需要使用摄像头

首先需求根据上面【5.3、查看外设连接情况】步骤中的指引,查看AstraPro Plus相机的端口有没有改变。

1、如果Astra Pro相机的端口改变,那无法再次进入该容器。

(1)如果该容器中有一些修改需要保留,可以参考如下命令生成一个新的镜像,

(2)如果没有修改需要保留,那直接参见本章节【5.2 到 5.5】步骤执行进入容器。

 

2、如果AstraPro Plus相机的端口没有改变,那直接参见【5.7.3、再次进入【Exited】关闭状态的容器】步骤执行。

 

5.9.2、不需要使用摄像头

直接参见【5.7.3、再次进入【Exited】关闭状态的容器】步骤执行。

 

 

5.9.3、再次进入【Exited】关闭状态的容器

在 docker的宿主机上【即小车,可在VNC上面或者在小车屏幕上】打开终端

注意:这里必须是在小车的VNC上面或者在小车屏幕上执行,不可在通过ssh远程进入的小车终端(如通过MobaXterm进入的小车终端)中执行,否则可能容器中无法显示GUI图像,当然如何您不需要显示GUI图像,那就可以。

1、首先查看容器的状态

2、开启GUI访问权限

3、开启容器【这里容器的ID是可以简写的,只要能够唯一识别当前已经存在的容器即可】

4、再次进入该容器

5、打开rviz查看是否已经能够开启GUI画面

6、具体执行如下: