写在前头:在网上查了docker间通讯的一堆帖子。。。写的都很复杂。。其实只需要在生成容器的时候共享主机ip和端口就行了。。。生成的镜像可以实现ros多机通讯以及rviz可视化(没试过gezabo),后续测试。。。

目录

1.前提

两个安装有ros的docker Linux主机(如果没有,最好搞个有nvidia-docker的)

确保两个主机在局域网内且ping的通 ,使用以下命令查看局域网内ip

2.创建容器

   1.在终端运行以下命令先查看当前镜像名字                

  2.用当前的ros镜像创建一个容器(container)

3.启动生成的容器

4.接下来就可以生成小乌龟咯!!

 3.ROS分布式通讯设置

  1.分别在两个容器中使用ifconfig,如果没有ifconfig命令就安装net-tools

2.修改bashrc,配置主从机ip

3.ROS分布式通讯测试

 有任何不清楚的地方请评论区找我哟!!


 

ps:主机为树莓派,从机为电脑,都为noetic版本。话不多说各位同志们往下看!!

1.前提

  1. 两个安装有ros的docker Linux主机(如果没有,最好搞个有nvidia-docker的)

  2. 确保两个主机在局域网内且ping的通 ,使用以下命令查看局域网内ip

arp -a

d16f489ab5904b0cb549ea52417b361e.png

  3.

2.创建容器

   1.在终端运行以下命令先查看当前镜像名字                

docker images

会显示系统当前安装的所有镜像以及imageID,复制imageID 3cd1354755374684aed947219690c653.png

  2.用当前的ros镜像创建一个容器(container)

        参考文档:
VScode结合docker的ROS开发环境配置_docker ros开发 vscode-CSDN博客文章浏览阅读1.8k次。目录软件安装VSCODEdockerdocker image构建与运行VSCODE配置ROS插件配置clangd配置软件安装VSCODE存在三种安装方式,如下:在vscode官网下载需要的版本直接进行安装。ubuntu下软件中心搜索安装(安装最简便,推荐):使用apt安装:wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -sudo add-apt-repository "d_docker ros开发 vscodehttps://blog.csdn.net/liu3612162/article/details/122878748如何在docker内运行ROS2(dashing)的“小乌龟(turttlesim)”_docker 中 运行 ros 小乌龟-CSDN博客文章浏览阅读4.4k次。如何在docker内运行ROS2(dashing)的“小乌龟(turttlesim)”文章目录如何在docker内运行ROS2(dashing)的“小乌龟(turttlesim)”前置条件deb安装turttlesim源码安装turttlesim运行turttlesim关于docker方法一:需重新启动一个新的容器开放权限(在主系统)启动docker可视化方法二:不需要重新启动新的容器分别查看主机与docker的ip地址在docker内在主机注意测试是否可以显示图像测试是否可以显示图像前置条件首先需要_docker 中 运行 ros 小乌龟https://blog.csdn.net/qq_29935433/article/details/106194487先在容器外执行:
     安装X11 让容器可以在宿主机显示图像及rviz               

#允许所有用户,包括docker,访问X11 的显示接口
sudo apt-get install x11-xserver-utils
xhost +
#输出为:access control disabled, clients can connect from any host

 之后就可以开始生成容器(container)咯!!

#添加选项
 --network host       \                       #可使开启的容器与宿主机共享IP和端口
-v /tmp/.X11-unix:/tmp/.X11-unix \           #共享本地unix端口
 -e DISPLAY=unix$DISPLAY \                    #修改环境变量DISPLAY
 -e GDK_SCALE \                               #我觉得这两个是与显示效果相关的环境变量,没有细究
 -e GDK_DPI_SCALE \

 最终生成容器命令示例(请将镜像名字替换为自己的)

sudo docker run -d -it --network host  -v /etc/localtime:/etc/localtime:ro   -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=unix$DISPLAY   -e GDK_SCALE   -e GDK_DPI_SCALE   fishros2/ros:noetic-desktop-full /bin/bash

3.启动生成的容器

docker ps -a #查看本机存在的镜像及names

docker container start <names> #启动容器

docker exec -it <names> /bin/bash #进入容器

4.安装并生成小乌龟测试!!

sudo apt update
sudo apt install ros-<version>-turtlesim       #如果没有turtlesim,就安装个

 3.ROS分布式通讯设置

  1.分别在两个容器中使用ifconfig,如果没有ifconfig命令就安装net-tools

b11c70efa9594622bd3994af3833b9d3.png   此时应该有显示宿主机的ip,宿主机网络共享成功

2.修改bashrc,配置主从机ip

cd ~
vim .bashrc

主机:

export ROS_MASTER_URI=http://<主机ip>:11311
export ROS_HOSTNAME=<主机ip>

从机:

export ROS_MASTER_URI=http://<主机ip>:11311
export ROS_HOSTNAME=<从机ip>

记得source哦!

3.ROS分布式通讯测试

主机:

roscore

从机:

rostopic list  #查看是否有/rosout话题

rosrun turtlesim turtlesim_node

从机再开个终端进入容器:

docker exec -it <names> /bin/bash #进入容器
rosrun turtlesim turtle_teleop_key #启动键盘控制乌龟

  或者:

rosservice list #查看是否有spawn服务。
rosservice call /spawn #使用tab补齐测试是否能够连接master

 有任何不清楚的地方请评论区找我哟!!

 

 

 

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