예제 #1
0
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)