Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import rospy
- from geometry_msgs.msg import Pose2D, Pose
- from math import *
- import time
- import socket
- #import readchar
- import sys
- from struct import *
- import math
- class HexaGuide():
- def __init__(self):
- self.pose1 = Pose2D()
- self.pose2 = Pose2D()
- self.marker = Pose2D()
- self.marker2 = Pose2D()
- self.IP1 = '192.250.9.9'
- self.IP2 = '192.168.4.1'
- #self.IP2 = '192.155.5.5' #if Lein hex then ovaj IP
- self.Port = 80
- self.power1 = 0
- self.angle1 = 0
- self.rotation1 = 0
- self.staticTilt = 0
- self.movingTilt = 0
- self.onoff1 = 1
- self.accX = 0
- self.accY = 0
- self.sliders1 = 50
- self.sliders2 = 25
- self.sliders3 = 0
- self.sliders4 = 0
- self.sliders5 = 0
- self.sliders6 = 50
- self.sliders7 = 0
- self.sliders8 = 0
- self.sliders9 = 0
- self.duration = 20
- self.power2 = 0
- self.angle2 = 0
- self.rotation2 = 0
- self.onoff2 = 1
- self.switch0 = False
- self.switch1 = False
- self.switch2 = False
- self.switch3 = False
- self.switch4 = False
- self.switch5 = False
- rospy.Subscriber("/pose_node/pose_id1", Pose2D, self.pose_callback1)
- rospy.Subscriber("/pose_node/pose_id2", Pose2D, self.pose_callback2)
- rospy.Subscriber("/pose_node/pose_id15", Pose2D, self.pose_callback15)
- rospy.Subscriber("/pose_node/pose_id4", Pose2D, self.pose_callback4)
- self.pub1 = rospy.Publisher("/algoritam/naredbe1",ByteMultiArray, queue_size=10)
- self.pub2 = rospy.Publisher("/algoritam/naredbe2",ByteMultiArray, queue_size=10)
- def pose_callback1(self, data):
- self.marker.x = data.x
- self.marker.y = data.y
- self.marker.theta = data.theta
- def pose_callback2(self, data):
- self.pose1 = data
- self.pose1.x = data.x
- self.pose1.y = data.y
- self.pose1.theta = data.theta
- def pose_callback15(self, data):
- self.pose2.x = data.x
- self.pose2.y = data.y
- self.pose2.theta = data.theta
- def pose_callback4(self, data):
- self.marker2.x = data.x
- self.marker2.y = data.y
- self.marker2.theta = data.theta
- def odmicanje(self,s1,s2):
- if abs(self.pose1.theta) > 90 and self.pose1.y < (self.marker2.y+0.50) and abs(self.pose1.x-(self.marker.x+self.marker2.x)/2) < 0.50: #iznad tunela
- self.angle1 = 180
- self.angle2 = 180
- self.power1 = 50
- self.power2 = 50
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- if abs(self.pose1.theta) <= 90 and self.pose2.y < self.marker2.y+0.35 and abs(self.pose2.x-(self.marker.x+self.marker2.x)/2) < 0.35:
- self.angle1 = 0
- self.angle2 = 0
- self.power1 = 50
- self.power2 = 50
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- def regulacija(self,sign1,sign2,sign_rot):
- x = self.pose1.x + 45*sin(self.pose1.theta*0.01745329)
- y = self.pose1.y - 45*cos(self.pose1.theta*0.01745329)
- deltax2 = x - self.pose2.x
- deltay2 = y - self.pose2.y
- self.dist = sqrt(deltax2*deltax2 + deltay2*deltay2)
- an2 = -atan2(deltax2, deltay2)/0.01745329
- if self.pose2.theta < 0 :
- an1 = 360 + self.pose2.theta
- else:
- an1 = self.pose2.theta
- if an2<0:
- an2 = 360 + an2
- self.angle2 = an2-an1
- if abs(self.angle2) >180:
- self.angle2 = copysign( 360-abs(self.angle2), (-1)*self.angle2)
- if self.dist < 0.5:
- self.power2 = 45
- elif self.dist < 0.3:
- self.power2 = 30
- else:
- self.power2 = 55
- if sign_rot==-1:
- if self.pose2.theta-self.pose1.theta>5 or :
- print('-----situacija 1')
- self.rotation2=sign_rot*27
- self.rotation1=sign_rot*22
- self.power2=sign2*37
- self.power1=sign1*37
- elif self.pose1.theta-self.pose2.theta>5 or :
- print('-----situacija 2')
- self.rotation2=sign_rot*17
- self.rotation1=sign_rot*23
- self.power2=sign2*32
- self.power1=sign1*32
- if sign_rot==1:
- if abs(self.pose2.theta-self.pose1.theta)>5:
- print('-----situacija 3')
- self.rotation2=sign_rot*27
- self.rotation1=sign_rot*22
- self.power2=sign2*37
- self.power1=sign1*37
- elif abs(self.pose1.theta-self.pose2.theta)>5:
- print('-----situacija 4')
- self.rotation2=sign_rot*23
- self.rotation1=sign_rot*17
- self.power2=sign2*30
- self.power1=sign1*27
- def run(self):
- s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s1.connect((self.IP1, self.Port))
- s2.connect((self.IP2, self.Port))
- 'odmicanje od tunela kad je bocno'
- if (((self.pose2.x < self.marker.x + 0.35) or (self.pose2.x < self.marker2.x - 0.35)) and self.pose2.y < self.marker2.y and self.pose2.y > (self.marker.y - 35) and abs(self.pose1.theta) > 90):
- self.power1 = 50
- self.power2 = 50
- self.angle1 = 0
- self.angle2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- if (((self.pose1.x < self.marker.x + 0.35) or (self.pose1.x < self.marker2.x - 0.35)) and self.pose1.y < self.marker2.y and self.pose1.y > (self.marker.y - 35) and abs(self.pose1.theta) > 90):
- self.power1 = 50
- self.power2 = 50
- self.angle1 = 180
- self.angle2 = 180
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- 'odmicanje od tunela kad je iznad'
- self.odmicanje(s1,s2)
- 'rotacija'
- if self.pose1.x < self.pose2.x:
- predznak_1 = -1
- predznak_2 = 1
- predznak_rot = -1
- angle1 = -90
- angle2 = 90
- else:
- predznak_1 = 1
- predznak_2 = -1
- predznak_rot = 1
- angle1 = 90
- angle2 = -90
- print(self.pose1.x)
- while not(rospy.is_shutdown()) and self.switch4 == False:
- while abs(self.pose1.theta) > 10:
- print('tu sam')
- self.rotation1 = predznak_rot*20
- self.rotation2 = predznak_rot*20
- self.power1 = predznak_1*24
- self.power2 = predznak_2*35
- self.angle1 = angle1
- self.angle2 = angle2
- self.regulacija(predznak_1,predznak_2,predznak_rot)
- #print('theta 1.- ' + str(self.pose1.theta))
- #print('theta 2.- ' + str(self.pose2.theta))
- #print('pozicija 1.- ' + str(self.pose1.x))
- #print('pozicija 2.- ' + str(self.pose2.x))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- print('nakon 1. petlje')
- self.power1 = 0
- self.power2 = 0
- self.angle1 = 0
- self.angle2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.switch4 = True
- print('ispred breaka')
- if self.pose1.x < self.pose2.x:
- predznak_1 = -1
- predznak_2 = 1
- predznak_rot = -1
- else:
- predznak_1 = 1
- predznak_2 = -1
- predznak_rot = 1
- while not(rospy.is_shutdown()) and self.switch0 == False:
- while abs(self.pose1.theta) > 10:
- pow1 = 30
- pow2 = 24
- rot1 = predznak_rot * 20
- rot2 = predznak_rot * 20
- ang1 = predznak_1 * 90
- ang2 = predznak_2 * 90
- self.niz1()
- self.niz2()
- self.switch0=True
- 'izlazi iz tunela'
- while not(rospy.is_shutdown()) and self.switch5 == False:
- while (abs(self.pose1.theta) > 3) or ( abs(self.pose2.theta - self.pose1.theta) > 3 ):
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y"
- self.power1 = 0
- self.power2 = 0
- self.angle1 = 0
- self.angle2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.02):
- print "ravna po x"
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power1 = 0
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- if (self.marker.x > self.marker2.x): #ako ulaz u tunel ima vecu x koordinatu od izlaza
- while (self.pose1.x < (self.marker.x + 0.1) and self.pose1.x > (self.marker.x + self.marker2.x)/2) or (self.pose1.x < (self.marker.x + self.marker2.x)/2 and self.pose1.x > self.marker2.x - 0.1): #ponasanje ako je hexapod u ravnini tunela
- self.power1 = 35
- self.power2 = 35
- if (self.pose1.x < (self.marker.x + 0.1) and self.pose1.x > (self.marker.x + self.marker2.x)/2):
- self.angle1 = -90
- self.angle2 = -90
- else:
- self.angle1 = 90
- self.angle2 = 90
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- else: #ako izlaz iz tunela ima vecu x koordinatu od ulaza
- while (self.pose1.x < (self.marker2.x + 0.1) and self.pose1.x > (self.marker.x + self.marker2.x)/2) or (self.pose1.x < (self.marker.x + self.marker2.x)/2 and self.pose1.x > self.marker.x - 0.1):
- self.power1 = 35
- self.power2 = 35
- if (self.pose1.x < (self.marker2.x + 0.1) and self.pose1.x > (self.marker.x + self.marker2.x)/2):
- self.angle1 = -90
- self.angle2 = -90
- else:
- self.angle1 = 90
- self.angle2 = 90
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- 'spusta po y'
- while not(rospy.is_shutdown()) and self.switch1 == False:
- while (abs(self.pose1.theta) > 5) or ( abs(self.pose2.theta - self.pose1.theta) > 5 ):
- print "ispravljam kut"
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- print "theta1"
- print self.pose1.theta
- print "rot1"
- print self.rotation1
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.02):
- print "ravna po x"
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power1 = 0
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y"
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power1 = 0
- self.power2 = 10
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- deltay = self.marker.y - self.pose1.y
- if (deltay > 0.25):
- print "stoj "
- self.power1 = 0
- self.power2 = 0
- self.switch1 = True
- else:
- print "hodaj"
- self.power1 = 35
- self.power2 = 35
- self.angle1 = 180
- self.angle2 = 180
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.rotation1 = 0
- self.rotation2 = 0
- self.power1 = 0
- self.power2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- ' prva tocka '
- print "prva tocka"
- while (abs(self.pose1.theta) > 5) or ( abs(self.pose2.theta - self.pose1.theta) > 5 ):
- print "popravljam dvicu"
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y"
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power1 = 10
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.02):
- print "ravna po x"
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power1 = 10
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- 'micanje po x'
- while not(rospy.is_shutdown()) and self.switch2 == False:
- while (abs(self.pose1.theta) > 3) or ( abs(self.pose2.theta - self.pose1.theta) > 3 ):
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y(ou suck)"
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power1 = 0
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.03):
- print "ravna po x"
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power1 = 0
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- deltax = abs(((self.marker2.x + self.marker.x)/2) - self.pose1.x)
- print "deltax: "
- print deltax
- razlika = self.pose1.x - self.pose2.x
- print "razlika: "
- print razlika
- #print "lajna po iksici"
- if (((self.marker2.x + self.marker.x)/2) > self.pose1.x):
- self.angle1 = -90
- self.angle2 = -90
- else:
- self.angle1 = 90
- self.angle2 = 90
- if (deltax < 0.05):
- self.power1 = 0
- self.power2 = 0
- self.switch2 = True
- else:
- self.power1 = 35
- self.power2 = 35
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- self.rotation1 = 0
- self.rotation2 = 0
- self.power1 = 0
- self.power2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- ' druga tocka'
- while (abs(self.pose1.theta) > 5) or ( abs(self.pose2.theta - self.pose1.theta) > 5 ):
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y"
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power1 = 10
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.02):
- print "ravna po x"
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power1 = 10
- self.power2 = 20
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- ' prolazi kroz tunel '
- while not(rospy.is_shutdown()) and self.switch3 == False:
- while (abs(self.pose1.theta) > 5) or ( abs(self.pose2.theta - self.pose1.theta) > 5 ):
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = -int(self.pose1.theta*(100./180))
- self.rotation2 = -int(self.pose2.theta*(100./180))
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while (abs(self.pose1.x - self.pose2.x) > 0.02):
- print "ravna po x"
- self.power1 = 0
- self.angle2 = copysign( 90 , self.pose2.x - self.pose1.x)
- self.power2 = 15
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- while ( (self.pose1.y - self.pose2.y) > 0.49 or (self.pose1.y - self.pose2.y) < 0.41 ):
- print "poravnava po y"
- if ( (self.pose1.y - self.pose2.y) > 0.49 ):
- self.angle2 = 0
- else:
- self.angle2 = 180
- self.power1 = 0
- self.power2 = 10
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- print "samo gore misko"
- if (self.marker2.y + 0.2 < self.pose2.y):
- self.power1 = 0
- self.power2 = 0
- self.switch3 = True
- else:
- self.power1 = 35
- self.power2 = 35
- self.angle1 = 0
- self.angle2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- print "stoooooooooooooj"
- self.power1 = 0
- self.power2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- sys.exit()
- def niz1(self):
- self.paket1=pack('cccbbbbbbbbbbbbbbbbbBB','P','K','T', self.power1,(self.angle1/2), self.rotation1, self.staticTilt, self.movingTilt, self.onoff1, self.accX, self.accY, self.sliders1, self.sliders2, self.sliders3, self.sliders4, self.sliders5, self.sliders6, self.sliders7, self.sliders8, self.sliders9, (self.duration/256), (self.duration%256))
- def niz2(self):
- self.paket2=pack('cccbbbbbbbbbbbbbbbbbBB','P','K','T', self.power2,(self.angle2/2), self.rotation2, self.staticTilt, self.movingTilt, self.onoff2, self.accX, self.accY, self.sliders1, self.sliders2, self.sliders3, self.sliders4, self.sliders5, self.sliders6, self.sliders7, self.sliders8, self.sliders9, (self.duration/256), (self.duration%256))
- def nula(self):
- s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s1.connect((self.IP1, self.Port))
- s2.connect((self.IP2, self.Port))
- self.power1 = 0
- self.angle1 = 0
- self.power2 = 0
- self.angle2 = 0
- self.rotation1 = 0
- self.rotation2 = 0
- a1 = ByteMultiArray(data=[self.power1, self.angle1, self.rotation1])
- a2 = ByteMultiArray(data=[self.power2, self.angle2,self.rotation2])
- self.pub1.publish(a1)
- self.pub2.publish(a2)
- time.sleep(0.2)
- if __name__ == '__main__':
- try:
- rospy.init_node('Control', anonymous = True)
- Hex = HexaGuide()
- Hex.nula()
- Hex.run()
- rospy.spin()
- except (rospy.ROSInterruptException,KeyboardInterrupt):
- Hex.nula()
- s1.close()
- s2.close()
- sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement