diagnostics.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # Software License Agreement (BSD License)
00003 #
00004 # Copyright (C) 2015, Jack O'Quin
00005 # All rights reserved.
00006 #
00007 # Redistribution and use in source and binary forms, with or without
00008 # modification, are permitted provided that the following conditions
00009 # are met:
00010 #
00011 #  * Redistributions of source code must retain the above copyright
00012 #    notice, this list of conditions and the following disclaimer.
00013 #  * Redistributions in binary form must reproduce the above
00014 #    copyright notice, this list of conditions and the following
00015 #    disclaimer in the documentation and/or other materials provided
00016 #    with the distribution.
00017 #  * Neither the name of the author nor of other contributors may be
00018 #    used to endorse or promote products derived from this software
00019 #    without specific prior written permission.
00020 #
00021 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 # POSSIBILITY OF SUCH DAMAGE.
00033 
00034 """
00035 ROS diagnostics interface for the Arduino device driver node.
00036 """
00037 
00038 import rospy
00039 import threading
00040 from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus, KeyValue
00041 
00042 
00043 class Diagnostics(object):
00044     """ ROS diagnostics interface for the Arduino device driver node. """
00045 
00046     def __init__(self, topic='/diagnostics'):
00047         self.pub = rospy.Publisher(topic, DiagnosticArray)
00048         self.lock = threading.RLock()
00049         """ Mutex lock for updating diagnostic status. """
00050         self.timer = rospy.Timer(rospy.Duration(1.0), self.publish)
00051         """ Publish diagnostic info once a second. """
00052         self.devices = {}
00053         """ Dictionary of reporting devices by name. """
00054 
00055     def publish(self, event):
00056         """ Publish current diagnostics status once a second.
00057 
00058         Runs in a separate timer thread, so locking is required.
00059 
00060         :param event: rospy.TimerEvent for this call
00061         """
00062         with self.lock:
00063             array = DiagnosticArray()
00064             array.header.stamp = event.current_real
00065             array.status = list(self.devices.values())
00066             self.pub.publish(array)
00067 
00068     def update(self, status):
00069         """ Update device status.
00070 
00071         :param status: New status for some device, replaces any
00072             previous status.
00073         :type status: diagnostic_msgs/DiagnosticStatus
00074         """
00075         with self.lock:
00076             self.devices[status.name] = status


segbot_sensors
Author(s): Piyush Khandelwal
autogenerated on Fri Aug 28 2015 13:03:00