def __init__(self,*args,**kwargs): rospy.loginfo('Initializing mightex_controller_node...') self._initialized = False self._cmd_current_sub = rospy.Subscriber('~cmd_current',CmdCurrent,self._cmd_current_callback) self._cmd_off_sub = rospy.Subscriber('~cmd_off',CmdChannel,self._cmd_off_callback) self._cmd_all_off_sub = rospy.Subscriber('~cmd_all_off',Empty,self._cmd_all_off_callback) self._dev = MightexDevice() rospy.loginfo('mightex_controller_node initialized!') self._setup = False self._setup_device() self._initialized = True
class MightexController(object): def __init__(self,*args,**kwargs): rospy.loginfo('Initializing mightex_controller_node...') self._initialized = False self._cmd_current_sub = rospy.Subscriber('~cmd_current',CmdCurrent,self._cmd_current_callback) self._cmd_off_sub = rospy.Subscriber('~cmd_off',CmdChannel,self._cmd_off_callback) self._cmd_all_off_sub = rospy.Subscriber('~cmd_all_off',Empty,self._cmd_all_off_callback) self._dev = MightexDevice() rospy.loginfo('mightex_controller_node initialized!') self._setup = False self._setup_device() self._initialized = True def _setup_device(self): setup_attempts_max = 10 setup_attempt = 0 while (not self._setup) and (setup_attempt < setup_attempts_max): setup_attempt += 1 try: self._channel_count = self._dev.get_channel_count() self._enabled = [] for channel in range(self._channel_count): self._enabled.append(False) if self._channel_count == 0: rospy.loginfo('mightex_controller found no device channels!') else: rospy.loginfo('mightex_controller found {0} device channels!'.format(self._channel_count)) self._setup = True current_max = rospy.get_param('~current_max') for channel in range(self._channel_count): self._dev.set_normal_parameters(channel,current_max,1) except ReadError: pass def _cmd_current_callback(self,data): if self._initialized: # rospy.loginfo('mightex_controller channel: {0}, current {1}'.format(data.channel,data.current)) if not self._setup: self._setup_device() channel = data.channel current = data.current if (channel >= 0) and (channel < self._channel_count): if current > 0: self._dev.set_normal_current(channel,current) if not self._enabled[channel]: self._dev.set_mode_normal(channel) self._enabled[channel] = True else: self._dev.set_mode_disable(channel) self._enabled[channel] = False def _cmd_off_callback(self,data): if self._initialized: # rospy.loginfo('mightex_controller cmd_off') if not self._setup: self._setup_device() channel = data.channel if (channel >= 0) and (channel < self._channel_count): self._dev.set_mode_disable(channel) self._enabled[channel] = False def _cmd_all_off_callback(self,data): if self._initialized: # rospy.loginfo('mightex_controller cmd_all_off') if not self._setup: self._setup_device() self.all_off() def all_off(self): if self._initialized: if not self._setup: self._setup_device() for channel in range(self._channel_count): self._dev.set_mode_disable(channel) self._enabled[channel] = False