配置ROS的Docker环境

配置ROS的Docker环境

目标

  • 配置ROS1和ROS2两个独立的Docker环境
  • 在本地显示服务器上ros docker容器内的GUI应用,例如rqt、rviz等
  • 从本地可以直接ssh登录到服务器的ROS容器内
  • 将服务器的某一目录挂载到容器内,方便文件传输
  • 暴露ROS端口,以从外部连接容器内节点

方法一

1. 从OSRF获取带桌面版的ROS镜像

网址:https://hub.docker.com/r/osrf/ros/tags?page=1&ordering=last_updated

docker pull osrf/ros:noetic-desktop-full-focal  # ros-noetic ubuntu20.02
docker pull osrf/ros:galactic-desktop  # ros-galactic

2. Xshell 和 Xmanager准备

  1. 为了能在本地显示服务器上docker容器内的GUI应用,Xshell连接时需要勾选X11转移,并打开Xmanager -Passive,以接收服务器传过来的界面

在这里插入图片描述

3. 创建容器

export DISPLAY=本地ip:0.0
docker run -it \  交互
		   --name ros-noetic-container \
		   --privileged \  # root权限:包括设备权限
		   -v /tmp/.X11-unix:/tmp/.X11-unix \  # 映射显示服务节点
		   -e DISPLAY=$DISPLAY \  # 配置显示参数 本地ip:0.0
		   -v $HOME/noetic_dir:/root/noetic_shared  \ # 共享目录
		   osrf/ros:noetic-desktop-full-focal  \ # 官方镜像
		   /bin/bash	   

4. 设置使得本地可直接ssh登录到容器内

  1. 修改容器的root密码:passwd, 输入新的密码,例如:123

  2. 安装vim: apt-get update, apt-get install vim -y

  3. 安装容器的openssh-server,输入 apt-get install openssh-server -y

  4. 成功安装后,vim /etc/ssh/sshd_config,修改下面两个配置

    PermitRootLogin yes
    UsePAM no

  5. 启动ssh服务,service ssh start

  6. 退出容器,输入exit,然后输入docker ps -a,查看容器的ID

  7. 提交容器成为新的镜像,例如叫做ros-noetic-ssh,docker commit 容器ID ros-noetic-ssh

  8. 启动这个镜像的容器,并映射本地的一个闲置的端口(例如10000)到容器的22端口,并启动容器的sshd

    docker run -d --name ros-noetic-container --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME/noetic_dir:/home/noetic_shared -p 10000:22 ros-noetic-ssh /usr/sbin/sshd -D
    
  9. 至此就可以xshell远程用服务器ip和10000号端口直接访问容器,同时服务器目录$HOME/noetic_dir也挂载到容器/home/noetic_shared中了

5. 本地显示容器内GUI app

# 安装(服务器和容器内)
sudo apt install xserver-xorg x11-xserver-utils
# (可选)许可所有用户都可以访问xserver
xhost +
# 设置服环境变量转发X11到本机 (服务器和容器内)
export DISPLAY=本机ip地址:0.0  # 写入~/.bashrc中
# vim ~/.bashrc 加入以下:
export DISPLAY=10.103.13.225:0.0
export ROS_DISTRO=noetic
source /ros_entrypoint.sh

6. commit镜像

docker commit 容器ID ros-noetic-ssh  # galactic同理

方法二

上述方法可以保证不同容器是隔离的。为了暴露容器内ROS节点端口,可采用以下方法

1. 用--net=host创建容器,和宿主机共用网络,不再需要映射端口:

docker run -it --name ros-galactic-container --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME/galactic_dir:/root/galactic_shared --net=host ros-galactic-ssh /bin/bash  # 这里使用了上一方法中commit后的镜像:安装了openssh,且能本地显示容器内GUI

2. 进入容器,修改ssh端口号

vim /etc/ssh/sshd_config
Port=10001 

3. 退出容器,后台启动容器,远程ssh登录容器

docker exec -d ros-galactic-container /usr/sbin/sshd -D
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值