Documentation
Example Python Telnet Program – Rotate until Find Dock
Here is another Python Example that incrementally rotates the robot, looking for the dock. If it finds it, it starts the auto-docking routine, and exits.
It sets up the same sendString() and waitForReplySearch() text conversation functions as the previous example, and adds the rotateAndCheckForDock() function. This function rotates the robot a bit with the ‘move right’ command, then checks ambient lighting using the ‘getlightlevel’ command—if it’s too dark, it will turn on the floodlight (if connected).
It then sends the ‘dockgrab’ command to check if the dock target is in view: if the STATE variable dockxsize > 0 (target greater than 0 pixels in width), it knows it has found it, and will start the autodocking routine by sending ‘autodock go’.
The program is listed below – an updated version can also be viewed and downloaded from our google code site
# findock.py
import socket
import re
import time
host = "127.0.0.1"
username = "admin"
password = "KurwGDyd+oy+ZZ3S4qMn/wjeKOQ=" #encrypted password
port = 4444
#FUNCTIONS
def sendString(s):
oculusock.sendall(s+"\r\n")
print("> "+s)
def waitForReplySearch(p):
while True:
servermsg = (oculusfileIO.readline()).strip()
print(servermsg)
if re.search(p, servermsg):
break
return servermsg
def rotateAndCheckForDock():
# rotate a bit
sendString("move right")
time.sleep(0.6)
sendString("move stop")
time.sleep(0.5) # allow to come to full stop
# if too dark, turn floodlight on
sendString("getlightlevel")
s = waitForReplySearch("getlightlevel:")
lightlevel = int(re.findall("\d+",s)[0])
if lightlevel < 25:
sendString("floodlight on")
# check if dock in view
sendString("dockgrab")
s = waitForReplySearch("<state> dockxsize")
dockwidth = int(re.findall("\d+",s)[0])
if dockwidth > 0:
return True
else:
return False
#MAIN
#connect
oculusock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
oculusock.connect((host, port))
oculusfileIO = oculusock.makefile()
#login
waitForReplySearch("^<telnet> LOGIN")
sendString(username+":"+password)
#tell any connections what's about to happen
sendString("messageclients launching finddock.py")
#turn camera on if it isn't already
sendString("state stream")
s = waitForReplySearch("<state> stream")
if not re.search("(camera)|(camandmic)$", s):
sendString("publish camera")
time.sleep(5)
#set camera to horizontal
sendString("cameracommand horiz")
#keep rotating and looking for dock, start autodock if found
dockfound = False
for i in range(20):
sendString("messageclients attempt #: "+str(i))
if rotateAndCheckForDock():
dockfound = True
break
if dockfound:
sendString("autodock go")
waitForReplySearch("<state> dockstatus docked")
else:
sendString("messageclients finddock.py failed")
oculusfileIO.close()
oculusock.close()
|
|
|
|
|
|