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
 |