pr2_assembly_check.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 #
00003 # Software License Agreement (BSD License)
00004 #
00005 # Copyright (c) 2010, Willow Garage, Inc.
00006 # All rights reserved.
00007 #
00008 # Redistribution and use in source and binary forms, with or without
00009 # modification, are permitted provided that the following conditions
00010 # are met:
00011 #
00012 #  * Redistributions of source code must retain the above copyright
00013 #    notice, this list of conditions and the following disclaimer.
00014 #  * Redistributions in binary form must reproduce the above
00015 #    copyright notice, this list of conditions and the following
00016 #    disclaimer in the documentation and/or other materials provided
00017 #    with the distribution.
00018 #  * Neither the name of the Willow Garage nor the names of its
00019 #    contributors may be used to endorse or promote products derived
00020 #    from this software without specific prior written permission.
00021 #
00022 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00025 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00026 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 # POSSIBILITY OF SUCH DAMAGE.
00034 
00035 ##\author Kevin Watts
00036 ##\brief Checks that all devices in a PR2 are properly associated to robot
00037 
00038 PKG = 'qualification'
00039 import roslib; roslib.load_manifest(PKG)
00040 
00041 import os, sys
00042 from optparse import OptionParser
00043 
00044 import getpass
00045 import subprocess
00046 
00047 from wg_invent_client import Invent
00048 
00049 class GetIDException(Exception): pass
00050 
00051 # Document part numbers do not have to be associated to PR2
00052 DOC_PNS = ['6803642', '6803643', '6803708' ]
00053 
00054 def _ignore_pn(pn):
00055     for doc in DOC_PNS:
00056         if pn.find(doc) > -1:
00057             return True
00058     return False
00059 
00060 if __name__ == '__main__':
00061     parser = OptionParser(usage="%prog -u USERNAME -r ROBOT")
00062     parser.add_option('-u', '--username', action="store", dest="username",
00063                       default=None, metavar="USERNAME",
00064                       help="Username for WG inventory system")
00065     parser.add_option('-r', '--robot', action="store", dest="robot",
00066                       default=None, metavar="ROBOT",
00067                       help="Robot SN (10XX) to check")
00068 
00069     options,args = parser.parse_args()
00070     if not options.username:
00071         parser.error("Must provide username to WG inverntory system")
00072     if not options.robot:
00073         parser.error("Must provide valid robot SN to log")
00074 
00075     robot = '68029670' + options.robot
00076     
00077     if not len(robot) == 12:
00078         parser.error("%s is not a valid robot serial number" % options.robot)
00079 
00080     print 'Enter your password to the Willow Garage Inventory system'
00081     my_pass = getpass.getpass()
00082 
00083     iv = Invent(options.username, my_pass)
00084     if not iv.login():
00085         parser.error("Must provide valid username and password to WG inventory system")
00086     if not iv.check_serial_valid(robot):
00087         parser.error("Robot serial number %s is invalid" % options.robot)
00088 
00089     print 'Getting parts from Invent'
00090     my_parts = iv.get_sub_items(robot, True)
00091     print 'Making sure components assembled properly'
00092     print ''
00093     print ''
00094 
00095     ok = True
00096     for pt in my_parts:
00097         if _ignore_pn(pt):
00098             continue
00099 
00100         if not iv.check_assembled(pt):
00101             print >> sys.stderr, "Part %s is not assembled properly." % pt
00102             ok = False
00103 
00104     if ok:
00105         print "Robot is properly associated in Invent"
00106         sys.exit()
00107     
00108     print >> sys.stderr, "Robot is not properly assembled."
00109     sys.exit(1)


qualification
Author(s): Kevin Watts (watts@willowgarage.com), Josh Faust (jfaust@willowgarage.com)
autogenerated on Sat Dec 28 2013 17:57:34