Rose-Hulman Robotics Team

Changeset 425

Show
Ignore:
Timestamp:
02/25/09 19:01:28 (3 years ago)
Author:
mosttw
Message:

Added crude speed graphing

Location:
trunk/software/rb
Files:
1 added
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/software/rb/controller.py

    r420 r425  
    44class Controller(): 
    55        def __init__(self): 
    6                 #self.drive = rb.drive.FakeDrive(rbconfig.left_motor_port, 
    7                 #                               rbconfig.right_motor_port) 
    8                 self.drive = rb.drive.Drive(rbconfig.left_motor_port, 
    9                                             rbconfig.right_motor_port) 
     6                self.mode = "stop" 
     7                self.drive = rb.drive.FakeDrive(rbconfig.left_motor_port, 
     8                                                rbconfig.right_motor_port) 
     9                #~ self.drive = rb.drive.Drive(rbconfig.left_motor_port, 
     10                                            #~ rbconfig.right_motor_port) 
     11         
     12        def set_mode(self, mode): 
     13                ''' 
     14                Set the current mode.  Override this method in a subclass 
     15                to do something useful. 
     16                ''' 
     17                self.mode = mode 
  • trunk/software/rb/gui/analog.py

    r422 r425  
     1from math import pi 
    12import gtk 
    23 
     
    1920        def redraw(self, event): 
    2021                self.queue_draw() 
    21                 if self.controller.drive.left.target == 0 and self.controller.drive.right.target == 0: 
    22                         self.builder.get_object("stop").set_active(True) 
    2322 
    2423        #           /\ 
     
    3130        #       -1 _\/_ -1 
    3231        def expose_cb(self, da, event): 
    33                 from math import pi 
    3432                alloc = self.get_allocation() 
    3533                w, h = alloc.width, alloc.height 
     
    4745                x = float(self.controller.drive.left.target - self.controller.drive.right.target) 
    4846                y = float(self.controller.drive.left.target + self.controller.drive.right.target) 
    49                 log_debug("left=%f, right=%f, x=%f, y=%f" % 
    50                                 (self.controller.drive.left.target, self.controller.drive.right.target, 
    51                                         ( x/4+0.5), (-y/4+0.5))) 
     47                #~ log_debug("left=%f, right=%f, x=%f, y=%f" % 
     48                                #~ (self.controller.drive.left.target, self.controller.drive.right.target, 
     49                                        #~ ( x/4+0.5), (-y/4+0.5))) 
    5250                x =  ( x/4+0.5) * w 
    5351                y =  (-y/4+0.5) * h 
  • trunk/software/rb/gui/compass.py

    r402 r425  
    7575                return False 
    7676         
    77         def queue_redraw(self): 
    78                 alloc = self.allocation 
    79                 self.queue_draw_area(alloc.x, alloc.y, alloc.width, alloc.height) 
    80          
    8177        def new_direction(self, color, direction): 
    8278                ''' 
     
    107103        def update(self, new_direction): 
    108104                self.direction = new_direction 
    109                 self.compass_widget.queue_redraw() 
     105                self.compass_widget.queue_draw() 
    110106 
    111107 
  • trunk/software/rb/gui/gui.glade

    r403 r425  
    11<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    22<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> 
    3 <!--Generated with glade3 3.4.5 on Thu Feb 19 03:42:00 2009 --> 
     3<!--Generated with glade3 3.4.5 on Wed Feb 25 17:23:04 2009 --> 
    44<glade-interface> 
    55  <widget class="GtkWindow" id="window"> 
     
    5555                <property name="type">tab</property> 
    5656                <property name="position">1</property> 
     57                <property name="tab_fill">False</property> 
     58              </packing> 
     59            </child> 
     60            <child> 
     61              <widget class="GtkVBox" id="speed_vbox"> 
     62                <property name="visible">True</property> 
     63                <child> 
     64                  <widget class="GtkAlignment" id="speed_graph"> 
     65                    <property name="visible">True</property> 
     66                    <child> 
     67                      <placeholder/> 
     68                    </child> 
     69                  </widget> 
     70                </child> 
     71                <child> 
     72                  <widget class="GtkLabel" id="speed_status_label"> 
     73                    <property name="visible">True</property> 
     74                    <property name="ellipsize">PANGO_ELLIPSIZE_END</property> 
     75                  </widget> 
     76                  <packing> 
     77                    <property name="expand">False</property> 
     78                    <property name="position">1</property> 
     79                  </packing> 
     80                </child> 
     81              </widget> 
     82              <packing> 
     83                <property name="position">2</property> 
     84              </packing> 
     85            </child> 
     86            <child> 
     87              <widget class="GtkLabel" id="speed_label"> 
     88                <property name="visible">True</property> 
     89                <property name="label" translatable="yes">Speed</property> 
     90              </widget> 
     91              <packing> 
     92                <property name="type">tab</property> 
     93                <property name="position">2</property> 
    5794                <property name="tab_fill">False</property> 
    5895              </packing> 
  • trunk/software/rb/gui/gui.py

    r424 r425  
    88from rb.gui.compass  import CompassWidget 
    99from rb.gui.analog   import AnalogWidget 
     10from rb.gui.speedgraph import SpeedGraph 
    1011 
    1112import os.path 
     
    2122        def __init__(self): 
    2223                Controller.__init__(self) 
    23  
    2424                gobject.threads_init() 
    2525 
     
    4343 
    4444                # Add widgets 
    45                 self.analog  = AnalogWidget(self) 
     45                self.analog = AnalogWidget(self) 
    4646                self.compass = CompassWidget() 
     47                self.speed_graph = SpeedGraph(self.drive) 
    4748                self.builder.get_object("analog_body").add(self.analog) 
    4849                self.builder.get_object("compass_body").add(self.compass) 
     50                self.builder.get_object("speed_graph").add(self.speed_graph) 
    4951 
    5052                self.window.show_all() 
    5153                gtk.main() 
    5254 
     55        def set_mode(self, mode): 
     56                Controller.set_mode(self, mode) # set the mode attribute 
     57                # TODO: disable manual motor control when in autonomous mode 
     58                if mode == 'stop': 
     59                        self.set_speed(0, 0) 
     60                elif mode == 'autonomous': 
     61                        print "Autonomous mode not yet implemented" 
     62                elif mode == 'manual': 
     63                        print "Switching to manual mode" 
     64 
    5365        def key_press_cb(self, widget, event): 
    54                 nb      = self.builder.get_object("notebook") 
    55                 tab     = nb.get_current_page() 
     66                nb = self.builder.get_object("notebook") 
     67                tab = nb.get_current_page() 
    5668 
    5769                # E-Stop  
    58                 if   event.keyval in (gtk.keysyms.Escape, gtk.keysyms.space): 
    59                         self.set_speed(0, 0) 
     70                if event.keyval in (gtk.keysyms.Escape, gtk.keysyms.space): 
     71                        self.set_mode('stop') 
    6072 
    6173                # Switch tabs 
     
    88100 
    89101        def mode_cb(self, widget=None, data=None): 
    90                 log_debug("gui: Stopping motors") 
    91                 self.set_speed(0, 0) 
     102                ''' 
     103                Callback for mode selection toggle buttons. 
     104                ''' 
     105                new_mode = { 
     106                        'mode_stop': 'stop', 
     107                        'mode_manual': 'manual', 
     108                        'mode_auto': 'autonomous', 
     109                }[widget.get_name()] 
     110                self.set_mode(new_mode) 
  • trunk/software/rb/gui/gui.xml

    r403 r425  
    11<?xml version="1.0"?> 
    2 <!--Generated with glade3 3.4.5 on Thu Feb 19 03:42:00 2009 --> 
     2<!--Generated with glade3 3.4.5 on Wed Feb 25 17:23:04 2009 --> 
    33<interface> 
    44  <object class="GtkWindow" id="window"> 
     
    4949              <packing> 
    5050                <property name="position">1</property> 
     51                <property name="tab_fill">False</property> 
     52              </packing> 
     53            </child> 
     54            <child> 
     55              <object class="GtkVBox" id="speed_vbox"> 
     56                <property name="visible">True</property> 
     57                <child> 
     58                  <object class="GtkAlignment" id="speed_graph"> 
     59                    <property name="visible">True</property> 
     60                    <child> 
     61                      <placeholder/> 
     62                    </child> 
     63                  </object> 
     64                </child> 
     65                <child> 
     66                  <object class="GtkLabel" id="speed_status_label"> 
     67                    <property name="visible">True</property> 
     68                    <property name="ellipsize">PANGO_ELLIPSIZE_END</property> 
     69                  </object> 
     70                  <packing> 
     71                    <property name="expand">False</property> 
     72                    <property name="position">1</property> 
     73                  </packing> 
     74                </child> 
     75              </object> 
     76            </child> 
     77            <child type="tab"> 
     78              <object class="GtkLabel" id="speed_label"> 
     79                <property name="visible">True</property> 
     80                <property name="label" translatable="yes">Speed</property> 
     81              </object> 
     82              <packing> 
     83                <property name="position">2</property> 
    5184                <property name="tab_fill">False</property> 
    5285              </packing>