Connection à ROS dans un docker depuis localhost
Bonjour,
je me permets de vous posez une question concernant mon installation ros sur docker. Je me suis fait un docker basé sur vos conseils dans lequel j'ai ros qui tourne proprement (j'ai pu publier des topics manuellement avec rostopic et tout fonctionne bien). Je souhaite maintenant développer une page web qui interagit avec ros (qui tourne dans le docker) via rosbridge. Je ne souhaite pas mettre ma page web dans le docker, car je ne veux pas redéployer à chaque modification. Donc j'aurais souhaité m'y connecter avec rosbridge et pour cela je dois spécifier l'adresse et le port de ROS_MASTER_URI et je ne trouve pas les bons paramètres... (Je lance ma page web à partir d'un server tomcat).
Voici quelques élément pour illustrer mon installation:
voici une list des topics en place:
/foiler/motion_controller/engine_rpm_controller/command
/foiler/motion_controller/foil_cantangle_controller/command
/foiler/motion_controller/foil_pullout_controller/command
/foiler/motion_controller/joint_states
/foiler/motion_controller/rudder_angle_controller/command
/foiler/motion_controller/twist
/rosout
/rosout_agg
J'ai lancé la commande du server rosbridge:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| > roslaunch rosbridge_server rosbridge_websocket.launch
PARAMETERS
* /rosapi/params_glob:[*]
* /rosapi/services_glob:[*]
* /rosapi/topics_glob:[*]
* /rosbridge_websocket/address:
* /rosbridge_websocket/authenticate: False
* /rosbridge_websocket/bson_only_mode: False
* /rosbridge_websocket/delay_between_messages: 0
* /rosbridge_websocket/fragment_timeout: 600
* /rosbridge_websocket/max_message_size: None
* /rosbridge_websocket/params_glob:[*]
* /rosbridge_websocket/port: 9090
* /rosbridge_websocket/retry_startup_delay: 5
* /rosbridge_websocket/services_glob:[*]
* /rosbridge_websocket/topics_glob:[*]
* /rosbridge_websocket/unregister_timeout: 10
* /rosbridge_websocket/use_compression: False
* /rosdistro: melodic
* /rosversion: 1.14.3
NODES
/
rosapi (rosapi/rosapi_node)
rosbridge_websocket (rosbridge_server/rosbridge_websocket)
ROS_MASTER_URI=http://localhost:11311
process[rosbridge_websocket-1]: started with pid [2169]
registered capabilities (classes):
- rosbridge_library.capabilities.call_service.CallService
- rosbridge_library.capabilities.advertise.Advertise
- rosbridge_library.capabilities.publish.Publish
- rosbridge_library.capabilities.subscribe.Subscribe
- <class 'rosbridge_library.capabilities.defragmentation.Defragment'>
- rosbridge_library.capabilities.advertise_service.AdvertiseService
- rosbridge_library.capabilities.service_response.ServiceResponse
- rosbridge_library.capabilities.unadvertise_service.UnadvertiseService
process[rosapi-2]: started with pid [2170]
[INFO] [1548667268.143774]: Rosbridge WebSocket server started on port 9090 |
Voici le script js pour me connecter à ros:
Code:
var ros = new ROSLIB.Ros({url : 'ws://172.17.0.2:11311'});
Faut-t-il lancer le server rosbridge sur la machine locale?
J'ai essayer de lancer le container en utilisant l'option pour que l'on soit sur le même réseau et spécifier localhost, mais cela ne change rien.
J'espère que vous avez un peu de temps pour considérer ma demande.
Salutations
Yvus
Nota Bene: Concernant votre tuto, je pense qu'il manque une ligne dans le Dockerfile qui lance le ros_entrypoint.sh à chaque construction
Code:
ENTRYPOINT ["/ros_entrypoint.sh"]