本文主要是介绍[ROS 系列学习教程] 工作空间覆盖与多机通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ROS 系列学习教程(总目录)
本文目录
- 一、工作空间覆盖
- 二、ROS分布式多机通信
- 2.1 保证计算机之间网络可连接
- 2.2 配置host文件
- 2.3 配置ROS环境变量
一、工作空间覆盖
ROS开发过程中,可能同时开发多个项目,或开发项目的工作空间和已有的工作空间重名。比如有两个工作空间ws1
和ws2
,他们中都有名为pkg
的包,系统在搜索 pkg
时,要搜索哪个包呢?
ROS 会解析 ~/.bashrc
文件,并生成 ROS_PACKAGE_PATH
ROS包路径环境变量,该变量中存储了工作空间的搜索优先级。优先级和 .bashrc
的配置顺序刚好相反,即后配置的优先级更高。
Note:
- 配置工作空间时,要注意覆盖问题
- 当在 .bashrc 文件中配置多个工作空间后,可能出现不在 ROS_PACKAGE_PATH 中生效的情况,此时,可以删除自定义工作空间的 build 与 devel 目录,重新 catkin_make,然后重新 source .bashrc 文件,问题解决。
二、ROS分布式多机通信
ROS是一个分布式系统,同一 ROS Master 可以同时管理分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。
因此,ROS对网络配置有某些要求:
- 所有端口上的所有机器之间必须有完整的双向连接。
- 每台计算机必须通过所有其他计算机都可以解析的名称来广播自己。
配置方法如下:
2.1 保证计算机之间网络可连接
首先要保证多台计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式。
2.2 配置host文件
与ROS2相比,其实ROS1是伪分布式的,它需要有一个 ROS Master 作为中心节点,所以对于多台计算机,需要指定一台作为主机来运行 ROS Master,其余计算机作为从机运行其他节点。
为了让多台计算机互相能够认识对方,需要告诉主机有哪些从机,告诉从机主机是谁。通过配置 /etc/hosts
文件实现,如下:
主机端:
从机1的IP 从机1的计算机名
从机2的IP 从机2的计算机名
从机3的IP 从机3的计算机名
...
从机端:
主机的IP 主机计算机名
2.3 配置ROS环境变量
需要把主机和从机的IP与名字告诉ROS,以便 ROS Master 进行管理。编辑 ~/.bashrc
添加如下内容:
主机端:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP
从机端:
export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP
注意配置完 ~/.bashrc
后, 需要 source
或重启终端使配置生效。
如果,主从机之间可以互相订阅topic或调用service,那么多机通信就配置成功了。
这篇关于[ROS 系列学习教程] 工作空间覆盖与多机通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!