Package node_manager_fkie :: Module rosout_listener
[frames] | no frames]

Source Code for Module node_manager_fkie.rosout_listener

 1  # Software License Agreement (BSD License) 
 2  # 
 3  # Copyright (c) 2012, Fraunhofer FKIE/US, Alexander Tiderko 
 4  # All rights reserved. 
 5  # 
 6  # Redistribution and use in source and binary forms, with or without 
 7  # modification, are permitted provided that the following conditions 
 8  # are met: 
 9  # 
10  #  * Redistributions of source code must retain the above copyright 
11  #    notice, this list of conditions and the following disclaimer. 
12  #  * Redistributions in binary form must reproduce the above 
13  #    copyright notice, this list of conditions and the following 
14  #    disclaimer in the documentation and/or other materials provided 
15  #    with the distribution. 
16  #  * Neither the name of Fraunhofer nor the names of its 
17  #    contributors may be used to endorse or promote products derived 
18  #    from this software without specific prior written permission. 
19  # 
20  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
21  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
22  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
23  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
24  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
25  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
26  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
27  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
28  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
29  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
30  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
31  # POSSIBILITY OF SUCH DAMAGE. 
32   
33  from python_qt_binding.QtCore import QObject, Signal 
34  from rosgraph_msgs.msg import Log 
35   
36  import rospy 
37   
38   
39 -class RosoutListener(QObject):
40 ''' 41 A class to receive the ROS master state updates from a ROS topic. The topic 42 will be determine using U{master_discovery_fkie.interface_finder.get_changes_topic()<http://docs.ros.org/kinetic/api/master_discovery_fkie/html/modules.html#interface-finder-module>}. 43 ''' 44 rosinfo_signal = Signal(Log) 45 roswarn_signal = Signal(Log) 46 roserr_signal = Signal(Log) 47 rosfatal_signal = Signal(Log) 48
49 - def registerByROS(self):
50 ''' 51 This method creates a ROS subscriber to received the notifications of ROS 52 Logs. The retrieved messages will be emitted as *_signal. 53 ''' 54 self.sub_rosout = None 55 rospy.loginfo("listen for logs on %s", '/rosout') 56 self.sub_rosout = rospy.Subscriber('/rosout', Log, self._on_log)
57
58 - def stop(self):
59 ''' 60 Unregister the subscribed topic 61 ''' 62 if hasattr(self, 'sub_rosout'): 63 self.sub_rosout.unregister() 64 del self.sub_rosout
65
66 - def _on_log(self, msg):
67 ''' 68 The method to handle the received Log messages. 69 @param msg: the received message 70 @type msg: U{rosgraph_msgs.Log<http://docs.ros.org/kinetic/api/rosgraph_msgs/html/msg/Log.html>} 71 ''' 72 if msg.name == rospy.get_name(): 73 if msg.level == Log.INFO: 74 self.rosinfo_signal.emit(msg) 75 elif msg.level == Log.WARN: 76 self.roswarn_signal.emit(msg) 77 elif msg.level == Log.ERROR: 78 self.roserr_signal.emit(msg) 79 elif msg.level == Log.FATAL: 80 self.rosfatal_signal.emit(msg)
81