Go to the documentation of this file.00001
00002
00003
00004
00005 import cgi, cgitb
00006 import os
00007 import pexpect
00008 import time
00009 cgitb.enable()
00010
00011 import popen2
00012
00013
00014 print "Content-type: text/html"
00015 print
00016
00017 print "RESULT"
00018
00019 ros_distro = "ROS_DISTRO"
00020
00021 form = cgi.FieldStorage()
00022 message = form.getvalue("action", "NO_ACTION")
00023
00024 def run(fun):
00025 out = ""
00026 v = popen2.popen4(fun)
00027 for i in v[0]:
00028 out = out + i
00029 return out
00030
00031 def run_as_robot(command):
00032 run = "su applications -c \"" + command + "\""
00033
00034 child = pexpect.spawn(run)
00035 result = child.expect(["ssword:", "(yes/no)?"])
00036 child.sendline("willow")
00037 out = ""
00038 for i in child.readlines():
00039 out = out + i
00040 return out
00041
00042
00043
00044 if (message == "GET_STATE"):
00045 print "USERS"
00046 active_user = "(UNKNOWN)"
00047 dead_users = ""
00048 message = ""
00049 for i in run("robot users --no-plist").split("\n"):
00050 if (i.find("Active User:") != -1):
00051 active_user = i.split(":")[1].strip()
00052 if (i.find("Message:") != -1):
00053 message = i.split(":")[1].strip()
00054 if (i.find("*") != -1):
00055 dead_users = dead_users + i[i.find("*") + 1:i.find("(")].strip() + ","
00056
00057
00058
00059
00060
00061 if (active_user == "applications"):
00062 print "STATE_VALID"
00063 elif (active_user == "" or active_user == "None"):
00064 print "STATE_OFF"
00065 else:
00066 print "STATE_IN_USE"
00067 print "USER:", active_user
00068 if (message != ""):
00069 print "MESSAGE:", message
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081 print
00082 elif (message == "STOP_ROBOT"):
00083 print "STOPPING_ROBOT"
00084 result = run_as_robot("yes | robot claim -m 'stopping the robot' ; yes | robot stop ; yes | robot release")
00085 print result
00086 print "DONE"
00087 elif (message == "START_ROBOT"):
00088 print "STARTING_APP_MAN"
00089 print run_as_robot("yes | robot claim -m 'running applications platform'")
00090 print run_as_robot(". /opt/ros/" + ros_distro + "/setup.bash ; . ~/.bashrc ; export ROS_ENV_LOADER=/opt/ros/" + ros_distro + "/env.sh ; nohup roslaunch pr2_app_manager whole_pr2_apps.launch > ~/run.txt &")
00091
00092 import socket
00093 s = socket.socket()
00094 connect = 0
00095
00096 while connect < 30:
00097 try:
00098 s.connect(('localhost', 11311))
00099 connect = 30
00100 s.close()
00101 except:
00102 time.sleep(1)
00103 connect += 1
00104 print "DONE"
00105 else:
00106 print "REJECT_COMMAND"
00107 print "action = STOP_ROBOT,START_ROBOT,GET_STATE"
00108