pantor / ros-control-center

A web-based control center for ROS robots.
https://pantor.github.io/ros-control-center
BSD 3-Clause "New" or "Revised" License
265 stars 71 forks source link

call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details], #31

Open ENGINEERDK opened 4 years ago

ENGINEERDK commented 4 years ago

Hi all,

I am running with Melodic, and whenever I run full navigation stack, getting errors- call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details], call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_params],

But when I run only few nodes like teleop and laser, The communication happens properly with no error.

Please help me resolve the issue.

Output terminal- `ROS_MASTER_URI=http://localhost:11311

setting /run_id to 3297cf20-474a-11ea-a1a5-00044be6ab59 process[rosout-1]: started with pid [6596] started core service [/rosout] process[rosbridge_websocket-2]: started with pid [6615] process[rosapi-3]: started with pid [6616] 2020-02-04 18:01:03+0530 [-] Log opened. 2020-02-04 18:01:04+0530 [-] registered capabilities (classes): 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.call_service.CallService 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.advertise.Advertise 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.publish.Publish 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.subscribe.Subscribe 2020-02-04 18:01:04+0530 [-] - <class 'rosbridge_library.capabilities.defragmentation.Defragment'> 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.advertise_service.AdvertiseService 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.service_response.ServiceResponse 2020-02-04 18:01:04+0530 [-] - rosbridge_library.capabilities.unadvertise_service.UnadvertiseService 2020-02-04 18:01:04+0530 [-] WebSocketServerFactory starting on 9090 2020-02-04 18:01:04+0530 [-] Starting factory <autobahn.twisted.websocket.WebSocketServerFactory object at 0x7f8a66fb10> 2020-02-04 18:01:04+0530 [-] [INFO] [1580819464.356033]: Rosbridge WebSocket server started at ws://0.0.0.0:9090 2020-02-04 18:01:04+0530 [-] [INFO] [1580819464.800441]: Client connected. 1 clients total. 2020-02-04 18:01:04+0530 [-] [INFO] [1580819464.807886]: Client disconnected. 0 clients total. 2020-02-04 18:01:04+0530 [-] [INFO] [1580819464.888590]: Client connected. 1 clients total. 2020-02-04 18:01:06+0530 [-] [INFO] [1580819466.085559]: [Client 1] Subscribed to /rosout 2020-02-04 18:01:10+0530 [-] [INFO] [1580819470.185621]: [Client 1] Subscribed to /rosout 2020-02-04 18:01:55+0530 [-] [INFO] [1580819515.527915]: [Client 1] Subscribed to /rosout 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.650998]: [Client 1] [id: call_service:/rosapi/node_details:268] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.656324]: [Client 1] [id: call_service:/rosapi/node_details:270] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.660804]: [Client 1] [id: call_service:/rosapi/node_details:269] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.721723]: [Client 1] [id: call_service:/rosapi/get_param:273] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.819669]: [Client 1] [id: call_service:/rosapi/get_param:286] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.835576]: [Client 1] [id: call_service:/rosapi/get_param:289] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.843575]: [Client 1] [id: call_service:/rosapi/get_param:287] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.857521]: [Client 1] [id: call_service:/rosapi/get_param:288] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005] 2020-02-04 18:02:00+0530 [-] [ERROR] [1580819520.860114]: [Client 1] [id: call_service:/rosapi/get_param:290] call_service ROSServiceIOException: Unable to communicate with service [/rosapi/get_param], address [rosrpc://192.168.0.101:36005]

`

call_service ROSServiceIOException: Unable to communicate with service [/rosapi/node_details]

mikem419 commented 4 years ago

Does anyone else have any feedback on this? I have uninstalled python-twisted, tornado and bson and re-installed the rosbridge_suite with no success.

I do not have this problem when I run in advanced mode. I am able to see all topics/services/params, but it is far too cluttered. As a test, I changed one topic to upper case and turned off advanced mode. When I do that, I get the error mentioned above.

newten82 commented 4 years ago

Although this error is specifically caused by getNodes function in dashboad.ts, this problem is with getNodes, getServices, getParams, and getTopics all call rxjs Observable.forkJoin. This essentially bundles up all the services, parameters, topics, nodes observable's in getData and requests them all from the rosbridge_server in parallel when the observable subscribe is called in getData. So If you have more then 40 items or so it tends to overwhelm rosbridge_server.

The easiest solution is to set "topics_glob", "services_glob", "params_glob" parameters in the rosbridge launch file to limit what you expose to ros-control-center. By default these parameters are set to expose everything. Unfortunately you can't filter nodes so the getNodes may still fail if you have too many other topics, services, or parameters exposed.

The more robust solution is call the rxjs observable's in sequence or bundles. This will prevent the rosbridge_server from being overwhelmed.