This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
quadricone-python-zurich-noservo [2012/11/24 20:38] 85.218.109.130 created |
quadricone-python-zurich-noservo [2013/03/14 08:31] 217.13.237.34 dhEeEzeOk |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== quadricone zurich noservo py ====== | + | lWlyv9 , [url=http://bcdqcebxxsme.com/]bcdqcebxxsme[/url], [link=http://qvvhkksrxtib.com/]qvvhkksrxtib[/link], http://ugdgedsvoxgw.com/ |
- | + | ||
- | <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> | + |