Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ros_control failed to contact #81

Open
andrei91ro opened this issue Sep 5, 2021 · 0 comments
Open

ros_control failed to contact #81

andrei91ro opened this issue Sep 5, 2021 · 0 comments
Labels
bug Something isn't working

Comments

@andrei91ro
Copy link

andrei91ro commented Sep 5, 2021

Hello,

First of all thumbs UP for open-sourcing Webots and in particular for the ROS integration! 🥇

My problem is that I cannot enable the ros_control integration of Webots to work with any robot other than the Pioneer sample).
I am trying to add cmd_vel support through the use of diff_drive_controller but the ROS side fails to contact the Webots side only for the diff_drive_controller node. Everything else (topics, services) work as expected.

I get errors such as this when running my launch file which is adapted from the Pioneer one and using ros controller for the world used in Tutorial 6: 4-Wheeled Robot

[INFO] [1630803265.662890]: Controller Spawner: Waiting for service controller_manager/switch_controller                     
[INFO] [1630803265.665831]: Controller Spawner: Waiting for service controller_manager/unload_controller                     
[INFO] [1630803265.670367]: Loading controller: robot_diff_drive_controller                                                  
Traceback (most recent call last):                                                                                           
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_base.py", line 562, in connect                           
    self.read_header()                                                                                                       
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_base.py", line 657, in read_header                       
    self._validate_header(read_ros_handshake_header(sock, self.read_buff, self.protocol.buff_size))                          
  File "/opt/ros/noetic/lib/python3/dist-packages/rosgraph/network.py", line 357, in read_ros_handshake_header               
    d = sock.recv(buff_size)                                                                                                 
ConnectionResetError: [Errno 104] Connection reset by peer                                                                   
                                                                                                                             
During handling of the above exception, another exception occurred:                                                          
                                                                                                                             
Traceback (most recent call last):                                                                                           
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_service.py", line 509, in call                           
    transport.connect(dest_addr, dest_port, service_uri)                                                                     
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_base.py", line 589, in connect                           
    raise TransportInitError(str(e)) #re-raise i/o error                                                                     
rospy.exceptions.TransportInitError: [Errno 104] Connection reset by peer                                                    
                                                                                                                             
During handling of the above exception, another exception occurred:                                                          
                                                                                                                             
Traceback (most recent call last):                                                                                           
  File "/opt/ros/noetic/lib/controller_manager/spawner", line 212, in <module>                                               
    if __name__ == '__main__': main()                                                                                        
  File "/opt/ros/noetic/lib/controller_manager/spawner", line 190, in main                                                   
    resp = load_controller(name)                                                                                             
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_service.py", line 442, in __call__                       
    return self.call(*args, **kwds)                                                                                          
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_service.py", line 512, in call                           
    raise ServiceException("unable to connect to service: %s"%e)                                                             
rospy.service.ServiceException: unable to connect to service: [Errno 104] Connection reset by peer                           
[INFO] [1630803265.967798]: Shutting down spawner. Stopping and unloading controllers...                                     
[INFO] [1630803265.969545]: Stopping all controllers...                                                                      
[WARN] [1630803265.972946]: Controller Spawner error while taking down controllers: unable to connect to service: [Errno 111]
 Connection refused                                                                                                          
[controller_spawner-2] process has died [pid 1348, exit code 1, cmd /opt/ros/noetic/lib/controller_manager/spawner robot_diff
_drive_controller __name:=controller_spawner __log:=/home/user/.ros/log/ce532610-0de3-11ec-b206-0242ac110002/controller_spawn
er-2.log].                                                                                                                   
log file: /home/user/.ros/log/ce532610-0de3-11ec-b206-0242ac110002/controller_spawner-2*.log   

Also, if I try to call a controller related service such as list_controllers I also get a communication error:

$  rosservice call /controller_manager/list_controllers
ERROR: Unable to communicate with service [/controller_manager/list_controllers], address [rosrpc://webots_ros:48629]

I have tried adding a respawn=True to the controller part but there is no change.
On the Webots side the controller seems to be working fine

[ INFO] [1630803265.390873175]: Robot's unique name is robot.
[ INFO] [1630803265.407668736]: The controller is now connected to the ROS master.

I have attached my launch script and associated Webots world (the sample world where I modified the controller to ros and set the specific controller_args identical to those in the Pioneer sample)

diff_drive_robot_launch.txt
tutorial_wbt.txt

I have also attached the node, topic, param and service lists if they are of any use.
node.txt
topic.txt
service.txt
param.txt

@BenjaminHug8 BenjaminHug8 added the bug Something isn't working label Feb 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Development

No branches or pull requests

2 participants