93 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|  | require 'json' | ||
|  | require 'rest-client' | ||
|  | require 'parallel' | ||
|  | 
 | ||
|  | require './motor' | ||
|  | 
 | ||
|  | class Poppy  | ||
|  | 
 | ||
|  |   attr_reader :ip, :port, :url, :motors | ||
|  | 
 | ||
|  |   def initialize ip | ||
|  |     @host = ip | ||
|  |     @port = "8080" | ||
|  |     @url = "http://" + @host + ":" + @port   | ||
|  | 
 | ||
|  |     init_motors; | ||
|  |   end | ||
|  | 
 | ||
|  |   def init_motors | ||
|  |     @motors = Hash.new | ||
|  |     motor_list.each do |motor_name| | ||
|  |       @motors[motor_name] = Motor.new(self, motor_name) | ||
|  |     end  | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def motor_list_text | ||
|  |     RestClient.get @url + '/motor/list.json' | ||
|  |   end | ||
|  | 
 | ||
|  |   def motor_list | ||
|  |     JSON.parse(motor_list_text).values[0] | ||
|  |   end | ||
|  | 
 | ||
|  |   def to_s | ||
|  |     "Poppy :]" | ||
|  |   end | ||
|  | 
 | ||
|  |   def update_motor_registers | ||
|  |     each_motor do |motor| | ||
|  |       motor.update_registers | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def each_motor | ||
|  |     @motors.each_value do |motor| | ||
|  |       yield motor | ||
|  |     end | ||
|  |   end | ||
|  |    | ||
|  |   def set_compliant (is_compliant) | ||
|  |     each_motor do |motor|  | ||
|  |       motor.compliant = is_compliant | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def set_default_motor_positions | ||
|  |     each_motor do |motor|  | ||
|  |       motor.compliant = "false" | ||
|  |       motor.goal_speed = 0
 | ||
|  |       motor.goal_position = 0
 | ||
|  |     end | ||
|  | 
 | ||
|  |   end | ||
|  | 
 | ||
|  |   def set_default_motor_positions_parallel | ||
|  |     Parallel.each(@motors.values) do |motor|  | ||
|  |       motor.compliant = "false" | ||
|  |       motor.goal_speed = 10
 | ||
|  |       motor.goal_position = 0
 | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   ## Low level for motors ...  | ||
|  |    | ||
|  |   def motor_values (name)  | ||
|  |     RestClient.get @url + '/motor/' + name + '/register/list.json' , {:accept => :json} | ||
|  |   end | ||
|  | 
 | ||
|  |   def motor_register_get (motor, register) | ||
|  |     RestClient.get @url + '/motor/' + motor.name + '/register/' + register , {:accept => :json} | ||
|  |   end | ||
|  |    | ||
|  |   def motor_register_list (motor) | ||
|  |     RestClient.get @url + '/motor/' + motor.name + '/register/list.json' , {:accept => :json} | ||
|  |   end | ||
|  | 
 | ||
|  |   def send_motor_register (motor, register, value) | ||
|  |     RestClient.post @url + '/motor/' + motor.name + '/register/' + register + '/value.json', value, :content_type => :json  | ||
|  |   end | ||
|  |    | ||
|  | end |