- Ev3 better exception handling
- lasertracker: reverted PID differntial output - lasertracker: added file trace output git-svn-id: http://moon:8086/svn/software/trunk/projects/opencv@350 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
+11
-1
@@ -76,7 +76,7 @@ class Port(object):
|
|||||||
self._port_str = port_str
|
self._port_str = port_str
|
||||||
self.sock = None
|
self.sock = None
|
||||||
self.mode = 'Unknown'
|
self.mode = 'Unknown'
|
||||||
if (self.sock is None):
|
while (self.sock is None):
|
||||||
try:
|
try:
|
||||||
addr = self._port_str.split(':')
|
addr = self._port_str.split(':')
|
||||||
_ = socket.inet_aton(addr[0])
|
_ = socket.inet_aton(addr[0])
|
||||||
@@ -84,8 +84,13 @@ class Port(object):
|
|||||||
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||||
self.sock.connect((addr[0], int(addr[1])))
|
self.sock.connect((addr[0], int(addr[1])))
|
||||||
self.mode = "TCP"
|
self.mode = "TCP"
|
||||||
|
break
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
print ("Can't connect to " + self._port_str)
|
||||||
|
raise (e)
|
||||||
|
|
||||||
|
try:
|
||||||
self.sock = serial.Serial(port=self._port_str,
|
self.sock = serial.Serial(port=self._port_str,
|
||||||
baudrate=self.RFCOMM_BAUDRATE,
|
baudrate=self.RFCOMM_BAUDRATE,
|
||||||
bytesize=serial.EIGHTBITS,
|
bytesize=serial.EIGHTBITS,
|
||||||
@@ -99,6 +104,11 @@ class Port(object):
|
|||||||
interCharTimeout=None)
|
interCharTimeout=None)
|
||||||
|
|
||||||
self.mode = 'Serial'
|
self.mode = 'Serial'
|
||||||
|
break
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print ("Can't open " + self._port_str)
|
||||||
|
raise (e)
|
||||||
|
|
||||||
def read(self, size, timeout=1.0):
|
def read(self, size, timeout=1.0):
|
||||||
if self.mode == 'Serial':
|
if self.mode == 'Serial':
|
||||||
|
|||||||
+13
-10
@@ -40,11 +40,11 @@ ap.add_argument("-x", "--width", type=int, default=320,
|
|||||||
help="width")
|
help="width")
|
||||||
ap.add_argument("-y", "--height", type=int, default=240,
|
ap.add_argument("-y", "--height", type=int, default=240,
|
||||||
help="height")
|
help="height")
|
||||||
ap.add_argument("-kp", "--kp", type=float, default=6.0, # 1.0
|
ap.add_argument("-kp", "--kp", type=float, default=2.0, # 1.0
|
||||||
help="kp")
|
help="kp")
|
||||||
ap.add_argument("-ki", "--ki", type=float, default=2.0, # 0.2
|
ap.add_argument("-ki", "--ki", type=float, default=0.1, # 0.2
|
||||||
help="ki")
|
help="ki")
|
||||||
ap.add_argument("-kd", "--kd", type=float, default=2.0, # 8.0
|
ap.add_argument("-kd", "--kd", type=float, default=6.0, # 8.0
|
||||||
help="kd")
|
help="kd")
|
||||||
args = vars(ap.parse_args())
|
args = vars(ap.parse_args())
|
||||||
|
|
||||||
@@ -63,7 +63,6 @@ class PidControl(object):
|
|||||||
self.kpid = kpid
|
self.kpid = kpid
|
||||||
self.errorLast = 0
|
self.errorLast = 0
|
||||||
self.errorAccu = 0
|
self.errorAccu = 0
|
||||||
self.pidValue = 0
|
|
||||||
|
|
||||||
def paramSet(self, kpid):
|
def paramSet(self, kpid):
|
||||||
self.kpid = kpid
|
self.kpid = kpid
|
||||||
@@ -80,10 +79,8 @@ class PidControl(object):
|
|||||||
d = error - self.errorLast
|
d = error - self.errorLast
|
||||||
self.errorLast = error
|
self.errorLast = error
|
||||||
pid = self.kpid[0]*error + self.kpid[1]*self.errorAccu + self.kpid[2]*d
|
pid = self.kpid[0]*error + self.kpid[1]*self.errorAccu + self.kpid[2]*d
|
||||||
dpid = pid - self.pidValue
|
|
||||||
self.pidValue = pid
|
|
||||||
|
|
||||||
return (pid, dpid)
|
return pid
|
||||||
|
|
||||||
class LaserTrack(RgbProcess):
|
class LaserTrack(RgbProcess):
|
||||||
def __init__(self, name, resolution=(320, 240, 3), numEntries=2, next=None, brick=None, kpid=(0,0,0), preview=None):
|
def __init__(self, name, resolution=(320, 240, 3), numEntries=2, next=None, brick=None, kpid=(0,0,0), preview=None):
|
||||||
@@ -97,6 +94,7 @@ class LaserTrack(RgbProcess):
|
|||||||
self.pidCtrlX = PidControl(kpid)
|
self.pidCtrlX = PidControl(kpid)
|
||||||
self.pidCtrlY = PidControl(kpid)
|
self.pidCtrlY = PidControl(kpid)
|
||||||
self.preview = preview
|
self.preview = preview
|
||||||
|
self.fileTrace = open('lasertrack.trace', 'w')
|
||||||
|
|
||||||
def onFirstFrame(self):
|
def onFirstFrame(self):
|
||||||
self.sendBrick(0, 0)
|
self.sendBrick(0, 0)
|
||||||
@@ -104,6 +102,7 @@ class LaserTrack(RgbProcess):
|
|||||||
def onLastFrame(self):
|
def onLastFrame(self):
|
||||||
print('onLastFrame')
|
print('onLastFrame')
|
||||||
self.sendBrick(0, 0)
|
self.sendBrick(0, 0)
|
||||||
|
self.fileTrace.close()
|
||||||
|
|
||||||
def onProcess(self):
|
def onProcess(self):
|
||||||
data = self.read(0.1)
|
data = self.read(0.1)
|
||||||
@@ -156,16 +155,20 @@ class LaserTrack(RgbProcess):
|
|||||||
errorY = -100.0*(float(y)/self.res[1] - 0.5)
|
errorY = -100.0*(float(y)/self.res[1] - 0.5)
|
||||||
else:
|
else:
|
||||||
if self.isVisible:
|
if self.isVisible:
|
||||||
|
self.pidCtrlX.reset()
|
||||||
|
self.pidCtrlY.reset()
|
||||||
print ("NOT Visible")
|
print ("NOT Visible")
|
||||||
self.isVisible = False
|
self.isVisible = False
|
||||||
|
|
||||||
|
self.fileTrace.write(str(errorX) + " " + str(errorY) + "\n")
|
||||||
|
|
||||||
# update PID
|
# update PID
|
||||||
(motorX, dmotorX) = self.pidCtrlX.process(errorX)
|
motorX = self.pidCtrlX.process(errorX)
|
||||||
(motorY, dmotorY) = self.pidCtrlY.process(errorY)
|
motorY = self.pidCtrlY.process(errorY)
|
||||||
|
|
||||||
# Update brick
|
# Update brick
|
||||||
if self.isVisible:
|
if self.isVisible:
|
||||||
self.sendBrick(dmotorX, dmotorY)
|
self.sendBrick(motorX, motorY)
|
||||||
else:
|
else:
|
||||||
self.sendBrick(0, 0)
|
self.sendBrick(0, 0)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user