引言:最近为了学习ros2,不得不搭建一个ros2环境,但由于大家都知道的某些网络原因,下载Ubuntu和ros2着实有点慢,还动不动就报错(其实更多的是不想折腾我那快要退休的笔记本)。于是在一台美国的VPS上使用docker部署了ros2的环境,从拉取镜像到安装桌面环境,再到开启VNC连接上,也就10分钟左右的时间(忽略中途各种踩坑试错,干废了多个容器的艰苦征程),本文用于记录一下安装过程和踩过的坑。
① 准备一台VPS,大带宽的那种,我这里使用的是一台3核2.5G,带宽1 Gbps的VPS:racknerd 洛杉矶(Los Angeles) DC-02数据中心特价VPS
安装完ROS2和桌面环境大致硬盘占用增加了4~5 GB
② 使用docker一键安装脚本安装docker:
curl -sSL https://get.docker.com/ | sh
使用此脚本同时也会安装 docker compose,本文基于docker compose配置docker容器,同样也可使用docker run命令部署容器,请自行转换。
③ 创建一个项目文件夹(我这里创建的是 servers_ros)用于存放所有的docker配置文件,在此文件夹中创建一个ros2
文件夹和一个 docker-compose.yml
文件。ros2文件夹用于存放ros2容器相关的文件。
docker-compose.yml 的内容为(.yml格式对缩进敏感,注意缩进空格数):
这里是使用的 althack/ros2 - Docker Image 提供的镜像,iron 是 ros2 的某个发行版,建议使用 -full 镜像,可以访问这个连接获取更多镜像。这里也做了端口映射和文件挂载,容器中的 my_Proj 目录就是宿主机的 ./ros2 目录。
这个ros2镜像其实就是在Ubuntu镜像中增加了ros2,所以后边介绍的docker容器桌面环境的搭建同样也适用于 Ubuntu 容器。
④ cd 到项目文件夹,使用 docker compose 命令启动容器:
docker compose up -d
进入ros2容器:
docker exec -it ros2 bash
安装桌面环境:
apt update
apt install nano xorg xfce4 tightvncserver
其中,nano 是一个文本编辑器,xorg 是 xfce4 桌面的依赖,tightvncserver 是一个VNC服务器
注:只能安装xfce4桌面,踩坑了多个桌面环境,只有这个能在docker容器中使用,其他的灰屏,无法加载桌面,只显示鼠标,甚至鼠标是一把×
创建一个新用户(非root用户,普通用户)用于VNC登录:
useradd -m caq98i
passwd caq98i
切换到用户caq98i:
su caq98i
启动VNC服务器并完成初始配置:
vncserver
首次执行该命令后,系统会要求你设置一个安全密码并确认(密码长度不能超过8个字符,建议6-8个字符)并创建初始配置文件。
参考资料:Linux(Debian系统)配置VNC远程桌面访问——使用TightVNC建立VNC服务器
关闭运行在 5901
端口上的VNC服务:
vncserver -kill :1
修改 xstartup
配置文件,可以使用 nano、vim 等文本编辑软件打开它(下面是使用 nano打开的):
nano ~/.vnc/xstartup
打开文件后,在最后一行添加:
startxfce4 &
这里的 startxfce4 &
是告诉 VNC 服务器启动 xfce 桌面环境。
注:nano 文本编辑器的使用:编辑完成后使用 CTRL + X 退出,然后它会询问你是否保存,按 Y 确认,最后按 Enter;vim编辑器的使用可以参阅:Linux系统中最常用的文本编辑器:Vim使用入门
再次启动vnc服务:
vncserver
至此,服务端就搭建完毕了,接下来可以使用 VNC 客户端连接(比如RealVNC)。参考:Linux桌面系统配置VNC远程桌面访问——使用VPS商家提供的VNC连接(第二部分)
本文的 docker compose 配置文件中也做了ssh的端口映射,可用于配置ssh连接ros2容器,可参考:Linux系统安装SSH并启动SSH连接
使用VNC登录远程桌面后,在桌面环境中启动的终端默认是sh,需要执行bash命令进入bash后才能使用下面这条命令配置 ros2 的环境变量:
source /opt/ros/iron/setup.bash
这里的 iron 视不同的ros2发行版而不同,可以 cd 到 /opt/ros/ 目录下看看。
也可以将配置环境变量的的指令写入"~/.bashrc“文件,那么每次新启动bash时就不需要在手动配置环境了:
echo "source /opt/ros/iron/setup.bash" >> ~/.bashrc
关于VNC连接后,无法复制粘贴的问题:
可以尝试在ros2容器中安装 autocutsel解决:
apt install autocutsel
然后,修改 ~/.vnc/xstartup,在启动桌面环境命令的上一行添加:
autocutsel -fork
最后,重启VNC服务端即可:
vncserver -kill :1
vncserver
重新登录桌面后,可能在终端中还是不能使用复制粘贴,这时只需要去文件系统里边,随便找个文件或文件夹右键后点击“Copy”激活一下。
关于 RealVNC Viewer 的下载与使用,可以参考:
Linux桌面系统配置VNC远程桌面访问——使用VPS商家提供的VNC连接
关于 RealVNC Viewer 连接后可能出现的花屏问题,可以参考:
关于使用SSH连接ros2容器的问题:
本案例中,已经通过端口映射将宿主机的7023端口映射到了ros2容器的22端口(SSH的默认端口),仅需在ros2容器中安装ssh服务端即可使用任意ssh连接工具连接上这个ros2容器。
捐赠通道,感谢!🦀🦀