robotics-in-concert / rocon_multimaster

Key components for ros multimaster systems
11 stars 19 forks source link

Refactor gateway logics #309

Closed jihoonl closed 9 years ago

jihoonl commented 9 years ago

It fixes #299.

Tested and working fine.

jihoonl commented 9 years ago

@stonier @piyushk Please review

dwlee commented 9 years ago

When stop rapp is called, following error is happened at waiterbot and master side.

I do not set network latency.

waiterbot

[INFO] [WallTime: 1434359750.286143] Rapp Manager : Stopping rapp 'waiterbot_rapps/pickup_delivery'.
waiterbot_rapps/pickup_delivery
[young/robot_pose_publisher-19] killing on exit
[young/dock_drive-18] killing on exit
[ INFO] [1434359750.374805985]: Unloading nodelet /young/dock_drive from manager /mobile_base_nodelet_manager
[young/docking_interactor-17] killing on exit
[young/move_base-16] killing on exit
[young/navigation_velocity_smoother-15] killing on exit
[young/semantic_navigator-14] killing on exit
[young/amcl-13] killing on exit
[young/localization_manager-12] killing on exit
[ INFO] [1434359750.384557000]: Unloading nodelet /young/navigation_velocity_smoother from manager /mobile_base_nodelet_manager
[young/tracker_manager-11] killing on exit
[young/ar_pair_tracking-10] killing on exit
Traceback (most recent call last):
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/scripts/gateway.py", line 22, in <module>
    gateway.spin()
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/gateway_node.py", line 81, in spin
    self._gateway.spin()
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/gateway.py", line 78, in spin
    self.watcher_thread.start()
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/watcher_thread.py", line 75, in start
    self._gateway.update_flipped_interface(connections, remote_gateway_hub_index)
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/gateway.py", line 146, in update_flipped_interface
    local_connection_index, remote_gateway_hub_index, self._unique_name, self.master)
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/flipped_interface.py", line 93, in update
    new_flips, removed_flips, flipped = self._prepare_flips(connections, remote_gateways, unique_name, master)  # Totally regenerate a new flipped interface, compare with old
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/flipped_interface.py", line 256, in _prepare_flips
    matched_flip_rules = self._generate_flips(connection.rule.type, connection.rule.name, connection.rule.node, remote_gateways, unique_name, master)
  File "/home/yujin/ros/turtlebot/src/rocon_multimaster/rocon_gateway/src/rocon_gateway/flipped_interface.py", line 237, in _generate_flips
    matched_flip.rule.node = "%s,%s"%(node, master.lookupNode(node)) # just in case we used a regex
  File "/opt/ros/indigo/lib/python2.7/dist-packages/rosgraph/masterapi.py", line 433, in lookupNode
    return self._succeed(self.handle.lookupNode(self.caller_id, node_name))        
  File "/opt/ros/indigo/lib/python2.7/dist-packages/rosgraph/masterapi.py", line 154, in _succeed
    raise Error(msg)
rosgraph.masterapi.MasterError: unknown node [/young/tracker_manager]
[young/ar_track_alvar-9] killing on exit
[young/office_waiterbot_state_manager-8] killing on exit
[ INFO] [1434359750.795600175]: Stopping depth stream.
[INFO] [WallTime: 1434359750.799641] TrackerManager : Bye Bye
[young/ir_to_laserscan-6] killing on exit
[young/ir_link_publisher-5] killing on exit
[young/depthimage_to_laserscan-4] killing on exit
[ INFO] [1434359750.890868253]: Unloading nodelet /young/depthimage_to_laserscan from manager camera/camera_nodelet_manager
[INFO] [WallTime: 1434359750.987352] Localization Manager : Bye Bye
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
  what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument
[young/camera/rectify_color-3] killing on exit
[ INFO] [1434359751.086928824]: Unloading nodelet /young/camera/rectify_color from manager camera_nodelet_manager
[young/camera/driver-2] killing on exit
[ INFO] [1434359751.092420465]: Unloading nodelet /young/camera/driver from manager camera_nodelet_manager
[young/camera/camera_nodelet_manager-1] killing on exit
[INFO] [WallTime: 1434359751.431864] Robot State Manager : Bye Bye
[INFO] [WallTime: 1434359752.884904] Rapp Manager : stopped rapp [waiterbot_rapps/pickup_delivery]'.

Master

[WARN] [WallTime: 1434359821.227075] Hub Watcher: gateway young137456f6ae764c958ecb3cea7866f419 has been unavailable for 60 seconds! Marking as unavailable.
[INFO] [WallTime: 1434359822.148881] Conductor : concert client transition [available->missing][young]
jihoonl commented 9 years ago

The last commit should catch the exception

jihoonl commented 9 years ago

Tested enough and confirmed that it works fine.