artoo 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7ec92eb682584d629792c9e30321ec075c44ccc
4
- data.tar.gz: 469f3321dd5bf852382c66ecf475ad272d0913bd
3
+ metadata.gz: 18102ca867dce3a87d0d7a37e9a3815b7b3be8a2
4
+ data.tar.gz: 5410f7319fbee6fa07c76808e0cb766b7883cd84
5
5
  SHA512:
6
- metadata.gz: 34faae07ab1729b9ef5dc82549ccb6e140d6452db47dc8eb2c451b12a45b645f22a7e1c47f0ca9624b20ffdcb58c2224d9cc2802590adcad76268bb05b3f9739
7
- data.tar.gz: 0b97958c5708ecd774c3de2aa1b2c0cdc3905573f5296781cb92d29622caeb2dea6baef8c78a2a17382ddf760ecfb2d36aaca412de69d133436a8360b705cf24
6
+ metadata.gz: 26e56150e35df75a79560888fa419f4e768b9e8634e7824f2c60e1df6bd2c7f3c136599f893547b23cb090ebab7c5f07c37665b0aca23353e10d1a13b8727a4e
7
+ data.tar.gz: 3b22a157db5e7826021dc74872b7bab951e32c9c1e0204476e5809d7639347d2bc3ef37c64739ec6bc269b8ae46e5992aa26d43df3f471b9caa760c7253bbd4d
data/.travis.yml CHANGED
@@ -2,5 +2,5 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  - 1.9.3
5
- - jruby-19mode # JRuby in 1.9 mode
5
+ #- jruby-19mode # JRuby in 1.9 mode commented until JRuby/Celluloid issues corrected
6
6
  - rbx-19mode
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- artoo (0.3.0)
4
+ artoo (0.4.0)
5
5
  active_support (~> 3.0)
6
- celluloid-io (~> 0.13)
6
+ celluloid (~> 0.14.0)
7
+ celluloid-io (~> 0.14.0)
7
8
  multi_json (~> 1.6)
8
9
  pry (~> 0.9)
9
10
  rake (~> 10.0)
10
- reel (~> 0.3)
11
+ reel (~> 0.4.pre)
11
12
 
12
13
  GEM
13
14
  remote: http://rubygems.org/
@@ -17,11 +18,11 @@ GEM
17
18
  activesupport (3.0.0)
18
19
  bootstrap-sass (2.2.2.0)
19
20
  sass (~> 3.2)
20
- celluloid (0.13.0)
21
+ celluloid (0.14.0)
21
22
  timers (>= 1.0.0)
22
- celluloid-io (0.13.1)
23
+ celluloid-io (0.14.0)
23
24
  celluloid (>= 0.13.0)
24
- nio4r (>= 0.4.0)
25
+ nio4r (>= 0.4.5)
25
26
  certified (0.1.1)
26
27
  chunky_png (1.2.7)
27
28
  coderay (1.0.9)
@@ -77,8 +78,7 @@ GEM
77
78
  mocha (0.13.2)
78
79
  metaclass (~> 0.0.1)
79
80
  multi_json (1.6.1)
80
- nio4r (0.4.3)
81
- nio4r (0.4.3-java)
81
+ nio4r (0.4.5)
82
82
  pry (0.9.12)
83
83
  coderay (~> 1.0.5)
84
84
  method_source (~> 0.8)
@@ -90,12 +90,12 @@ GEM
90
90
  spoon (~> 0.0)
91
91
  rack (1.5.2)
92
92
  rake (10.0.4)
93
- reel (0.3.0)
93
+ reel (0.4.0.pre)
94
94
  celluloid-io (>= 0.8.0)
95
95
  http (>= 0.2.0)
96
96
  http_parser.rb (>= 0.5.3)
97
97
  rack (>= 1.4.0)
98
- websocket_parser (>= 0.1.0)
98
+ websocket_parser (>= 0.1.2)
99
99
  sass (3.2.5)
100
100
  slop (3.4.3)
101
101
  spoon (0.0.1)
data/README.md CHANGED
@@ -137,3 +137,6 @@ gem install hybridgroup-sphero
137
137
  ruby myrobot.rb
