ROS Kinetic:工作站发布数据机器人无法接收问题求助
ROS Kinetic跨设备通信问题排查与解决
核心问题现象
工作站(Ubuntu 16.04 + ROS Kinetic)向机器人(Ubiquityrobot镜像Ubuntu 16.04 + ROS Kinetic)发布rostopic时,机器人仅能识别topic名称,但无法接收实际数据;反向(机器人发→工作站收)通信完全正常。已关闭防火墙,roswtf检测到节点间无法建立连接。
配置问题分析
从提供的配置细节看,主机名解析不匹配是核心诱因:
- 工作站
.bashrc中声明ROS_HOSTNAME=$(hostname).local,即自身ROS节点对外暴露的地址是maisa-K53E.local; - 机器人
/etc/hosts中仅映射了10.42.0.201 maisa-K53E,未添加.local后缀,导致机器人无法正确解析工作站的ROS节点地址——ROS Master仅同步了topic元信息,但机器人找不到发布节点的实际通信端口,因此收不到数据。
修复步骤
1. 修正主机名解析映射(二选一即可)
方案A:调整工作站ROS_HOSTNAME配置
编辑工作站~/.bashrc,将ROS_HOSTNAME改为无.local后缀的主机名,或直接使用固定IP(更稳定):
# 替换原ROS_HOSTNAME行,二选一 export ROS_HOSTNAME=maisa-K53E # 或直接指定IP export ROS_IP=10.42.0.201
修改后执行source ~/.bashrc使配置生效。
方案B:更新机器人hosts文件
编辑机器人/etc/hosts,给工作站主机名添加.local后缀:
10.42.0.201 maisa-K53E maisa-K53E.local
2. 验证双向网络连通性
- 工作站端执行:
ping ubiquityrobot.local,确认能正常收到响应; - 机器人端执行:
ping maisa-K53E(若选方案A)或ping maisa-K53E.local(若选方案B),确认连通正常。
3. 测试通信恢复
- 工作站启动测试发布节点:
rostopic pub /test_topic std_msgs/String "data: 'test_msg'" -r 1 - 机器人端执行:
rostopic echo /test_topic,检查是否能持续收到数据; - 可通过
rosnode info <发布节点名>查看节点连接状态,确认订阅节点已成功建立连接。
4. 补充机器人端ROS环境配置(可选但推荐)
机器人作为ROS Master,建议在~/.bashrc中明确声明Master地址,避免环境变量异常:
export ROS_MASTER_URI=http://localhost:11311 export ROS_IP=0.0.0.0 # 或使用机器人自身IP 10.42.0.1
内容的提问来源于stack exchange,提问作者Shravista Kashyap
相关产品推荐
相关产品推荐

