Skip to content

Commit

Permalink
Merge pull request #3 from sjdayday/master
Browse files Browse the repository at this point in the history
generalize from Morse to Mover, and use released artifacts, not snapshots.  Supports the functions in this paper:  http://arxiv.org/abs/1607.06875
Tagged as "paper"
  • Loading branch information
sjdayday authored Oct 28, 2016
2 parents 6d54b81 + e53ce2c commit 1d828ee
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 43 deletions.
2 changes: 1 addition & 1 deletion analyzer.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
#sh starter.sh &
export ECG_FED=FED1
export JYTHONPATH=../ecg_framework_code/build/compling.core.jar:../ecg_framework_code/src/main/nluas/language
jython -J-Xmx3g -m analyzer ../ecg_grammars/compRobots.prefs
jython -J-Xmx5g -m analyzer ../ecg_grammars/compRobots.prefs
#jython -m analyzer ../ecg_grammars/compRobots.prefs
#python3 src/main/robots/robots_ui.py AgentUI
Empty file modified morse.sh
100644 → 100755
Empty file.
2 changes: 2 additions & 0 deletions src/main/robots/queue_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ def __init__(self, commandQ, solver, simulator):
## print('SolverCommandProcessor init complete')

def checkAndRunCommand(self):
#print('queue_solver.checkAndRunCommand')
if not self.commandQ.empty():
if (self.next_command_priority() < self.last_command_priority()) or self.command_done or self.other_command_done or (self.continue_dequeue and self.suspended_command_completed):
command = self.commandQ.get()
Expand Down Expand Up @@ -122,6 +123,7 @@ def set_continue_expected(self, expected):


def propertyChange(self,javaObject):
#print('queue_solver.propertyChange: ',javaObject.getPropertyName())
if javaObject.getPropertyName() == 'state updated':
#print('SolverCommandProcessor propertyChange, about to check and run command')
self.checkAndRunCommand()
Expand Down
3 changes: 1 addition & 2 deletions src/main/robots/xnet_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ def build_xnet(self, xnet):

def add_command_processor_as_listener(self, listener):
# listen to all state changes; used to get control to check for new commands
## print('in simulator.addCommandProcessorAsListener')
self.command_processor_listener = listener
if not self.xnet == None:
self.xnet.listenAllStateChanges(self.command_processor_listener)
Expand Down Expand Up @@ -114,4 +113,4 @@ def start(self):
self.started = True

