$search
00001 #!/usr/bin/env python 00002 # -*- coding: utf-8 -*- 00003 # 00004 # Software License Agreement (BSD License) 00005 # 00006 # Copyright (c) 2010-2011, 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__ = 'Antons Rebguns' 00038 __copyright__ = 'Copyright (c) 2010-2011 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_driver') 00050 00051 from dynamixel_driver import dynamixel_io 00052 00053 if __name__ == '__main__': 00054 parser = OptionParser(usage='Usage: %prog [options] OLD_ID NEW_ID', description='Changes the unique ID of a Dynamixel servo motor.') 00055 parser.add_option('-p', '--port', metavar='PORT', default='/dev/ttyUSB0', 00056 help='motors of specified controllers are connected to PORT [default: %default]') 00057 parser.add_option('-b', '--baud', metavar='BAUD', type="int", default=1000000, 00058 help='connection to serial port will be established at BAUD bps [default: %default]') 00059 00060 (options, args) = parser.parse_args(sys.argv) 00061 00062 if len(args) < 3: 00063 parser.print_help() 00064 exit(1) 00065 00066 port = options.port 00067 baudrate = options.baud 00068 old_id = int(args[1]) 00069 new_id = int(args[2]) 00070 00071 try: 00072 dxl_io = dynamixel_io.DynamixelIO(port, baudrate) 00073 except dynamixel_io.SerialOpenError, soe: 00074 print 'ERROR:', soe 00075 else: 00076 print 'Changing motor id from %d to %d...' %(old_id, new_id), 00077 if dxl_io.ping(old_id): 00078 dxl_io.set_id(old_id, new_id) 00079 print ' done' 00080 print 'Verifying new id...' , 00081 if dxl_io.ping(new_id): 00082 print ' done' 00083 else: 00084 print 'ERROR: The motor did not respond to a ping to its new id.' 00085 else: 00086 print 'ERROR: The specified motor did not respond to id %d. Make sure to specify the correct baudrate.' % old_id