ROS分布式通信(可以查看话题但主机接受不到从机传输的消息)

提示:想要将nano上的传感器数据发回pc端从机进行计算,但是pc端计算完后发布话题,nano上的主机可以查看到这个话题但却收不到消息(已经在主机配置好相应的消息类型)


前言

提示:在ros进行分布式通信,已经主从机ip分别写入主从机的hosts文件,并且配置号bashrc,但还是出现ros主机收不到从机节点消息 :

我这里是jeston nano作为ros主机,pc机作为从机。
参考:
https://blog.csdn.net/qq_38441692/article/details/98205852


提示:以下是本篇文章正文内容,下面案例可供参考

一、主从机ip和用户名

分别在主从机终端输入下面命令可以查看hostname和ip

hostname

这里查到的主机端为jeston ip:192.168.0.98

ifconfig

这里查到的从机端为hc ip:192.168.0.240

二、配置hosts文件

1.在主从机上配置host信息

系统会先检查自己的hosts文件中是否有相关的地址映射,如果有就调用这个ip,如果没有再向已知的DNS服务器提出域名解析。

分别在主机和从机上更改hosts文件(主机和从机都要设置):

sudo gedit /etc/hosts

在hosts文件添加hostname和ip

192.168.0.98 jeston
192.168.0.240 hc

2.配置.bashrc

打开主机的.bashrc文件配置如下:

export ROS_MASTER_URI=http://jeston:11311
export ROS_HOSTNAME=hc
export ROS_IP=hc

打开从机的.bashrc文件配置如下:

export ROS_MASTER_URI=http://jeston:11311
export ROS_HOSTNAME=jeston
export ROS_IP=hc

在这里我本来的配置是两个.bashrc中直接写ip地址,但是还是不能接受消息,然后为改成了写用户名,就成功了,可能是虚拟机和实机的网络设置不同把。

其中ROS_IP的作用是:
当你需要2台以上ROS机器互相通信时,就需要将其中一台选为master,其余的作为slave,然后仅在master上运行roscore
那么slave怎么知道master的IP和端口号呢?通过ROS_MASTER_URI获取,但是,如果master或某个slave是多网卡的机器,ROS怎么知道该用哪个网卡跟其他主机通信呢?通过ROS_IP获取!
什么意思?一个IP最多对应一个网卡,所以指定IP就能指定网卡。通过ROS_IP,ROS可以不管每台ROS机器上到底有多少网卡,也不管每个网卡到底是什么网段,它只使用ROS_IP指定网卡作为通讯链路。


遇到的问题

我现在的pc端的ip是192.168.0.240,然后.bashrc配置为

export ROS_MASTER_URI=http://192.168.0.240:11311
export ROS_HOSTNAME=192.168.0.240
export ROS_IP=192.168.0.240

但是这样配置我并不能运行我的roscore,在网上看到使用localhost的却可以成功,有点不太理解。

但我在设置好hosts文件后将.bashrc文件配置为

export ROS_MASTER_URI=http://hc:11311
export ROS_HOSTNAME=hc
export ROS_IP=hc

这样的配置能够在pc端于运行roscore,为什么直接写ip地址却不能运行呢?

### 回答1: 如果 ROS 主机发送的 topic 消息从机收不到,需要检查以下几点: 1. 确保主机从机在同一个网络中。 2. 确保主机从机ROS_MASTER_URI 设置正确。 3. 确保主机从机上的 topic 名称相同。 4. 确保主机从机上的 topic 类型相同。 5. 确保主机已经发布了该 topic。 6. 确保从机已经订阅了该 topic。 7. 如果仍然无法解决问题,可以尝试在终端上运行 rostopic list 和 rostopic echo 来检查 topic 的发布和订阅状态。 ### 回答2: 如果ROS主机发送topic消息从机收不到,可以按照以下步骤进行处理: 1. 检查网络连接:首先确保主机从机之间的网络连接是正常的,如果网络连接出现问题,需要解决网络问题才能正常通信。 2. 检查topic名称和消息类型:确保主机发送的topic名称和消息类型与从机的订阅名称和消息类型一致。如果不一致,从机将无法收到对应的消息。 3. 检查主机从机ROS节点是否在同一个ROS网络中:确认主机从机ROS节点在同一个ROS网络中,可以使用命令`rosnode info`来检查节点信息。 4. 检查主机从机ROS Master URI是否配置正确:确保主机从机ROS Master URI已正确配置。可以通过设置环境变量`ROS_MASTER_URI`来设置ROS Master的URI地址。 5. 检查主机从机是否在同一个ROS主题命名空间中:如果使用了命名空间来组织主题,确保主机从机都在相同的命名空间中,这样才能正确订阅和发布主题。 6. 检查从机的订阅代码:查看从机的订阅代码,确保订阅的主题名称和消息类型与主机发送的消息一致。同时检查是否正确调用了`rospin`等用于订阅主题的函数。 7. 检查主机从机的时间同步:ROS系统对时间同步要求较高,建议使用ntp服务等方法确保主机从机的时间同步,以避免因时间不同步导致的通信问题。 8. 检查主机从机的防火墙设置:有时防火墙设置可能会阻止ROS消息通信,可以尝试关闭或修改防火墙的设置,确保ROS消息能够正常通过。 如果按照上述步骤进行检查仍未解决问题,可以根据具体情况进一步调试或咨询ROS社区寻求帮助。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值