info_dump.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: utf-8 -*-
00003 #
00004 # Software License Agreement (BSD License)
00005 #
00006 # Copyright (c) 2010-2011, Cody Jorgensen, Antons Rebguns.
00007 # All rights reserved.
00008 #
00009 # Redistribution and use in source and binary forms, with or without
00010 # modification, are permitted provided that the following conditions
00011 # are met:
00012 #
00013 #  * Redistributions of source code must retain the above copyright
00014 #    notice, this list of conditions and the following disclaimer.
00015 #  * Redistributions in binary form must reproduce the above
00016 #    copyright notice, this list of conditions and the following
00017 #    disclaimer in the documentation and/or other materials provided
00018 #    with the distribution.
00019 #  * Neither the name of University of Arizona nor the names of its
00020 #    contributors may be used to endorse or promote products derived
00021 #    from this software without specific prior written permission.
00022 #
00023 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034 # POSSIBILITY OF SUCH DAMAGE.
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.'


dynamixel_hardware_interface
Author(s): Antons Rebguns
autogenerated on Fri Aug 28 2015 10:32:45