def isStarted(self):
return self.started
return self.started
2 changes: 1 addition & 1 deletion src/main/robots/xschema/jvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class PetriNetJVM:
alreadyRunning = False
def __init__(self):
if not PetriNetJVM.alreadyRunning:
cp = '-Djava.class.path=$M2REPO/uk/ac/imperial/pipe-core/1.0.3-SNAPSHOT/pipe-core-1.0.3-SNAPSHOT.jar:$M2REPO/uk/ac/imperial/pipe-markov-chain/1.0.2-SNAPSHOT/pipe-markov-chain-1.0.2-SNAPSHOT.jar:$M2REPO/org/apache/logging/log4j/log4j-api/2.3/log4j-api-2.3.jar:$M2REPO/org/apache/logging/log4j/log4j-core/2.3/log4j-core-2.3.jar:$M2REPO/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0.jar:$M2REPO/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2.jar:$M2REPO/org/objenesis/objenesis/2.1/objenesis-2.1.jar:$M2REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:$M2REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar:$M2REPO/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:$M2REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar:$M2REPO/commons-collections/commons-collections/3.0/commons-collections-3.0.jar:$M2REPO/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:$M2REPO/com/google/guava/guava/17.0/guava-17.0.jar:$M2REPO/de/twentyeleven/skysail/jgraphx-osgi/1.10.3.1/jgraphx-osgi-1.10.3.1.jar:$M2REPO/org/antlr/antlr4/4.2/antlr4-4.2.jar:$M2REPO/org/antlr/antlr4-runtime/4.2/antlr4-runtime-4.2.jar:$M2REPO/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar:$M2REPO/org/antlr/antlr4-annotations/4.2/antlr4-annotations-4.2.jar:$M2REPO/org/antlr/antlr-runtime/3.5/antlr-runtime-3.5.jar:$M2REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:$M2REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar:$M2REPO/org/antlr/ST4/4.0.7/ST4-4.0.7.jar:$M2REPO/javax/json/javax.json-api/1.0/javax.json-api-1.0.jar:$M2REPO/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar:$M2REPO/edu/berkeley/icsi/robot-xnet/1.0.1-SNAPSHOT/robot-xnet-1.0.1-SNAPSHOT.jar'
cp = '-Djava.class.path=$M2REPO/uk/ac/imperial/pipe-core/1.1.0/pipe-core-1.1.0.jar:$M2REPO/uk/ac/imperial/pipe-markov-chain/1.1.0/pipe-markov-chain-1.1.0.jar:$M2REPO/org/apache/logging/log4j/log4j-api/2.3/log4j-api-2.3.jar:$M2REPO/org/apache/logging/log4j/log4j-core/2.3/log4j-core-2.3.jar:$M2REPO/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0.jar:$M2REPO/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2.jar:$M2REPO/org/objenesis/objenesis/2.1/objenesis-2.1.jar:$M2REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:$M2REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar:$M2REPO/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:$M2REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar:$M2REPO/commons-collections/commons-collections/3.0/commons-collections-3.0.jar:$M2REPO/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:$M2REPO/com/google/guava/guava/17.0/guava-17.0.jar:$M2REPO/de/twentyeleven/skysail/jgraphx-osgi/1.10.3.1/jgraphx-osgi-1.10.3.1.jar:$M2REPO/org/antlr/antlr4/4.2/antlr4-4.2.jar:$M2REPO/org/antlr/antlr4-runtime/4.2/antlr4-runtime-4.2.jar:$M2REPO/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar:$M2REPO/org/antlr/antlr4-annotations/4.2/antlr4-annotations-4.2.jar:$M2REPO/org/antlr/antlr-runtime/3.5/antlr-runtime-3.5.jar:$M2REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:$M2REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar:$M2REPO/org/antlr/ST4/4.0.7/ST4-4.0.7.jar:$M2REPO/javax/json/javax.json-api/1.0/javax.json-api-1.0.jar:$M2REPO/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar:$M2REPO/edu/berkeley/icsi/robot-xnet/1.0.1/robot-xnet-1.0.1.jar'
expcp = os.path.expandvars(cp)
log4jdir = '-Dlog4j.configurationFile=${PWD}/src/main/log4j2.xml'
explog4jdir = os.path.expandvars(log4jdir)
Expand Down
60 changes: 30 additions & 30 deletions src/main/robots/xschema/moveXnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,61 +24,61 @@ def setpos(self, pos):
self.pos = Struct(**pos)

def currentLocation(self, currentX, currentY):
self.morseChannel.updateCurrentLocation(currentX+0.0, currentY+0.0)
self.motionChannel.updateCurrentLocation(currentX+0.0, currentY+0.0)

def targetLocation(self, targetX, targetY):
## print('move x, y: ', targetX, targetY)
self.morseChannel.updateTargetLocation(targetX+0.0, targetY+0.0)
self.motionChannel.updateTargetLocation(targetX+0.0, targetY+0.0)

def setSpeed(self, speed):
self.morseChannel.setSpeed(speed+0.0)
self.motionChannel.setSpeed(speed+0.0)

def setTolerance(self, tolerance):
self.morseChannel.setTolerance(tolerance+0.0)
self.motionChannel.setTolerance(tolerance+0.0)

def setCollide(self, collide):
self.morseChannel.setCollide(collide)
self.motionChannel.setCollide(collide)

def moveMorse(self, command):
def moveMover(self, command):
motion = command['motion']
#where = { 'x':['x'], 'y':['y'], 'z':0.0, 'collide':False, 'speed':2.0, 'tolerance':4}
#print(self.printts(), 'where: ', motion)
self.robot.motion.publish(motion)
#TODO sleeping should be done in the xnet Wait timed transition, when it works
#self.robot._morse.sleep(0.1)

def suspendMorse(self, command):
#print('suspendMorse')
def suspendMover(self, command):
#print('suspendMover')
self.robot.motion.stop()

def resumeMorse(self, command):
#print('resumeMorse')
def resumeMover(self, command):
#print('resumeMover')
self.robot.motion.resume()

def restartMorse(self, command):
#print('restartMorse')
def restartMover(self, command):
#print('restartMover')
#TODO
self.robot.motion.resume()

