ROS分布式通信

在ROS1中,设置分布式通信涉及主机和从机的IP配置、hosts文件的修改以及ROS环境变量的设定。主机需启动roscore,从机通过配置的域名与主机进行通信。配置包括设置静态IP、更新hosts文件以映射主机名和IP,以及在.bashrc中设置ROS_MASTER_URI和ROS_HOST_NAME。完成配置后,通过roscore和rosrun指令测试通信是否成功。

在ROS1种,分布式通信有主机、从机之分,只有主机启动roscore后才可以通信。

首先将分布式机器连接至同一路由器下。

IP配置

根据网段设置固定IP,防止电脑重启后被重新分配IP,需重新配置文件

设置hosts

在局域网或者是万维网上,主机之间可以通过ip(如IPV4地址:192.168.1.150)地址进行通讯,但出于数字难以记忆,我们使用含义丰富的英文名称(即主机名或域名)来映射该ip,让网络程序直接解析该英文名称进行通信,从而在调用ip时避免记错数字而出错。使用英文名称查询对应ip地址的过程被称为域名解析(将域名映射为IP地址的过程)

cursor给出的回答

 

参考:

(74条消息) /etc/hosts文件修改后如何生效_/etc/hosts 生效_华夏追颖的博客-优快云博客

(74条消息) Linux修改/etc/hosts_linux /etc/hosts include_低调小一的博客-优快云博客

linux环境下/etc/hosts文件详解 - 简书 (jianshu.com)

此处,我们就要在主机和从机上设置其它主机的ip地址,在局域网中根据主机名对应的ip地址进行ROS通信。

# hostname查看并修改(若名称太长不方便使用)
sudo gedit /etc/hostname

# 设置其它分布式电脑IP
sudo gedit /etc/hosts
# 格式为
# ip地址   主机名/域名   (主机别名)
# 具体细节也可以在Ubuntu上man hosts命令查看

 配置完成后需重启网络,重新加载配置文件。

sudo /etc/init.d/dns-clean start
sudo /etc/init.d/networking restart

 配置ROS_HOSTNAME, ROS_MASTER

根据在/etc/hostname和/etc/hosts文件中的配置的域名映射,我们可以直接在进行ROS主机ip和本机ip配置时使用。

sudo gedit ~/.bashrc
# 在末尾加入如下

# 替换主机IP(主机只有一个,所以此处主从机都一样)
export ROS_MASTER_URI=http://hosts文件中设置的主机名:11311  

#替换本机IP(根据本机的主机名配置,所以此处主从机不一样)
export ROS_HOST_NAME=hostname文件中设置的本机名  

修改完后记得
source ~/.bashrc

测试

主机启动:
roscore
新窗口
rosrun turtlesim turtlesim_node


从机启动:
rosrun turtlesim turtle_teleop_key

在从机可以控制主机的小乌龟移动即通信成功

参考:

两个ROS系统进行通信(通过路由器,可上网)_ros通信系统_hhz_999的博客-优快云博客

### ROS 分布式通信与 Gazebo 的集成 #### 1. ROS 分布式通信基础 ROS(Robot Operating System)是一种用于机器人开发的开源框架,支持分布式计算节点之间的消息传递机制。通过其发布/订阅模式以及服务调用功能,可以实现多机器人的协同工作和复杂任务分解[^1]。 在分布式环境中,ROS 提供了多种工具来简化跨计算机的消息交换过程。例如,`roscore` 是整个系统的中心组件,负责管理所有节点间的连接;而 `roslaunch` 则允许用户定义复杂的启动文件,在多个主机上同步部署不同的进程实例。 #### 2. Gazebo 概述及其作用 Gazebo 是一款高性能物理引擎驱动的模拟器,广泛应用于机器人研究领域。它能够创建逼真的三维场景,并提供精确的动力学模型以测试算法性能而不需实际硬件参与。对于希望验证控制策略或者优化感知能力的研究人员来说尤为重要[^2]。 当我们将目光转向更先进的版本即 ROS 2 和 Gazebo 的组合时,“ros_gz_project_template”展示了两者如何无缝协作完成诸如传感器数据处理、路径规划等功能模块的设计与实施。 #### 3. ROS-Gazebo 集成方式 为了使 ROS 能够有效地利用 Gazebo 所提供的强大仿真平台,通常采用以下几种方法: - **插件扩展**:通过编写自定义 C++ 插件并加载至 Gazebo 中,使得特定行为可以直接响应来自 ROS 主题上的命令输入。 - **话题桥接**:建立标准接口让两套体系之间相互理解彼此发送过来的信息包结构形式。比如位置姿态更新频率调整等参数设置可以通过 YAML 文件预先指定好再由程序读取应用上去[^3]。 以下是简单的 Python 示例代码展示如何初始化一个基本的服务客户端向服务器请求目标点坐标值: ```python import rospy from std_srvs.srv import Empty def call_service(): rospy.wait_for_service('/gazebo/reset_simulation') try: reset_sim = rospy.ServiceProxy('/gazebo/reset_simulation', Empty) resp = reset_sim() except Exception as e: print(f"Service did not process request: {e}") if __name__ == "__main__": rospy.init_node('reset_simulation_client_py') call_service() ``` 此脚本的功能是在每次执行完毕之后重置仿真实验环境以便下一轮迭代继续进行下去。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值