无法使用 rosbridge 建立与 Web 服务器的连接

Can't establish connection to Web Server using rosbridge

我创建了一个简单的 HTML 页面来控制模拟 Gazebo Turtlebot 的移动,使用 roslaunch rosbridge_server rosbridge_websocket.launch 按照本教程进行操作。

但是,在 HTML 页面 (F12) 的 Web 控制台中显示错误 "Firefox cant establish a connection to the server at ws://localhost:9090/." 我正在为 websocket(9090) 使用默认的 rosbridge。在终端中我也收到错误:

[-] WebSocket 打开握手失败('WebSocket 连接被拒绝:来源 'null' 不允许')

[-] 丢弃与对等 tcp4:127.0.0.1:41290 的连接,abort=False:WebSocket 连接被拒绝:来源 'null' 不允许。

有人对我如何解决这个问题有什么建议吗?

鉴于您已遵循 ROS 教程并创建了 HTML 文件,如 Ros Bridge tutorial 所示,那么您必须 运行:

  • runcore
  • rosrun rospy_tutorials add_two_ints_server
  • roslaunch rosbridge_server rosbridge_websocket.launch

现在你已经准备好了 运行ning,你需要提供 html/javascript 文件(例如 simple.html)并开始服务等。例如,您可以使用 SimpleHTTPServersimple.html 提供服务,请参见下面的示例(例如 simplehttpserver_test.py):

#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):    
    def do_GET(self):    
        if self.path == '/':
            self.path = '/simple.html'            
        return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)        

Handler = MyRequestHandler
server = SocketServer.TCPServer(('127.0.0.1', 9089), Handler)    
server.serve_forever() 

一旦你 运行 simplehttpserver_test.py 你可以在 127.0.0.1:9089 打开浏览器并且你应该能够让它工作。

请注意,SimpleHTTPServer 提供当前目录及以下目录中的文件,直接将目录结构映射到 HTTP 请求,这意味着 simple.html 应该在与 simplehttpserver_test.py 相同(或更低)的目录中。最后,simplehttpserver_test.py 的端口应不同于 Rosbridge WebSocket 服务器 的端口(例如默认为 9090)。