This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
quadricone-python-zurich-noservo [2013/03/12 16:02] 83.110.249.128 BHDBOnlz |
quadricone-python-zurich-noservo [2013/04/22 17:05] zoza old revision restored |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | S9Oe8X , [url=http://ahbpsgxcccof.com/]ahbpsgxcccof[/url], [link=http://slnxxewvadhm.com/]slnxxewvadhm[/link], http://pjwexirycehw.com/ | + | ====== quadricone zurich noservo py ====== |
+ | |||
+ | <code python> | ||
+ | import subprocess, glob, time, csv, random | ||
+ | |||
+ | ''' some naming clarifications: | ||
+ | Servo is a class for motors, where movement is defined | ||
+ | Servos is a dictionary of servo names and positions | ||
+ | servo is used in the while loop to refer to an item of the Servos dictionary | ||
+ | ''' | ||
+ | |||
+ | ### the moving part ------------------- | ||
+ | |||
+ | class Servo: | ||
+ | def __init__(self, servoID): | ||
+ | self.servoID=servoID | ||
+ | self.startPos() # when initiated, go to zero | ||
+ | |||
+ | def move(self, position): | ||
+ | self.position=position | ||
+ | print self.servoID, "\'s given position is", self.position | ||
+ | if (10 <= self.position <= 120): | ||
+ | print "everything OK, will write", self.position | ||
+ | elif 120 < self.position < 170: | ||
+ | print "will adjust to 160", self.position | ||
+ | self.position=160 | ||
+ | elif self.position > 170: | ||
+ | print "MAX", self.servoID, "is in maximum position" | ||
+ | self.position=180 | ||
+ | print "MAX: Servo will now go to", self.position | ||
+ | elif self.position<10: | ||
+ | print "MIN", self.servoID, "is in minimum position" | ||
+ | self.position=0 | ||
+ | print "MIN: Servo will now go to", self.position | ||
+ | else: | ||
+ | print "how did this happen?" | ||
+ | |||
+ | |||
+ | def startPos(self): | ||
+ | self.move(0) | ||
+ | |||
+ | |||
+ | ## initiate the morots and put them all in the start (0) position | ||
+ | ## alternative | ||
+ | |||
+ | Servos={"raja":0, "gaja":0, "vlaja":0, "zlaja":0} | ||
+ | for i,servo in enumerate(Servos): | ||
+ | globals()[servo]=Servo(i+1) | ||
+ | globals()[servo].startPos() | ||
+ | |||
+ | #key_pos=[0, 0, 0, 0] | ||
+ | |||
+ | ### the scanning part ----------------- | ||
+ | |||
+ | # airodump-ng is running and logging the results into a csv file | ||
+ | # with the following command: sudo airodump-ng -o csv -w manuf mon0 | ||
+ | # subprocess looks for the last edited csv file in current folder | ||
+ | # this file is parsed by the csv module to find the number of data packets that have passed through the network since the last check | ||
+ | |||
+ | csvs=subprocess.Popen("ls -t1 *csv | head -1", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||
+ | csv_last=csvs.communicate()[0].strip() | ||
+ | |||
+ | key_value=(' # IV') # look up this value in the scan dump | ||
+ | |||
+ | def lookup(dump): | ||
+ | datas=[] | ||
+ | results=[] | ||
+ | scan=open(dump, "rU") | ||
+ | next(scan) | ||
+ | scanDict=csv.DictReader((line.replace('\0','') for line in scan), delimiter=',') | ||
+ | for adict in scanDict: | ||
+ | if adict.has_key(key_value) and adict.get(key_value)!=None: | ||
+ | try: | ||
+ | datas.append(int(adict.get(key_value))) | ||
+ | except: | ||
+ | pass | ||
+ | datas.sort(reverse=True) | ||
+ | for i in range(4): | ||
+ | results.append(datas[i]) | ||
+ | return results | ||
+ | |||
+ | ### the main loop ---------------------- | ||
+ | |||
+ | packet_list=lookup(csv_last) | ||
+ | print 'packet_list', packet_list | ||
+ | #random.shuffle(servo_list) | ||
+ | #print 'servo_list', servo_list | ||
+ | time.sleep(3) | ||
+ | |||
+ | while True: | ||
+ | new_packet_list=lookup(csv_last) | ||
+ | print "//////////////////////" | ||
+ | print "..." | ||
+ | print 'new_packet_list', new_packet_list | ||
+ | print 'calculating the movements...' | ||
+ | print "starting key positions: ", Servos | ||
+ | for i,servo in enumerate(Servos): | ||
+ | print "i!!!!i!!!!i!!!!!" | ||
+ | print 'servo:', servo | ||
+ | pos=Servos.get(servo) | ||
+ | packet_diff=new_packet_list[i]-packet_list[i] | ||
+ | print 'packet_diff:', packet_diff | ||
+ | if packet_diff==0: | ||
+ | new_pos=pos-10 | ||
+ | print 'go down', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | if new_pos<0: | ||
+ | Servos[servo]=0 | ||
+ | else: | ||
+ | Servos[servo]=new_pos | ||
+ | elif 12 > packet_diff >= 1: | ||
+ | new_pos=Servos.get(servo)+5 | ||
+ | if new_pos < 10: | ||
+ | new_pos=10 | ||
+ | print 'go up very small', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | Servos[servo]=new_pos # update key position for the next round | ||
+ | elif 36 > packet_diff >= 12: | ||
+ | new_pos=Servos.get(servo)+8 | ||
+ | if new_pos < 10: | ||
+ | new_pos=10 | ||
+ | print 'go up small', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | Servos[servo]=new_pos # update key position for the next round | ||
+ | elif 80 > packet_diff >= 36: | ||
+ | new_pos=Servos.get(servo)+10 | ||
+ | print 'go up middle', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | Servos[servo]=new_pos # update key position for the next round | ||
+ | elif 180 > packet_diff >= 80: | ||
+ | new_pos=Servos.get(servo)+20 | ||
+ | print 'go up big', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | if new_pos > 180: | ||
+ | Servos[servo]=180 | ||
+ | else: | ||
+ | Servos[servo]=new_pos # update key position for the next round | ||
+ | elif packet_diff >= 180: | ||
+ | new_pos=Servos.get(servo)+50 | ||
+ | print 'go up very big', new_pos | ||
+ | globals()[servo].move(new_pos) | ||
+ | time.sleep(0.2) | ||
+ | if new_pos > 180: | ||
+ | Servos[servo]=180 | ||
+ | else: | ||
+ | Servos[servo]=new_pos # update key position for the next round | ||
+ | else: | ||
+ | print 'key_pos:', Servos.get(servo) , 'packet_diff:', packet_diff, 'and i am out of options' | ||
+ | print "!!!!!!!!!!!!!!!!!!!!" | ||
+ | print "new list of key pos", Servos | ||
+ | packet_list=new_packet_list # update packet list | ||
+ | time.sleep(10) | ||
+ | |||
+ | </code> |