def updateMorsePosition(self, command):
#print('updateMorsePosition', self.pos.x, self.pos.y)
def updateMoverPosition(self, command):
#print('updateMoverPosition', self.pos.x, self.pos.y)
self.currentLocation(self.pos.x, self.pos.y)
#self.robot._morse.sleep(0.1)
#TODO
#self.robot.motion.resume()
if self.robot.motion.get_status() == 'Arrived':
#print('arrived!')
self.morseChannel.setStatus(2)
self.motionChannel.setStatus(2)
# 2 = arrived

def callMorse(self, commandJson):
## print('in callMorse')
def callMover(self, commandJson):
## print('in callMover')
command = json.loads(commandJson)
#self.queue.put(command)
#print('command dict: ', command)
#TODO: validate
methodName = command['command']
#print(self.printts(), ' callMorse: method to invoke: ',methodName)
#print(self.printts(), ' callMover: method to invoke: ',methodName)
#print(self.__dict__)
self.commands[methodName](self,command)
# yield to other threads
Expand All @@ -97,21 +97,21 @@ def addCommand(self, command):
def buildCommands(self):
#print(self.__dict__)
self.commands = {}
self.addCommand('moveMorse')
self.addCommand('suspendMorse')
self.addCommand('resumeMorse')
self.addCommand('restartMorse')
self.addCommand('updateMorsePosition')
self.addCommand('moveMover')
self.addCommand('suspendMover')
self.addCommand('resumeMover')
self.addCommand('restartMover')
self.addCommand('updateMoverPosition')
#print('commands: ',self.commands)

def setup(self):
self.morseChannel = JClass('edu.berkeley.icsi.xnet.MorseChannel')()
proxy = JProxy('edu.berkeley.icsi.xnet.Morse', inst=self)
self.morseChannel.setMorse(proxy)
self.runner.setTransitionContext("Move", self.morseChannel);
self.runner.setTransitionContext("SuspendT", self.morseChannel);
self.runner.setTransitionContext("ResumeT", self.morseChannel);
self.runner.setTransitionContext("RestartT", self.morseChannel);
self.motionChannel = JClass('edu.berkeley.icsi.xnet.MotionChannel')()
proxy = JProxy('edu.berkeley.icsi.xnet.Mover', inst=self)
self.motionChannel.setMover(proxy)
self.runner.setTransitionContext("Move", self.motionChannel);
self.runner.setTransitionContext("SuspendT", self.motionChannel);
self.runner.setTransitionContext("ResumeT", self.motionChannel);
self.runner.setTransitionContext("RestartT", self.motionChannel);

self.buildCommands()
## print('MoveXnet setup complete')
Expand Down
22 changes: 13 additions & 9 deletions src/main/robots/xschema/petrinet.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def printts(self):
return st

def printState(self):
#print('in printState')
stateList = []
state = self.javaObject.getNewValue().state
it = state.getPlaces().iterator()
Expand All @@ -34,6 +35,7 @@ def printState(self):
#print(self.printts(), stateList)

def propertyChange(self,javaObject):
#print('firing listener property change: ', javaObject.getPropertyName())
if javaObject.getPropertyName() == 'state updated':
self.javaObject = javaObject
self.printState()
Expand Down Expand Up @@ -78,19 +80,21 @@ def updateAttribute(self, value):
#print(self.petrinet.__dict__)

def propertyChange(self,javaObject):
#print('petrinet.propertyChange: ',javaObject.getPropertyName())
#print(self.printts(), 'updated place ', end='')
#print(self.placeId, end='')
#print(': ', end='')
#print(javaObject.getNewValue())
self.javaObject = javaObject
self.count = self.convertObjectToDigit()
# updateTargetField delegated to subclasses
self.updateTargetField()
if self.call_evaluator():
if self.evaluatorArgs is None:
self.evaluator()
else:
self.evaluator(self.evaluatorArgs)
if javaObject.getPropertyName() == 'tokens':
self.javaObject = javaObject
self.count = self.convertObjectToDigit()
# updateTargetField delegated to subclasses
self.updateTargetField()
if self.call_evaluator():
if self.evaluatorArgs is None:
self.evaluator()
else:
self.evaluator(self.evaluatorArgs)

def getPlaceId(self):
return self.placeId
Expand Down

0 comments on commit 1d828ee

Please sign in to comment.