66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import argparse | ||
|  | import numpy | ||
|  | import time | ||
|  | import sys | ||
|  | 
 | ||
|  | import pypot.dynamixel | ||
|  | 
 | ||
|  | N = 1000 | ||
|  | 
 | ||
|  | 
 | ||
|  | def read_register(dxl, register, ids): | ||
|  |     print('\tReading {} times the {}...'.format(N, register)) | ||
|  | 
 | ||
|  |     t = [] | ||
|  |     getter = getattr(dxl, 'get_{}'.format(register)) | ||
|  | 
 | ||
|  |     for _ in range(N): | ||
|  |         start = time.time() | ||
|  |         getter(ids) | ||
|  |         end = time.time() | ||
|  |         t.append(1000 * (end - start)) | ||
|  | 
 | ||
|  |     print('\tTook {}ms (STD={}) per read'.format(numpy.mean(t), numpy.std(t))) | ||
|  | 
 | ||
|  | 
 | ||
|  | def full_test(dxl, ids): | ||
|  |     print('Testing the communication speed with motor{} {}'.format('s' if len(ids) else '', | ||
|  |                                                                    ids)) | ||
|  |     read_register(dxl, 'present_position', ids) | ||
|  |     read_register(dxl, 'control_table', ids) | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == '__main__': | ||
|  |     available_ports = pypot.dynamixel.get_available_ports() | ||
|  | 
 | ||
|  |     parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, | ||
|  |                                      description='Test low-level communication with Dynamixel motors.') | ||
|  | 
 | ||
|  |     parser.add_argument('-p', '--ports', | ||
|  |                         type=str, nargs='+', | ||
|  |                         default=available_ports, | ||
|  |                         help='Select which port(s) to test') | ||
|  | 
 | ||
|  |     parser.add_argument('-b', '--baudrate', | ||
|  |                         type=int, choices=[57600, 1000000], default=1000000, | ||
|  |                         help='Sets the baudrate') | ||
|  | 
 | ||
|  |     args = parser.parse_args() | ||
|  | 
 | ||
|  |     for port in args.ports: | ||
|  |         print('Now testing port {} with {}bds...'.format(port, args.baudrate)) | ||
|  | 
 | ||
|  |         print('Opening connection...') | ||
|  |         with pypot.dynamixel.DxlIO(port, baudrate=args.baudrate) as dxl: | ||
|  |             print('Ok!') | ||
|  |             print('Scanning the bus...',) | ||
|  |             sys.stdout.flush() | ||
|  |             ids = dxl.scan() | ||
|  |             print('Done!') | ||
|  |             print('Ids found: {}'.format(ids)) | ||
|  | 
 | ||
|  |             full_test(dxl, ids[:1]) | ||
|  |             full_test(dxl, ids) | ||
|  | 
 | ||
|  |         print('Closing port') |