00001 #!/usr/bin/env python 00002 00003 # Software License Agreement (BSD License) 00004 # 00005 # Copyright (c) 2013, Tokyo Opensource Robotics Kyokai Association 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 Tokyo Opensource Robotics Kyokai Association. nor the 00019 # names of its contributors may be used to endorse or promote products 00020 # derived 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: Isaac Isao Saito 00036 00037 import rospy 00038 00039 00040 class AbsractHandCommand(object): 00041 ''' 00042 Following Command design pattern, this class represents an abstract 00043 command for hand classes of NEXTAGE OPEN. 00044 ''' 00045 # TODO: Unittest is needed!!DIO_V 00046 00047 # DIO pin numbers. It's convenient to be overridden and renamed in the 00048 # derived classes to represent the specific purpose of each pin. 00049 _DIO_17 = 17 00050 _DIO_18 = 18 00051 _DIO_19 = 19 00052 _DIO_20 = 20 00053 _DIO_21 = 21 00054 _DIO_22 = 22 00055 _DIO_23 = 23 00056 _DIO_24 = 24 00057 _DIO_25 = 25 00058 _DIO_26 = 26 00059 _DIO_27 = 27 00060 _DIO_28 = 28 00061 00062 def __init__(self, hands, hand): 00063 ''' 00064 @type hands: nextage_ros_bridge.base_hands.BaseHands 00065 @type hand: str 00066 @param hand: Side of hand. Variables that are defined in 00067 nextage_ros_bridge.base_hands.BaseHands can be used 00068 { HAND_L, HAND_R }. 00069 ''' 00070 self._hands = hands 00071 self._hand = hand 00072 self._assign_dio_names() 00073 00074 def execute(self, operation): 00075 ''' 00076 Needs overriddedn, otherwise expcetion occurs. 00077 00078 @type operation: str 00079 @param operation: name of the operation. 00080 00081 @raise exception: HrpsysRosBridgeException 00082 ''' 00083 msg = 'AbsractHandCommand.execute() not extended.' 00084 rospy.logerr(msg) 00085 raise NotImplementedError(msg) 00086 00087 def _assign_dio_names(self): 00088 ''' 00089 It's recommended in the derived classes to re-assign DIO names to 00090 better represent the specific purposes of each DIO pin in there. 00091 Since doing so isn' mandatory, this method doesn't emit error even when 00092 it's not implemented. 00093 ''' 00094 pass