Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 __author__ = 'Cody Jorgensen, Antons Rebguns'
00038 __copyright__ = 'Copyright (c) 2010-2011 Cody Jorgensen, Antons Rebguns'
00039
00040 __license__ = 'BSD'
00041 __maintainer__ = 'Antons Rebguns'
00042 __email__ = 'anton@email.arizona.edu'
00043
00044
00045 import sys
00046 from optparse import OptionParser
00047
00048 import roslib
00049 roslib.load_manifest('dynamixel_hardware_interface')
00050
00051 import dynamixel_io
00052
00053 def print_data(values):
00054 ''' Takes a dictionary with all the motor values and does a formatted print.
00055 '''
00056 if values['freespin']:
00057 print '''\
00058 Motor %(id)d is connected:
00059 Freespin: True
00060 Model ------------------- %(model)s
00061 Current Speed ----------- %(velocity)d
00062 Current Temperature ----- %(temperature)d%(degree_symbol)sC
00063 Current Voltage --------- %(voltage).1fv
00064 Current Load ------------ %(load)d
00065 Moving ------------------ %(moving)s
00066 ''' %values
00067 else:
00068 print '''\
00069 Motor %(id)d is connected:
00070 Freespin: False
00071 Model ------------------- %(model)s
00072 Min Angle --------------- %(min)d
00073 Max Angle --------------- %(max)d
00074 Current Position -------- %(position)d
00075 Current Speed ----------- %(velocity)d
00076 Current Temperature ----- %(temperature)d%(degree_symbol)sC
00077 Current Voltage --------- %(voltage).1fv
00078 Current Load ------------ %(load)d
00079 Moving ------------------ %(moving)s
00080 ''' %values
00081
00082 if __name__ == '__main__':
00083 usage_msg = 'Usage: %prog [options] IDs'
00084 desc_msg = 'Prints the current status of specified Dynamixel servo motors.'
00085 epi_msg = 'Example: %s --port=/dev/ttyUSB1 --baud=57600 1 2 3 4 5' % sys.argv[0]
00086
00087 parser = OptionParser(usage=usage_msg, description=desc_msg, epilog=epi_msg)
00088 parser.add_option('-p', '--port', metavar='PORT', default='/dev/ttyUSB0',
00089 help='motors of specified controllers are connected to PORT [default: %default]')
00090 parser.add_option('-b', '--baud', metavar='BAUD', type="int", default=1000000,
00091 help='connection to serial port will be established at BAUD bps [default: %default]')
00092
00093 (options, args) = parser.parse_args(sys.argv)
00094
00095 if len(args) < 2:
00096 parser.print_help()
00097 exit(1)
00098
00099 port = options.port
00100 baudrate = options.baud
00101 motor_ids = args[1:]
00102
00103 try:
00104 dxl_io = dynamixel_io.DynamixelIO(port, baudrate)
00105 except RuntimeError, soe:
00106 print 'ERROR:', soe
00107 else:
00108 responses = 0
00109 print 'Pinging motors:'
00110 for motor_id in motor_ids:
00111 motor_id = int(motor_id)
00112 print '%d ...' % motor_id,
00113 if dxl_io.ping(motor_id):
00114 responses += 1
00115 values = dxl_io.get_feedback(motor_id)
00116 angles = dxl_io.get_angle_limits(motor_id)
00117 model = dxl_io.get_model_number(motor_id)
00118 firmware = dxl_io.get_firmware_version(motor_id)
00119 values['id'] = motor_id
00120 values['model'] = '%s (firmware version: %d)' % (dynamixel_io.get_motor_model_name(model), firmware)
00121 values['degree_symbol'] = u"\u00B0"
00122 values['min'] = angles[0]
00123 values['max'] = angles[1]
00124 values['voltage'] /= 10.0
00125 values['moving'] = str(values['moving'])
00126 print 'done'
00127 if angles[0] == 0 and angles[1] == 0:
00128 values['freespin'] = True
00129 else:
00130 values['freespin'] = False
00131 print_data(values)
00132 else:
00133 print 'error'
00134 if responses == 0:
00135 print 'ERROR: None of the specified motors responded. Make sure to specify the correct baudrate.'