138
138
  ```
139
139
 
140
+ ## Wiki
141
+
142
+ Check out our [wiki](https://github.com/hybridgroup/artoo/wiki) for more docs
data/artoo.gemspec CHANGED
@@ -19,8 +19,9 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_runtime_dependency 'celluloid-io', '~> 0.13'
23
- s.add_runtime_dependency 'reel', '~> 0.3'
22
+ s.add_runtime_dependency 'celluloid', '~> 0.14.0'
23
+ s.add_runtime_dependency 'celluloid-io', '~> 0.14.0'
24
+ s.add_runtime_dependency 'reel', '~> 0.4.pre'
24
25
  s.add_runtime_dependency 'multi_json', '~> 1.6'
25
26
  s.add_runtime_dependency 'active_support', '~> 3.0'
26
27
  s.add_runtime_dependency 'rake', '~> 10.0'
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ NEXT_WAIT_TIME=0
4
+ COMMAND="socat FILE:/dev/$2,nonblock,raw,b115200,echo=0 TCP-LISTEN:$1,fork"
5
+ until $COMMAND || [ $NEXT_WAIT_TIME -eq 4 ]; do
6
+ echo "retry..."
7
+ sleep $(( NEXT_WAIT_TIME++ ))
8
+ done
@@ -1,11 +1,7 @@
1
- begin
2
- require 'artoo'
3
- rescue LoadError
4
- $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__),'..', 'lib')))
5
- require "artoo"
6
- end
1
+ require 'artoo'
2
+ require 'artoo/drivers/roomba'
7
3
 
8
- connection :roomba, :adaptor => :roomba, :port => '/dev/tty.usbserial-A2001yzl'
4
+ connection :roomba, :adaptor => :roomba, :port => '/dev/ttyUSB0'
9
5
  device :roomba, :driver => :roomba, :connection => :roomba
10
6
 
11
7
  work do
@@ -14,5 +10,54 @@ work do
14
10
  roomba.nudge_right
15
11
  roomba.nudge_right
16
12
  roomba.nudge_left
17
- roomba.sing_jingle_bells
18
- end
13
+ play_jingle_bells
14
+ end
15
+
16
+ def play_jingle_bells
17
+ roomba.song(JingleBells.song0, 0)
18
+ roomba.song(JingleBells.song1, 1)
19
+ roomba.song(JingleBells.song2, 2)
20
+ roomba.song(JingleBells.song3, 3)
21
+
22
+ roomba.play(0)
23
+ sleep(7)
24
+ roomba.play(1)
25
+ sleep(7)
26
+ roomba.play(2)
27
+ sleep(7)
28
+ roomba.play(3)
29
+ end
30
+
31
+ class JingleBells
32
+ extend Artoo::Drivers::Roomba::Note
33
+
34
+ class << self
35
+ def song0
36
+ [[B, QUARTER], [B, QUARTER], [B, HALF],
37
+ [B, QUARTER], [B, QUARTER], [B, HALF],
38
+ [B, QUARTER], [D, QUARTER], [G, QUARTER], [A, QUARTER],
39
+ [B, WHOLE]]
40
+ end
41
+
42
+ def song1
43
+ [[C, QUARTER], [C, QUARTER], [C, QUARTER], [C, QUARTER],
44
+ [C, QUARTER], [B, QUARTER], [B, HALF],
45
+ [B, QUARTER], [A, QUARTER], [A, QUARTER], [B, QUARTER],
46
+ [A, HALF], [D, HALF]]
47
+ end
48
+
49
+ def song2
50
+ [[B, QUARTER], [B, QUARTER], [B, HALF],
51
+ [B, QUARTER], [B, QUARTER], [B, HALF],
52
+ [B, QUARTER], [D, QUARTER], [G, QUARTER], [A, QUARTER],
53
+ [B, WHOLE]]
54
+ end
55
+
56
+ def song3
57
+ [[C, QUARTER], [C, QUARTER], [C, QUARTER], [C, QUARTER],
58
+ [C, QUARTER], [B, QUARTER], [B, QUARTER], [B, QUARTER],
59
+ [D, QUARTER], [D, QUARTER], [C, QUARTER], [A, QUARTER],
60
+ [G, WHOLE]]
61
+ end
62
+ end
63
+ end
@@ -29,10 +29,10 @@ class ConwaySpheroRobot < Artoo::Robot
29
29
 
30
30
  def death
31
31
  puts "Death."
32
+ pause_work
32
33
  @alive = false
33
34
  sphero.set_color :red
34
35
  sphero.stop
35
- terminate
36
36
  end
37
37
 
38
38
  def birthday
@@ -0,0 +1,12 @@
1
+ require 'artoo'
2
+
3
+ connection :roomba, :adaptor => :roomba, :port => '/dev/ttyUSB0'
4
+ device :roomba, :driver => :roomba, :connection => :roomba
5
+
6
+ work do
7
+ roomba.safe_mode
8
+ roomba.nudge_left
9
+ roomba.nudge_right
10
+ roomba.nudge_right
11
+ roomba.nudge_left
12
+ end
@@ -0,0 +1,56 @@
1
+ require 'artoo'
2
+
3
+ connection :roomba, :adaptor => :roomba, :port => '8023'
4
+ device :roomba, :driver => :roomba, :connection => :roomba
5
+
6
+ connection :arduino, :adaptor => :firmata, :port => '8024'
7
+ device :wiichuck, :driver => :wiichuck, :connection => :arduino, :interval => 0.1
8
+
9
+ work do
10
+ roomba.safe_mode
11
+ on wiichuck, :z_button => proc {
12
+ C1 = 66
13
+ D1 = 74
14
+ E1 = 83
15
+ F1 = 88
16
+ A2 = 100
17
+ QUARTER = 16
18
+ HALF = 57
19
+ la_cucaracha = []
20
+ la_cucaracha << [C1, QUARTER]
21
+ la_cucaracha << [C1, QUARTER]
22
+ la_cucaracha << [C1, QUARTER]
23
+ la_cucaracha << [F1, HALF]
24
+ la_cucaracha << [A2, QUARTER]
25
+ la_cucaracha << [C1, QUARTER]
26
+ la_cucaracha << [C1, QUARTER]
27
+ la_cucaracha << [C1, QUARTER]
28
+ la_cucaracha << [F1, HALF]
29
+ la_cucaracha << [A2, QUARTER]
30
+ la_cucaracha << [F1, QUARTER]
31
+ la_cucaracha << [F1, QUARTER]
32
+ la_cucaracha << [E1, QUARTER]
33
+ la_cucaracha << [E1, QUARTER]
34
+ la_cucaracha << [D1, QUARTER]
35
+ la_cucaracha << [D1, QUARTER]
36
+ la_cucaracha << [C1, QUARTER]
37
+ roomba.play_song(la_cucaracha)
38
+ }
39
+ on wiichuck, :joystick => proc { |*value|
40
+
41
+ pair = value[1]
42
+
43
+ if pair[:y] > 10
44
+ roomba.forward(1)
45
+ elsif pair[:y] < -10
46
+ roomba.backwards(1)
47
+ end
48
+
49
+ if pair[:x] > 10
50
+ roomba.turn_right
51
+ elsif pair[:x] < -10
52
+ roomba.turn_left
53
+ end
54
+
55
+ }
56
+ end
@@ -0,0 +1,15 @@
1
+ require 'artoo'
2
+
3
+ connection :sphero, :adaptor => :sphero, :port => '127.0.0.1:4560'
4
+ device :sphero, :driver => :sphero
5
+
6
+ work do
7
+ sphero.set_color(0, 0, 0)
8
+ sphero.set_color(:red)
9
+ sphero.set_color(:yellow)
10
+ sphero.set_color(:green)
11
+ sphero.set_color(0, 255, 255)
12
+ sphero.set_color(:blue)
13
+ sphero.set_color(255, 0, 255)
14
+ sphero.set_color(:white)
15
+ end
@@ -50,9 +50,10 @@ module Artoo
50
50
  @udp_socket ||= UDPSocket.new
51
51
  end
52
52
 
53
- def connect_to_serial(speed=57600, data_bits=8, stop_bits=1, parity=SerialPort::NONE)
53
+ def connect_to_serial(speed=57600, data_bits=8, stop_bits=1, parity=nil)
54
54
  require 'serialport'
55
- @sp = SerialPort.new(port.port, speed, data_bits, stop_bits, parity)
55
+ parity = ::SerialPort::NONE unless parity
56
+ @sp = ::SerialPort.new(port.port, speed, data_bits, stop_bits, parity)
56
57
  rescue LoadError
57
58
  Logger.error "Please 'gem install hybridgroup-serialport' for serial port support."
58
59
  end
@@ -7,10 +7,12 @@ module Artoo
7
7
  class Connection
8
8
  include Celluloid
9
9
  include Artoo::Utility
10
+ include Comparable
10
11
 
11
- attr_reader :parent, :name, :port, :adaptor
12
+ attr_reader :parent, :name, :port, :adaptor, :connection_id
12
13
 
13
14
  def initialize(params={})
15
+ @connection_id = rand(10000)
14
16
  @name = params[:name].to_s
15
17
  @port = Port.new(params[:port])
16
18
  @parent = params[:parent]
@@ -35,10 +37,15 @@ module Artoo
35
37
  adaptor.connected?
36
38
  end
37
39
 
40
+ def adaptor_name
41
+ adaptor.class.name
42
+ end
43
+
38
44
  def to_hash
39
45
  {:name => name,
46
+ :connection_id => connection_id,
40
47
  :port => port.to_s,
41
- :adaptor => adaptor.class.name.demodulize,
48
+ :adaptor => adaptor_name.demodulize,
42
49
  :connected => connected?
43
50
  }
44
51
  end
@@ -47,12 +54,8 @@ module Artoo
47
54
  MultiJson.dump(to_hash)
48
55
  end
49
56
 
50
- def to_s
51
- "#{self.class}:0x#{self.object_id}"
52
- end
53
-
54
57
  def inspect
55
- "#<#{to_s}>"
58
+ "#<Connection @id=#{object_id}, @name='#{name}', @adaptor=#{adaptor_name}>"
56
59
  end
57
60
 
58
61
  def method_missing(method_name, *arguments, &block)
@@ -30,7 +30,7 @@ module Artoo
30
30
  end
31
31
  end
32
32
 
33
- delegate :connection, :device, :work, :api, :set, :test?
33
+ delegate :connection, :device, :work, :api, :set, :test?, :cli?
34
34
 
35
35
  class << self
36
36
  attr_accessor :target
@@ -4,63 +4,74 @@ module Artoo
4
4
  module Drivers
5
5
  # The Roomba driver behaviors
6
6
  class Roomba < Driver
7
-
8
- STRAIGHT = 32768
9
- CLOCKWISE = 65535
10
- COUNTERCLOCKWISE = 1
11
- MAX = 500
12
- SLOW = 250
13
- NEG = (65536 - 250)
14
- ZERO = 0
15
-
16
- B = 95
17
- D = 98
18
- G = 91
19
- C = 96
20
- A = 93
21
- QUART = 16
22
- HALF = 57
23
- WHOLE = 114
24
- START = 128
25
-
26
- module Modes
7
+ module Direction
8
+ STRAIGHT = 32768
9
+ CLOCKWISE = 65535
10
+ COUNTERCLOCKWISE = 1
11
+ end
12
+
13
+ module Speed
14
+ MAX = 500
15
+ SLOW = 250
16
+ NEG = (65536 - 250)
17
+ ZERO = 0
18
+ end
19
+
20
+ module Note
21
+ B = 95
22
+ D = 98
23
+ G = 91
24
+ C = 96
25
+ A = 93
26
+ QUARTER = 16
27
+ HALF = 57
28
+ WHOLE = 114
29
+ end
30
+
31
+ module Mode
27
32
  FULL = 132
28
33
  SAFE = 131
34
+ START = 128
29
35
  end
30
36
 
37
+ module Song
38
+ SONG = 140
39
+ PLAY = 141
40
+ end
41
+
31
42
  def start
32
- send_bytes(START)
43
+ send_bytes(Mode::START)
33
44
  sleep 0.2
34
45
  end
35
46
 
36
47
  def safe_mode
37
48
  start
38
- send_bytes(Modes::SAFE)
49
+ send_bytes(Mode::SAFE)
39
50
  sleep 0.1
40
51
  end
41
52
 
42
53
  def full_mode
43
54
  start
44
- send_bytes(Modes::FULL)
55
+ send_bytes(Mode::FULL)
45
56
  sleep 0.1
46
57
  end
47
58
 
48
- def forward(seconds, velocity = SLOW)
49
- drive(velocity,STRAIGHT,seconds)
59
+ def forward(seconds, velocity = Speed::SLOW)
60
+ drive(velocity, Direction::STRAIGHT, seconds)
50
61
  stop if seconds > 0
51
62
  end
52
63
 
53
64
  def stop
54
- drive(ZERO,STRAIGHT)
65
+ drive(Speed::ZERO, Direction::STRAIGHT)
55
66
  end
56
67
 
57
68
  def fast_forward(seconds)
58
- drive(MAX,STRAIGHT,seconds)
69
+ drive(Speed::MAX, Direction::STRAIGHT, seconds)
59
70
  stop if seconds > 0
60
71
  end
61
72
 
62
73
  def backwards(seconds)
63
- drive(NEG,STRAIGHT,seconds)
74
+ drive(Speed::NEG, Direction::STRAIGHT, seconds)
64
75
  stop if seconds > 0
65
76
  end
66
77
 
@@ -69,12 +80,12 @@ module Artoo
69
80
  end
70
81
 
71
82
  def turn_left(seconds = 1)
72
- drive(SLOW,COUNTERCLOCKWISE,seconds)
83
+ drive(Speed::SLOW, Direction::COUNTERCLOCKWISE, seconds)
73
84
  stop if seconds > 0
74
85
  end
75
86
 
76
87
  def turn_right(seconds = 1)
77
- drive(SLOW,CLOCKWISE,seconds)
88
+ drive(Speed::SLOW, Direction::CLOCKWISE, seconds)
78
89
  stop if seconds > 0
79
90
  end
80
91
 
@@ -85,71 +96,36 @@ module Artoo
85
96
  def turn_around
86
97
  turn_left(1.6)
87
98
  end
88
-
89
- def beep
90
- notes = [140,0,1,G,WHOLE]
91
- connection.send_bytes(notes)
92
- connection.send_bytes([141,0])
93
- end
94
-
95
- def sing_jingle_bells
96
- song0 = [[B,QUART],[B,QUART],[B,HALF],
97
- [B,QUART],[B,QUART],[B,HALF],
98
- [B,QUART],[D,QUART],[G,QUART],[A,QUART],
99
- [B,WHOLE]]
100
- song1 = [[C,QUART],[C,QUART],[C,QUART],[C,QUART],
101
- [C,QUART],[B,QUART],[B,HALF],
102
- [B,QUART],[A,QUART],[A,QUART],[B,QUART],
103
- [A,HALF],[D,HALF]]
104
- song2 = [[B,QUART],[B,QUART],[B,HALF],
105
- [B,QUART],[B,QUART],[B,HALF],
106
- [B,QUART],[D,QUART],[G,QUART],[A,QUART],
107
- [B,WHOLE]]
108
- song3 = [[C,QUART],[C,QUART],[C,QUART],[C,QUART],
109
- [C,QUART],[B,QUART],[B,QUART],[B,QUART],
110
- [D,QUART],[D,QUART],[C,QUART],[A,QUART],
111
- [G,WHOLE]]
112
-
113
- note_group = song0.flatten.compact
114
- l = note_group.length / 2
115
- notes = [140,0,l] + note_group
116
- connection.send_bytes(notes)
117
-
118
- note_group = song1.flatten.compact
119
- l = note_group.length / 2
120
- notes = [140,1,l] + note_group
121
- connection.send_bytes(notes)
122
-
123
- note_group = song2.flatten.compact
124
- l = note_group.length / 2
125
- notes = [140,2,l] + note_group
126
- connection.send_bytes(notes)
127
-
128
- note_group = song3.flatten.compact
129
- l = note_group.length / 2
130
- notes = [140,3,l] + note_group
131
- connection.send_bytes(notes)
132
-
133
- connection.send_bytes([141,0])
134
- sleep(7)
135
- connection.send_bytes([141,1])
136
- sleep(7)
137
- connection.send_bytes([141,2])
138
- sleep(7)
139
- connection.send_bytes([141,3])
140
- end
141
-
142
- def drive(v,r,s = 0)
99
+
100
+ def drive(v, r, s = 0)
143
101
  vH,vL = split_bytes(v)
144
102
  rH,rL = split_bytes(r)
145
- connection.send_bytes([137,vH,vL,rH,rL])
103
+ send_bytes([137, vH, vL, rH, rL])
146
104
  sleep(s) if s > 0
147
105
  end
148
106
 
149
107
  def split_bytes(num)
150
108
  [num >> 8, num & 255]
151
109
  end
110
+
111
+ def play(song_number = 0)
112
+ send_bytes([Song::PLAY, song_number])
113
+ end
114
+
115
+ def song(notes, song_number = 0)
116
+ note_group = notes.flatten.compact
117
+ l = note_group.length / 2
118
+ send_bytes([Song::SONG, song_number, l] + note_group)
119
+ end
152
120
 
121
+ def play_song(notes, song_number = 0)
122
+ song(notes, song_number)
123
+ play(song_number)
124
+ end
125
+
126
+ def beep
127
+ play_song([Note::G, Note::WHOLE])
128
+ end
153
129
  end
154
130
  end
155
131
  end
@@ -15,7 +15,7 @@ module Artoo
15
15
  end
16
16
 
17
17
  def clear_collisions
18
- responses.clear if responses = messages
18
+ messages.clear if responses = messages
19
19
  end
20
20
 
21
21
  def collisions
@@ -31,7 +31,7 @@ module Artoo
31
31
  end
32
32
 
33
33
  def set_color(*colors)
34
- connection.rgb(*color(colors))
34
+ connection.rgb(*color(*colors))
35
35
  end
36
36
 
37
37
  def color(*colors)
data/lib/artoo/robot.rb CHANGED
@@ -89,7 +89,7 @@ module Artoo
89
89
 
90
90
  unless cli?
91
91
  Celluloid::Actor[:api] = Api.new(self.api_host, self.api_port) if self.use_api
92
- Celluloid::Actor[:master].start_work
92
+ master.start_work
93
93
  self.running = true
94
94
  sleep # sleep main thread, and let the work commence!
95
95
  end
@@ -107,6 +107,10 @@ module Artoo
107
107
  Celluloid::Actor[:master] = Master.new(robots)
108
108
  end
109
109
 
110
+ def master
111
+ Celluloid::Actor[:master]
112
+ end
113
+
110
114
  def test?
111
115
  ENV["ARTOO_TEST"] == 'true'
112
116
  end
data/lib/artoo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Artoo
2
2
  unless const_defined?('VERSION')
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
data/test/device_test.rb CHANGED
@@ -19,14 +19,14 @@ describe Artoo::Device do
19
19
  end
20
20
 
21
21
  it 'Artoo::Device#default_connection' do
22
- @robot.devices[:test_device_1].default_connection.must_equal @robot.default_connection
23
- @robot.devices[:test_device_2].default_connection.must_equal @robot.default_connection
22
+ @robot.devices[:test_device_1].default_connection.wrapped_object.must_equal @robot.default_connection.wrapped_object
23
+ @robot.devices[:test_device_2].default_connection.wrapped_object.must_equal @robot.default_connection.wrapped_object
24
24
  end
25
25
 
26
26
  it 'Artoo::Device#connect' do
27
27
  @robot2 = MultipleDeviceConnectionTestRobot.new
28
- @robot2.devices[:test_device_1].connection.must_equal @robot2.connections[:test_connection]
29
- @robot2.devices[:test_device_2].connection.must_equal @robot2.connections[:test_connection2]
28
+ @robot2.devices[:test_device_1].connection.wrapped_object.must_equal @robot2.connections[:test_connection].wrapped_object
29
+ @robot2.devices[:test_device_2].connection.wrapped_object.must_equal @robot2.connections[:test_connection2].wrapped_object
30
30
  end
31
31
 
32
32
  it 'Artoo::Device#event_topic_name' do
@@ -0,0 +1,87 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+ require 'artoo/drivers/roomba'
3
+
4
+ describe Artoo::Drivers::Roomba do
5
+ before do
6
+ @connection = mock('connection')
7
+ @device = mock('device')
8
+ @device.stubs(:connection).returns(@connection)
9
+ @roomba = Artoo::Drivers::Roomba.new(:parent => @device)
10
+ @roomba.stubs(:sleep)
11
+ @roomba_proxy = @roomba.wrapped_object
12
+ end
13
+
14
+ it 'Roomba#start' do
15
+ @connection.expects(:send_bytes).with(Artoo::Drivers::Roomba::Mode::START)
16
+ @roomba.start
17
+ end
18
+
19
+ it 'Roomba#safe_mode' do
20
+ @roomba.stubs(:start)
21
+ @connection.expects(:send_bytes).with(Artoo::Drivers::Roomba::Mode::SAFE)
22
+ @roomba.safe_mode
23
+ end
24
+
25
+ it 'Roomba#full_mode' do
26
+ @roomba.stubs(:start)
27
+ @connection.expects(:send_bytes).with(Artoo::Drivers::Roomba::Mode::FULL)
28
+ @roomba.full_mode
29
+ end
30
+
31
+ it 'Roomba#forward' do
32
+ @roomba_proxy.expects(:drive).with(250, Artoo::Drivers::Roomba::Direction::STRAIGHT, 10)
33
+ @roomba_proxy.expects(:stop)
34
+ @roomba.forward(10, 250)
35
+ end
36
+
37
+ it 'Roomba#stop' do
38
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::ZERO, Artoo::Drivers::Roomba::Direction::STRAIGHT)
39
+ @roomba.stop
40
+ end
41
+
42
+ it 'Roomba#fast_forward' do
43
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::MAX, Artoo::Drivers::Roomba::Direction::STRAIGHT, 10)
44
+ @roomba_proxy.expects(:stop)
45
+ @roomba.fast_forward(10)
46
+ end
47
+
48
+ it 'Roomba#backwards' do
49
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::NEG, Artoo::Drivers::Roomba::Direction::STRAIGHT, 10)
50
+ @roomba_proxy.expects(:stop)
51
+ @roomba.backwards(10)
52
+ end
53
+
54
+ it 'Roomba#turn_left' do
55
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::SLOW, Artoo::Drivers::Roomba::Direction::COUNTERCLOCKWISE, 10)
56
+ @roomba_proxy.expects(:stop)
57
+ @roomba.turn_left(10)
58
+ end
59
+
60
+ it 'Roomba#nudge_left' do
61
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::SLOW, Artoo::Drivers::Roomba::Direction::COUNTERCLOCKWISE, 0.25)
62
+ @roomba_proxy.expects(:stop)
63
+ @roomba.nudge_left
64
+ end
65
+
66
+ it 'Roomba#turn_right' do
67
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::SLOW, Artoo::Drivers::Roomba::Direction::CLOCKWISE, 10)
68
+ @roomba_proxy.expects(:stop)
69
+ @roomba.turn_right(10)
70
+ end
71
+
72
+ it 'Roomba#nudge_right' do
73
+ @roomba_proxy.expects(:drive).with(Artoo::Drivers::Roomba::Speed::SLOW, Artoo::Drivers::Roomba::Direction::CLOCKWISE, 0.25)
74
+ @roomba_proxy.expects(:stop)
75
+ @roomba.nudge_right
76
+ end
77
+
78
+ it 'Roomba#play' do
79
+ @connection.expects(:send_bytes).with([Artoo::Drivers::Roomba::Song::PLAY, 0])
80
+ @roomba.play(0)
81
+ end
82
+
83
+ it 'Roomba#song' do
84
+ @connection.expects(:send_bytes).with([Artoo::Drivers::Roomba::Song::SONG, 0, 3, Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::QUARTER, Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::QUARTER, Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::HALF])
85
+ @roomba.song([[Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::QUARTER], [Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::QUARTER], [Artoo::Drivers::Roomba::Note::B, Artoo::Drivers::Roomba::Note::HALF]], 0)
86
+ end
87
+ end
data/test/robot_test.rb CHANGED
@@ -60,37 +60,29 @@ describe Artoo::Robot do
60
60
  @robot.default_connection.adaptor.must_be_kind_of Artoo::Adaptors::Loopback
61
61
  end
62
62
 
63
- it 'Artoo::Robot.work! with single object' do
64
- TestRobot.stubs(:sleep)
65
-
66
- @asm = mock("async_method")
67
- @asm.expects(:work)
68
- @robot.expects(:async).returns(@asm)
69
- TestRobot.work!(@robot)
63
+ it 'Artoo::Robot#as_json' do
64
+ MultiJson.load(@robot.as_json, :symbolize_keys => true)[:name].must_equal "testme"
70
65
  end
71
66
 
72
- it 'Artoo::Robot.work! with array of objects' do
73
- @robot2 = TestRobot.new(:name => "too", :connections => {:test_connection => {:port => '1234'}})
74
- TestRobot.stubs(:sleep)
75
-
76
- @asm = mock("async_method")
77
- @asm.expects(:work).times(2)
78
- @robot.expects(:async).returns(@asm)
79
- @robot2.expects(:async).returns(@asm)
80
- TestRobot.work!([@robot, @robot2])
81
- end
67
+ describe 'work' do
68
+ before do
69
+ TestRobot.stubs(:sleep)
70
+ @master = mock('master')
71
+ TestRobot.stubs(:master).returns(@master)
72
+ @master.expects(:start_work)
73
+ end
82
74
 
83
- it 'Artoo::Robot.work! without object' do
84
- TestRobot.stubs(:sleep)
75
+ it 'Artoo::Robot.work! with single object' do
76
+ TestRobot.work!(@robot)
77
+ end
85
78
 
86
- @asm = mock("async_method")
87
- @asm.expects(:work).at_least_once
88
- TestRobot.expects(:new).returns(@robot)
89
- @robot.expects(:async).returns(@asm)
90
- TestRobot.work!
91
- end
79
+ it 'Artoo::Robot.work! with array of objects' do
80
+ @robot2 = TestRobot.new(:name => "too", :connections => {:test_connection => {:port => '1234'}})
81
+ TestRobot.work!([@robot, @robot2])
82
+ end
92
83
 
93
- it 'Artoo::Robot#as_json' do
94
- MultiJson.load(@robot.as_json, :symbolize_keys => true)[:name].must_equal "testme"
84
+ it 'Artoo::Robot.work! without object' do
85
+ TestRobot.work!
86
+ end
95
87
  end
96
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ron Evans
@@ -12,36 +12,50 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-04-09 00:00:00.000000000 Z
15
+ date: 2013-05-08 00:00:00.000000000 Z
16
16
  dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: celluloid
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 0.14.0
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 0.14.0
17
31
  - !ruby/object:Gem::Dependency
18
32
  name: celluloid-io
19
33
  requirement: !ruby/object:Gem::Requirement
20
34
  requirements:
21
35
  - - ~>
22
36
  - !ruby/object:Gem::Version
23
- version: '0.13'
37
+ version: 0.14.0
24
38
  type: :runtime
25
39
  prerelease: false
26
40
  version_requirements: !ruby/object:Gem::Requirement
27
41
  requirements:
28
42
  - - ~>
29
43
  - !ruby/object:Gem::Version
30
- version: '0.13'
44
+ version: 0.14.0
31
45
  - !ruby/object:Gem::Dependency
32
46
  name: reel
33
47
  requirement: !ruby/object:Gem::Requirement
34
48
  requirements:
35
49
  - - ~>
36
50
  - !ruby/object:Gem::Version
37
- version: '0.3'
51
+ version: 0.4.pre
38
52
  type: :runtime
39
53
  prerelease: false
40
54
  version_requirements: !ruby/object:Gem::Requirement
41
55
  requirements:
42
56
  - - ~>
43
57
  - !ruby/object:Gem::Version
44
- version: '0.3'
58
+ version: 0.4.pre
45
59
  - !ruby/object:Gem::Dependency
46
60
  name: multi_json
47
61
  requirement: !ruby/object:Gem::Requirement
@@ -133,6 +147,7 @@ executables:
133
147
  - retry.sh
134
148
  - robi
135
149
  - sphero.sh
150
+ - sphero_linux_socat.sh
136
151
  extensions: []
137
152
  extra_rdoc_files: []
138
153
  files:
@@ -177,6 +192,7 @@ files:
177
192
  - bin/retry.sh
178
193
  - bin/robi
179
194
  - bin/sphero.sh
195
+ - bin/sphero_linux_socat.sh
180
196
  - examples/ardrone.rb
181
197
  - examples/ardrone_nav.rb
182
198
  - examples/ardrone_nav_video.rb
@@ -194,9 +210,12 @@ files:
194
210
  - examples/hello_modular.rb
195
211
  - examples/hello_multiple.rb
196
212
  - examples/notifications.rb
213
+ - examples/roomba.rb
214
+ - examples/roomba_wiichuck.rb
197
215
  - examples/sphero.rb
198
216
  - examples/sphero2.rb
199
217
  - examples/sphero_color.rb
218
+ - examples/sphero_cycle.rb
200
219
  - examples/sphero_firmata.rb
201
220
  - examples/sphero_messages.rb
202
221
  - examples/sphero_multiple.rb
@@ -260,6 +279,7 @@ files:
260
279
  - test/drivers/driver_test.rb
261
280
  - test/drivers/led_test.rb
262
281
  - test/drivers/motor_test.rb
282
+ - test/drivers/roomba_test.rb
263
283
  - test/drivers/servo_test.rb
264
284
  - test/drivers/sphero_test.rb
265
285
  - test/drivers/wiichuck_test.rb