跨计算机向ROS节点发送数据遇连接拒绝问题求助
ROS跨计算机通信:连接拒绝问题解决指南
前置必做要求
1. 安装并运行rosbridge_server
roslibrust依赖rosbridge的WebSocket接口实现与ROS的通信,无论本地还是跨机通信都必须部署:
- 安装(替换
<ros_version>为你的ROS版本,如melodic/noetic):sudo apt-get install ros-<ros_version>-rosbridge-server - 启动时需绑定所有IP(避免仅监听localhost),并指定与代码一致的端口(你代码中用的是9080):
注意:启动前要确保ROS Master(roslaunch rosbridge_server rosbridge_websocket.launch address:=0.0.0.0 port:=9080roscore)已经在服务器端运行。
2. 确保网络互通
- 两台机器处于同一局域网,互相能ping通对方IP
- 关闭服务器端防火墙,或开放对应端口(如9080):
sudo ufw allow 9080/tcp
IP地址与环境变量配置
服务器端(运行ROS与rosbridge的机器)
- 设置ROS环境变量(临时生效,可写入
~/.bashrc永久生效):export ROS_IP=<服务器局域网IP> # 例如192.168.1.100 export ROS_MASTER_URI=http://<服务器局域网IP>:11311 - 按上述要求启动rosbridge_server。
客户端(运行Rust代码的机器)
- 设置ROS环境变量:
export ROS_MASTER_URI=http://<服务器局域网IP>:11311 - 修改Rust代码中的WebSocket连接地址,将
localhost替换为服务器的局域网IP:// 示例:替换为服务器IP 192.168.1.100 let client = ClientHandle::new("ws://192.168.1.100:9080").await?;
常见问题排查
- 端口不一致:代码中用9080,rosbridge启动时必须指定
port:=9080,默认端口是9090 - ROS环境变量未正确设置:服务器端必须设置
ROS_IP,客户端必须指向正确的ROS_MASTER_URI - 防火墙拦截:检查服务器端是否允许客户端IP访问指定端口
内容的提问来源于stack exchange,提问作者Ankit Kumar
相关产品推荐
相关产品推荐

