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

时间:2020-04-01 09:15:13

标签: websocket ros

在本教程之后,我已经使用roslaunch rosbridge_server rosbridge_websocket.launch创建了一个简单的HTML页面来控制模拟的Gazebo Turtlebot的运动。

但是,在HTML页面(F12)的Web控制台中,它显示错误“ Firefox无法在ws:// localhost:9090 /建立与服务器的连接”。我正在为websocket(9090)使用默认的rosbridge。在终端机中,我还收到错误消息:

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

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

有人对我如何解决此问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

现在您已经启动并运行了这些程序,您需要提供html / javascript文件(例如 simple.html )并启动服务等。例如,您可以提供使用SimpleHTTPServer来实现simple.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)。