lausTracker.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 # notwendige Module einbinden
5 from time import sleep
6 import packedCom
7 
8 
9 class lausTrackerSelf(packedCom.packedCom):
10  def __init__(self):
11  """ Initialisieren der Klasse. """
12 
13 
14  self.orientation = 2 # east
15  # 0 = south
16  # 1 = north
17  # 2 = east
18  # 3 = west
19  self.x = 0
20  # 0..7
21  self.y = 0
22  # 0..7
23 
24 
25  packedCom.packedCom.__init__(self, 0xa1, "BBB")
26  # packed descriptor is 0xa1
27  # orientation is of type uint8_t
28  # x is of type uint8_t
29  # y is of type uint8_t
30 
31  def getAsString(self):
32  """ Konvertiert die aktuellen Daten in einen String """
33 
34  # schreibe alle Daten in eine Liste
35  # (Reihenfolge wie bei der Initialisierung)
36  data = [ self.orientation, self.x, self.y ]
37  # rufe die getAsString-Funktion der Basisklasse
38  return super(lausTrackerSelf, self).getAsString(data)
39 
40 class lausTrackerRival(packedCom.packedCom):
41  def __init__(self):
42  """ Initialisieren der Klasse. """
43 
44 
45  self.x = 0
46  # 0..7
47  self.y = 0
48  # 0..7
49 
50 
51  packedCom.packedCom.__init__(self, 0xa2, "BB")
52  # packed descriptor is 0xa2
53  # x is of type uint8_t
54  # y is of type uint8_t
55 
56  def getAsString(self):
57  """ Konvertiert die aktuellen Daten in einen String """
58 
59  # schreibe alle Daten in eine Liste
60  # (Reihenfolge wie bei der Initialisierung)
61  data = [ self.x, self.y ]
62  # rufe die getAsString-Funktion der Basisklasse
63  return super(lausTrackerRival, self).getAsString(data)
64 
65 """
66 Programm zum Testen der Laustracker-Funktionen.
67 
68 Zugehöriges Mikrocontroller Programm ist examples/lausTracker.c
69 Wird dieses Programm auf dem Roboter ausgeführt, kann über das Python
70 Skript eine Kommunikation etabliert werden.
71 
72 Dieses Python Skript benötigt das vereinfachte packedCom-Modul unter
73  tools/python/packedCom.py
74 
75 Das Programm kann mit Strg-C abgebrochen werden.
76 """
77 
78 # Comport öffnen
79 # Standarddevice ist Kabelgebundene USB Verbindung zum Roboter
80 # (/dev/tucbot/all_usb)
81 #
82 # Zum öffnen der XBee-Verbindung muss dieses Skript mit dem entsprechenden
83 # Parameter geöffnet werden, für den Roboter Andi wäre dies zum Beispiel:
84 # $ python customData.py -r andi
85 comport = packedCom.comPort()
86 
87 # Kurz warten, um das Comport zu initialisieren
88 sleep(0.2)
89 
90 # Endlosschleife, simuliert, dass der eigene Roboter (S) eine große Runde
91 # fährt und der Gegner (R) eine kleine
92 #
93 # x0 x1 x2 x3 x4 x5 x6 x7
94 # +---+---+---+---+---+---+---+---+
95 # y0 I S<--S<--S<--S<--S<--S<--S<--S I
96 # + v ^ +
97 # y1 I S S I
98 # + v ^ +
99 # y2 I S R-->R-->R-->R S I
100 # + v ^ v ^ +
101 # y3 I S R R S I
102 # + v ^ v ^ +
103 # y4 I S R R S I
104 # + v ^ V ^ +
105 # y5 I S R<--R<--R<--R S I
106 # + v ^ +
107 # y6 I S S I
108 # + v ^ +
109 # y7 I S-->S-->S-->S-->S-->S-->S-->S I
110 # +---+---+---+---+---+---+---+---+
111 #
112 # Mit Strg-C abbrechen!
113 
114 # Instantierung
115 s = lausTrackerSelf()
116 r = lausTrackerRival()
117 
118 while 1:
119  # der eigene Roboter
120  if ((s.x == 0) and (s.y < 7)):
121  s.y = s.y + 1
122  s.orientation = 0 # south
123  elif ((s.y == 7) and (s.x < 7)):
124  s.x = s.x + 1
125  s.orientation = 2 # east
126  elif ((s.x == 7) and (s.y > 0)):
127  s.y = s.y - 1
128  s.orientation = 1 # north
129  elif ((s.y == 0) and (s.x > 0)):
130  s.x = s.x - 1
131  s.orientation = 3 # west
132  else:
133  s.y = 0
134  s.x = 0
135  s.orientation = 0 # south
136 
137  # der gegnerische Roboter
138  if ((r.y == 2) and (r.x < 5)):
139  r.x = r.x + 1
140  r.orientation = 2 # east
141  elif ((r.x == 5) and (r.y < 5)):
142  r.y = r.y + 1
143  r.orientation = 0 # south
144  elif ((r.y == 5) and (r.x > 2)):
145  r.x = r.x - 1
146  r.orientation = 3 # west
147  elif ((r.x == 2) and (r.y > 2)):
148  r.y = r.y - 1
149  r.orientation = 1 # north
150  else:
151  r.y = 2
152  r.x = 2
153  r.orientation = 2 # east
154 
155  print "self @(", s.x, ", ", s.y, ", ", s.orientation, ") and rival @(", \
156  r.x, ", ", r.y, ")"
157  comport.write(s.getAsString())
158  comport.write(r.getAsString())
159 
160  # Daten einlesen (eigentlich sollte nichts reinkommen)
161  tmp = comport.read(100)
162  if (tmp != ""):
163  print "in : ", repr(tmp)
164  # Für automatische Auswertung der Packages muss auf tuc_bot Package
165  # zurückgegriffen werden. Dokumentation ist noch in Arbeit.
166 
167  # warten - Roboter bewegen sich 1 Feld pro Sekunde
168  sleep(1.0)