コード例 #1
0
 def motor_states(self, motors, robot_name):
     # Dynamixel monitor start
     if not self.monitor_started:
         for i, m in enumerate(motors):
             if m['hardware'] == 'pololu':
                 self.pololu_boards[m['topic']] = {}
         self.start_motors_monitor(robot_name)
         self.monitor_started = True
         # Sleep some time so first results if motors are alive will have time to return
         time.sleep(0.5)
     status = {}
     pololu_boards = {}
     for i, m in enumerate(motors):
         if m['hardware'] == 'pololu':
             if not m['topic'] in self.pololu_boards.keys():
                 self.pololu_boards[m['topic']] = {}
             if m['name'] in self.pololu_boards[m['topic']].keys():
                 m['motor_state'] = {
                     'position': self.pololu_boards[m['topic']][m['name']]
                 }
                 m['error'] = 2
             else:
                 m['error'] = 1
             motor = PololuMotor(m['name'], m)
             #Conert to angles
             m['init'] = round(math.degrees(motor.get_angle(m['init'] * 4)))
             m['min'] = round(math.degrees(motor.get_angle(m['min'] * 4)))
             m['max'] = round(math.degrees(motor.get_angle(m['max'] * 4)))
         #Dynamixel motors
         else:
             if m['motor_id'] in self.dynamixel_motors_states.keys():
                 motors[i]['error'] = 0
                 motors[i]['motor_state'] = self.dynamixel_motors_states[
                     m['motor_id']]
             else:
                 # Motor is not on
                 motors[i]['error'] = 1
             m['max'] = round(
                 math.degrees(Configs.dynamixel_angle(m, m['max'])))
             m['min'] = round(
                 math.degrees(Configs.dynamixel_angle(m, m['min'])))
             # Init has to be replaced last, because calculation depends on it
             m['init'] = round(
                 math.degrees(Configs.dynamixel_angle(m, m['init'])))
     return motors
コード例 #2
0
ファイル: reporter.py プロジェクト: redtil/HEAD
 def motor_states(self, motors, robot_name):
     # Dynamixel monitor start
     if not self.monitor_started:
         for i,m in enumerate(motors):
             if m['hardware'] == 'pololu':
                 self.pololu_boards[m['topic']] = {}
         self.start_motors_monitor(robot_name)
         self.monitor_started = True
         # Sleep some time so first results if motors are alive will have time to return
         time.sleep(0.5)
     status = {}
     pololu_boards = {}
     for i, m in enumerate(motors):
         if m['hardware'] == 'pololu':
             if not m['topic'] in self.pololu_boards.keys():
                 self.pololu_boards[m['topic']] = {}
             if m['name'] in self.pololu_boards[m['topic']].keys():
                 m['motor_state'] = {'position': self.pololu_boards[m['topic']][m['name']]}
                 m['error'] = 2
             else:
                 m['error'] = 1
             motor = PololuMotor(m['name'], m)
             #Conert to angles
             m['init'] = round(math.degrees(motor.get_angle(m['init']*4)))
             m['min'] = round(math.degrees(motor.get_angle(m['min']*4)))
             m['max'] = round(math.degrees(motor.get_angle(m['max']*4)))
         #Dynamixel motors
         else:
             if m['motor_id'] in self.dynamixel_motors_states.keys():
                 motors[i]['error'] = 0
                 motors[i]['motor_state'] = self.dynamixel_motors_states[m['motor_id']]
             else:
                 # Motor is not on
                 motors[i]['error'] = 1
             m['max'] = round(math.degrees(Configs.dynamixel_angle(m, m['max'])))
             m['min'] = round(math.degrees(Configs.dynamixel_angle(m, m['min'])))
             # Init has to be replaced last, because calculation depends on it
             m['init'] = round(math.degrees(Configs.dynamixel_angle(m, m['init'])))
     return motors