source: robotics/wheelchair/python/DoraRecieve.py @ 16b98d5

Last change on this file since 16b98d5 was 9bf1fe2, checked in by Steve Castellotti <sc@…>, 8 years ago

python/udp:

  • Updated to match lilia controller.py
  • Property mode set to 100755
File size: 5.1 KB
Line 
1#!/usr/bin/env python
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
16
17from PySide import QtCore, QtGui, QtNetwork
18
19import Wheelchair_Control as wheelchair_control
20
21#####################################################################
22# Globals
23#####################################################################
24
25DEBUG=1
26
27SOCKET = 20320
28
29DEFAULT_SPEED = 5
30
31currentTarget= 'i'
32previousTarget= 'i'
33
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
73
74#####################################################################
75# Classes
76#####################################################################
77
78class Receiver(QtGui.QDialog):
79       
80        def __init__(self, parent=None):
81               
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")
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        ##################################################################
119
120        def processPendingDatagrams(self):
121               
122                while self.udpSocket.hasPendingDatagrams():
123
124
125                        datagram, host, port = self.udpSocket.readDatagram(self.udpSocket.pendingDatagramSize())
126
127
128                        try:
129                                # Python v3.
130                                datagram = str(datagram, encoding='ascii')
131                        except:
132                                # Python v2.
133                                pass
134
135
136                        #if DEBUG:
137                                #print "Datagram: %s" % datagram
138                                #print datagram
139                                #print
140                                #print type(datagram)
141                                #print
142
143
144
145                        #try:
146                               
147                        if True:
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                                       
199                                        print DIRECTION_CODES.keys()
200                       
201                        #except Exception, e:
202                                #if DEBUG:
203                                        #print "ERROR: Exception:",
204                                        #print e
205                               
206
207
208                        self.statusLabel.setText("Received datagram: \"%s\"" % datagram)
209
210
211#####################################################################
212# Globals
213#####################################################################
214
215if __name__ == '__main__':
216
217        app = QtGui.QApplication(sys.argv)
218        receiver = Receiver()
219        #receiver.show()
220        sys.exit(receiver.exec_())
221
222        # Perform correct KeyboardInterrupt handling
223        # (allows you to hit control-c to quit)
224        signal.signal(signal.SIGINT, signal.SIG_DFL)
225
226        # Collect default settings and command line parameters
227        device = DEFAULT_SERIAL_DEVICE
228        command = DEFAULT_COMMAND
229
230        for each in sys.argv:
231
232                if each.startswith("--device="):
233                        device = each[ len("--device="): ]
234                elif each.startswith("--command="):
235                        command = each[ len("--command="): ]
236
237
238        #app1 = QtCore.QCoreApplication(sys.argv)
239
240        #wheelchair = puzzlebox_brainstorms_wheelchair_control( \
241                        #device_address=device, \
242                        #command=command, \
243                        #DEBUG=DEBUG)
244
245        receiver.show()
246       
247        if DEBUG:
248                print "Receiver Showing"
249        #wheelchair.start()
250        #print "Wheelchair Started"
251
252        sys.exit(app.exec_())
253        #sys.exit(app1.exec_())
Note: See TracBrowser for help on using the repository browser.