class NaoDCMDashboard(Dashboard): def setup(self, context): self._dashboard_message = None self._last_dashboard_message_time = 0.0 self.name = "NaoDCM Dashboard" rospy.sleep(0.5) self.motor_bat = NaoDCMBatteryWidget("Battery") self.console = ConsoleDashWidget(self.context) self.monitor = MonitorDashWidget(self.context) self.monitor._show_monitor() self.nav = NavViewDashWidget(self.context) self.cam = CameraViewDashWidget(self.context, 'nao_dcm/CameraTop/image_raw', 'CameraTop') self.cam._show_cam_view() self.camBot = CameraViewDashWidget(self.context, 'nao_dcm/CameraBottom/image_raw', 'CameraBottom') self.camBot._show_cam_view() self.stiff = NaoDCMStiffnessWidget("Stiffness") # This is what gets dashboard_callback going eagerly self._dashboard_agg_sub = rospy.Subscriber('diagnostics_agg', diagnostic_msgs.msg.DiagnosticArray, self.dashboard_callback) def get_widgets(self): return [[self.monitor, self.console],[self.motor_bat],[self.nav],[self.cam, self.camBot],[self.stiff]] def dashboard_callback(self, msg): self._dashboard_message = msg self._last_dashboard_message_time = rospy.get_time() battery_status = {} # Used to store Battery status info for status in msg.status: if status.name == "/Nao/Battery/Battery": for value in status.values: battery_status[value.key]=value.value # If battery diagnostics were found, calculate percentages and stuff if (battery_status): self.motor_bat.set_power_state(battery_status['Battery Charge']) def shutdown_dashboard(self): self._dashboard_agg_sub.unregister() def save_settings(self, plugin_settings, instance_settings): self.console.save_settings(plugin_settings, instance_settings) self.monitor.save_settings(plugin_settings, instance_settings) def restore_settings(self, plugin_settings, instance_settings): self.console.restore_settings(plugin_settings, instance_settings) self.monitor.restore_settings(plugin_settings, instance_settings)