source: robotics/wheelchair/python/DoraRecieve.py @ 24bf8e2

Last change on this file since 24bf8e2 was 24bf8e2, checked in by Steve Castellotti <sc@…>, 8 years ago

DoraReceive?:

  • Exception catching for bad datagram
  • Property mode set to 100755
File size: 5.2 KB
RevLine 
[adf4715]1#!/usr/bin/env python
[1b1715a]2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Robotics - Wheelchair - Receiver
5#
6# Copyright Puzzlebox Productions, LLC (2013)
7#
8# This code is released under the GNU Pulic License (GPL) version 2
9# For more information please refer to http://www.gnu.org/copyleft/gpl.html
10
11import sys
12import time
13import signal
14import serial
15import select
[adf4715]16
17from PySide import QtCore, QtGui, QtNetwork
18
[1b1715a]19import Wheelchair_Control as wheelchair_control
20
21#####################################################################
22# Globals
23#####################################################################
24
25DEBUG=1
26
[adf4715]27SOCKET = 20320
[9bf1fe2]28
29DEFAULT_SPEED = 5
30
[adf4715]31currentTarget= 'i'
32previousTarget= 'i'
[1b1715a]33
[9bf1fe2]34DIRECTION_CODES = {
35        '0': '', \
36        '1': 'left', \
37        '2': 'right', \
38        '3': 'reverse', \
39        '4': 'forward', \
40        '5': 'stop'
41}
42
43#KEY_CODES = {
44        #'':        '', \
45        #'left':    'j', \
46        #'right':   'l', \
47        #'reverse': 'k', \
48        #'forward': 'i', \
49        #'stop':    ' '
50#}
51
52KEY_CODES = {
53        'left': 'left', \
54        'right': 'right', \
55        'reverse': 'rev', \
56        'forward': 'fwd', \
57        'stop': 'stop'
58}
59
60#CONTROLS = { 'fwd': 'F',
61             #'rev': 'B',
62             #'right': 'R',
63             #'left': 'L',
64#}
65
66CONTROLS = {
67        'forward': 'F', \
68        'left': 'L', \
69        'right': 'R', \
70        'reverse': 'B'
71}
72
[1b1715a]73
74#####################################################################
75# Classes
76#####################################################################
77
[adf4715]78class Receiver(QtGui.QDialog):
[1b1715a]79       
[adf4715]80        def __init__(self, parent=None):
[1b1715a]81               
[adf4715]82                super(Receiver, self).__init__(parent)
83
84                self.statusLabel = QtGui.QLabel("Listening for broadcasted messages")
85                quitButton = QtGui.QPushButton("&Quit")
86
87                self.udpSocket = QtNetwork.QUdpSocket(self)
88                self.udpSocket.bind(SOCKET)
89
90                self.udpSocket.readyRead.connect(self.processPendingDatagrams)
91                quitButton.clicked.connect(self.close)
92
93                buttonLayout = QtGui.QHBoxLayout()
94                buttonLayout.addStretch(1)
95                buttonLayout.addWidget(quitButton)
96                buttonLayout.addStretch(1)
97
98                mainLayout = QtGui.QVBoxLayout()
99                mainLayout.addWidget(self.statusLabel)
100                mainLayout.addLayout(buttonLayout)
101                self.setLayout(mainLayout)
102
103                self.setWindowTitle("Broadcast Receiver")
[1b1715a]104               
105               
106                self.wheelchair = wheelchair_control.puzzlebox_brainstorms_wheelchair_control( \
107                        device_address=wheelchair_control.DEFAULT_SERIAL_DEVICE, \
108                        command=wheelchair_control.DEFAULT_COMMAND, \
109                        DEBUG=DEBUG)
110       
111       
112                self.wheelchair.start()
113               
114                if DEBUG:
115                        print "Wheelchair Started"
116
117
118        ##################################################################
[adf4715]119
120        def processPendingDatagrams(self):
[1b1715a]121               
[adf4715]122                while self.udpSocket.hasPendingDatagrams():
123
124
[1b1715a]125                        datagram, host, port = self.udpSocket.readDatagram(self.udpSocket.pendingDatagramSize())
[adf4715]126
127
[1b1715a]128                        try:
129                                # Python v3.
130                                datagram = str(datagram, encoding='ascii')
131                        except:
132                                # Python v2.
133                                pass
[adf4715]134
135
[9bf1fe2]136                        #if DEBUG:
137                                #print "Datagram: %s" % datagram
138                                #print datagram
139                                #print
140                                #print type(datagram)
141                                #print
142
143
144
[24bf8e2]145                        try:
[9bf1fe2]146                               
[24bf8e2]147                        #if True:
[9bf1fe2]148                                #self.wheelchair.sendCommand('1','i')
149                               
150                                datagram = str(datagram)
151                               
152                                #if DEBUG:
153                                        #print "Datagram str():",
154                                        #print datagram
155                                        #print
156                                        #print type(datagram)
157                                        #print
158                               
159                                #DIRECTION_CODES = {
160                                        #'0': '', \
161                                        #'1': 'left', \
162                                        #'2': 'right', \
163                                        #'3': 'reverse', \
164                                        #'4': 'forward', \
165                                        #'5': 'stop'
166                                #}
167                               
168                                #KEY_CODES = {
169                                        #'':        '', \
170                                        #'left':    'j', \
171                                        #'right':   'l', \
172                                        #'reverse': 'k', \
173                                        #'forward': 'i', \
174                                        #'stop':    ' '
175                                #}
176                               
177                               
178                                if (datagram in DIRECTION_CODES.keys()):
179                                       
180                                        direction = DIRECTION_CODES[datagram]
181                                       
182                                        #print direction
183                                       
184                                        if ((direction in KEY_CODES.keys()) and \
185                                            (KEY_CODES[direction] != '')):
186                                       
187                                                key_code = KEY_CODES[direction]
188                                               
189                                               
190                                                if DEBUG:
191                                                        print "[Dora] Direction: %s Sending: %s" % \
192                                                                (direction, key_code)
193                                               
194                                               
195                                                self.wheelchair.sendCommand('%i' % DEFAULT_SPEED, key_code)
196                       
197                                else:
198                                       
[24bf8e2]199                                        if DEBUG:
200                                                print "[Dora] Direction not recognized:",
201                                                print datagram
[9bf1fe2]202                       
[24bf8e2]203                        except Exception, e:
204                                if DEBUG:
205                                        print "ERROR: Exception:",
206                                        print e
[1b1715a]207                               
208
209
210                        self.statusLabel.setText("Received datagram: \"%s\"" % datagram)
[adf4715]211
212
[1b1715a]213#####################################################################
214# Globals
215#####################################################################
[adf4715]216
[1b1715a]217if __name__ == '__main__':
[adf4715]218
219        app = QtGui.QApplication(sys.argv)
220        receiver = Receiver()
[1b1715a]221        #receiver.show()
[adf4715]222        sys.exit(receiver.exec_())
223
[1b1715a]224        # Perform correct KeyboardInterrupt handling
225        # (allows you to hit control-c to quit)
[adf4715]226        signal.signal(signal.SIGINT, signal.SIG_DFL)
227
228        # Collect default settings and command line parameters
229        device = DEFAULT_SERIAL_DEVICE
230        command = DEFAULT_COMMAND
231
232        for each in sys.argv:
233
234                if each.startswith("--device="):
235                        device = each[ len("--device="): ]
236                elif each.startswith("--command="):
237                        command = each[ len("--command="): ]
238
239
[1b1715a]240        #app1 = QtCore.QCoreApplication(sys.argv)
[adf4715]241
[1b1715a]242        #wheelchair = puzzlebox_brainstorms_wheelchair_control( \
243                        #device_address=device, \
244                        #command=command, \
245                        #DEBUG=DEBUG)
[adf4715]246
247        receiver.show()
[1b1715a]248       
249        if DEBUG:
250                print "Receiver Showing"
251        #wheelchair.start()
252        #print "Wheelchair Started"
[adf4715]253
254        sys.exit(app.exec_())
[1b1715a]255        #sys.exit(app1.exec_())
Note: See TracBrowser for help on using the repository browser.