artoo 0.5.0 → 1.0.0.pre
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 +4 -4
- data/.travis.yml +2 -2
- data/.yardopts +1 -1
- data/CONTRIBUTORS.md +16 -0
- data/Gemfile +10 -9
- data/Gemfile.lock +31 -35
- data/README.md +110 -19
- data/Rakefile +0 -1
- data/api/assets/javascripts/artoo/controllers/robot.js.coffee +5 -8
- data/api/public/core.js +7 -12
- data/api/public/partials/robot-detail.html +1 -1
- data/bin/robi +1 -1
- data/examples/christmas_roomba.rb +16 -19
- data/examples/hello_api_multiple.rb +3 -2
- data/examples/notifications.rb +2 -2
- data/examples/sphero_messages.rb +9 -3
- data/lib/artoo/adaptors/test.rb +28 -0
- data/lib/artoo/connection.rb +5 -0
- data/lib/artoo/delegator.rb +1 -1
- data/lib/artoo/device.rb +13 -0
- data/lib/artoo/drivers/counter.rb +28 -0
- data/lib/artoo/drivers/pinger.rb +8 -11
- data/lib/artoo/drivers/random.rb +27 -0
- data/lib/artoo/drivers/test.rb +23 -0
- data/lib/artoo/master.rb +4 -2
- data/lib/artoo/robot.rb +11 -103
- data/lib/artoo/robot_class_methods.rb +147 -0
- data/lib/artoo/version.rb +1 -1
- data/test/robot_test.rb +3 -3
- data/test/test_helper.rb +1 -2
- metadata +10 -44
- data/bin/sphero.sh +0 -8
- data/bin/sphero_linux_bind.sh +0 -25
- data/bin/sphero_linux_socat.sh +0 -8
- data/examples/sphero2.rb +0 -26
- data/lib/artoo/adaptors/ardrone.rb +0 -41
- data/lib/artoo/adaptors/ardrone_navigation.rb +0 -33
- data/lib/artoo/adaptors/ardrone_video.rb +0 -35
- data/lib/artoo/adaptors/firmata.rb +0 -33
- data/lib/artoo/adaptors/roomba.rb +0 -51
- data/lib/artoo/adaptors/sphero.rb +0 -58
- data/lib/artoo/drivers/ardrone.rb +0 -15
- data/lib/artoo/drivers/ardrone_navigation.rb +0 -25
- data/lib/artoo/drivers/ardrone_video.rb +0 -27
- data/lib/artoo/drivers/button.rb +0 -59
- data/lib/artoo/drivers/led.rb +0 -48
- data/lib/artoo/drivers/motor.rb +0 -69
- data/lib/artoo/drivers/pinger2.rb +0 -27
- data/lib/artoo/drivers/roomba.rb +0 -179
- data/lib/artoo/drivers/servo.rb +0 -59
- data/lib/artoo/drivers/sphero.rb +0 -105
- data/lib/artoo/drivers/wiichuck.rb +0 -61
- data/lib/artoo/drivers/wiiclassic.rb +0 -139
- data/lib/artoo/drivers/wiidriver.rb +0 -102
- data/test/adaptors/ardrone_test.rb +0 -24
- data/test/adaptors/firmata_test.rb +0 -25
- data/test/adaptors/sphero_test.rb +0 -24
- data/test/drivers/ardrone_navigation_test.rb +0 -11
- data/test/drivers/ardrone_test.rb +0 -11
- data/test/drivers/ardrone_video_test.rb +0 -11
- data/test/drivers/led_test.rb +0 -56
- data/test/drivers/motor_test.rb +0 -40
- data/test/drivers/roomba_test.rb +0 -87
- data/test/drivers/servo_test.rb +0 -45
- data/test/drivers/sphero_test.rb +0 -54
- data/test/drivers/wiichuck_test.rb +0 -11
- data/test/drivers/wiiclassic_test.rb +0 -11
- data/test/drivers/wiidriver_test.rb +0 -54
@@ -0,0 +1,147 @@
|
|
1
|
+
module Artoo
|
2
|
+
# The most important class used by Artoo is Robot. This represents the primary
|
3
|
+
# interface for interacting with a collection of physical computing capabilities.
|
4
|
+
#
|
5
|
+
# This module contains the class-level methods used by Artoo::Robot
|
6
|
+
class Robot
|
7
|
+
module ClassMethods
|
8
|
+
attr_accessor :device_types, :working_code,
|
9
|
+
:use_api, :api_host, :api_port
|
10
|
+
|
11
|
+
def connection_types
|
12
|
+
@@connection_types ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
# Connection to some hardware that has one or more devices via some specific protocol
|
16
|
+
# @example connection :arduino, :adaptor => :firmata, :port => '/dev/tty.usbmodemxxxxx'
|
17
|
+
# @param [String] name
|
18
|
+
# @param [Hash] params
|
19
|
+
def connection(name, params = {})
|
20
|
+
Celluloid::Logger.info "Registering connection '#{name}'..."
|
21
|
+
self.connection_types << {:name => name}.merge(params)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Device that uses a connection to communicate
|
25
|
+
# @example device :collision_detect, :driver => :switch, :pin => 3
|
26
|
+
# @param [String] name
|
27
|
+
# @param [Hash] params
|
28
|
+
def device(name, params = {})
|
29
|
+
Celluloid::Logger.info "Registering device '#{name}'..."
|
30
|
+
self.device_types ||= []
|
31
|
+
self.device_types << {:name => name}.merge(params)
|
32
|
+
end
|
33
|
+
|
34
|
+
# The work that needs to be performed
|
35
|
+
# @example
|
36
|
+
# work do
|
37
|
+
# every(10.seconds) do
|
38
|
+
# puts "hello, world"
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
# @param [block] work
|
42
|
+
def work(&block)
|
43
|
+
Celluloid::Logger.info "Preparing work..."
|
44
|
+
self.working_code = block if block_given?
|
45
|
+
end
|
46
|
+
|
47
|
+
# Activate RESTful api
|
48
|
+
# Example:
|
49
|
+
# api :host => '127.0.0.1', :port => '1234'
|
50
|
+
def api(params = {})
|
51
|
+
Celluloid::Logger.info "Registering api..."
|
52
|
+
self.use_api = true
|
53
|
+
self.api_host = params[:host] || '127.0.0.1'
|
54
|
+
self.api_port = params[:port] || '4321'
|
55
|
+
end
|
56
|
+
|
57
|
+
# Work can be performed by either:
|
58
|
+
# an existing instance
|
59
|
+
# an array of existing instances
|
60
|
+
# or, a new instance can be created
|
61
|
+
# @param [Robot] robot
|
62
|
+
def work!(robot=nil)
|
63
|
+
return if is_running?
|
64
|
+
prepare_robots(robot)
|
65
|
+
|
66
|
+
unless cli?
|
67
|
+
begin
|
68
|
+
start_api
|
69
|
+
master.start_work
|
70
|
+
begin_working
|
71
|
+
rescue Interrupt
|
72
|
+
Celluloid::Logger.info 'Shutting down...'
|
73
|
+
master.stop_work if master
|
74
|
+
# Explicitly exit so busy Processor threads can't block
|
75
|
+
# process shutdown... taken from Sidekiq, thanks!
|
76
|
+
exit(0)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Prepare master robots for work
|
82
|
+
def prepare_robots(robot=nil)
|
83
|
+
if robot.respond_to?(:work)
|
84
|
+
robots = [robot]
|
85
|
+
elsif robot.kind_of?(Array)
|
86
|
+
robots = robot
|
87
|
+
else
|
88
|
+
robots = [self.new]
|
89
|
+
end
|
90
|
+
|
91
|
+
Celluloid::Actor[:master] = Master.new(robots)
|
92
|
+
end
|
93
|
+
|
94
|
+
def begin_working
|
95
|
+
self_read, self_write = IO.pipe
|
96
|
+
setup_interrupt(self_write)
|
97
|
+
handle_signals(self_read)
|
98
|
+
end
|
99
|
+
|
100
|
+
def setup_interrupt(self_write)
|
101
|
+
Signal.trap("INT") do
|
102
|
+
self_write.puts("INT")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def handle_signals(self_read)
|
107
|
+
while readable_io = IO.select([self_read])
|
108
|
+
signal = readable_io.first[0].gets.strip
|
109
|
+
raise Interrupt
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def start_api
|
114
|
+
Celluloid::Actor[:api] = Api.new(self.api_host, self.api_port) if self.use_api
|
115
|
+
end
|
116
|
+
|
117
|
+
# Master actor
|
118
|
+
def master
|
119
|
+
Celluloid::Actor[:master]
|
120
|
+
end
|
121
|
+
|
122
|
+
# @return [Boolean] True if test env
|
123
|
+
def test?
|
124
|
+
ENV["ARTOO_TEST"] == 'true'
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [Boolean] True if cli env
|
128
|
+
def cli?
|
129
|
+
ENV["ARTOO_CLI"] == 'true'
|
130
|
+
end
|
131
|
+
|
132
|
+
# @return [Boolean] True if it's running
|
133
|
+
def is_running?
|
134
|
+
@@running ||= false
|
135
|
+
@@running == true
|
136
|
+
end
|
137
|
+
|
138
|
+
def running!
|
139
|
+
@@running = true
|
140
|
+
end
|
141
|
+
|
142
|
+
def stopped!
|
143
|
+
@@running = false
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
data/lib/artoo/version.rb
CHANGED
data/test/robot_test.rb
CHANGED
@@ -64,12 +64,12 @@ describe Artoo::Robot do
|
|
64
64
|
MultiJson.load(@robot.as_json, :symbolize_keys => true)[:name].must_equal "testme"
|
65
65
|
end
|
66
66
|
|
67
|
-
describe 'work' do
|
67
|
+
describe 'work!' do
|
68
68
|
before do
|
69
|
-
TestRobot.stubs(:
|
69
|
+
TestRobot.stubs(:begin_working)
|
70
70
|
@master = mock('master')
|
71
|
-
TestRobot.stubs(:master).returns(@master)
|
72
71
|
@master.expects(:start_work)
|
72
|
+
TestRobot.stubs(:master).returns(@master)
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'Artoo::Robot.work! with single object' do
|
data/test/test_helper.rb
CHANGED
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.
|
4
|
+
version: 1.0.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ron Evans
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-05-
|
15
|
+
date: 2013-05-24 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: celluloid
|
@@ -146,15 +146,13 @@ email:
|
|
146
146
|
executables:
|
147
147
|
- retry.sh
|
148
148
|
- robi
|
149
|
-
- sphero.sh
|
150
|
-
- sphero_linux_bind.sh
|
151
|
-
- sphero_linux_socat.sh
|
152
149
|
extensions: []
|
153
150
|
extra_rdoc_files: []
|
154
151
|
files:
|
155
152
|
- .gitignore
|
156
153
|
- .travis.yml
|
157
154
|
- .yardopts
|
155
|
+
- CONTRIBUTORS.md
|
158
156
|
- Gemfile
|
159
157
|
- Gemfile.lock
|
160
158
|
- Guardfile
|
@@ -193,9 +191,6 @@ files:
|
|
193
191
|
- artoo.gemspec
|
194
192
|
- bin/retry.sh
|
195
193
|
- bin/robi
|
196
|
-
- bin/sphero.sh
|
197
|
-
- bin/sphero_linux_bind.sh
|
198
|
-
- bin/sphero_linux_socat.sh
|
199
194
|
- examples/ardrone.rb
|
200
195
|
- examples/ardrone_nav.rb
|
201
196
|
- examples/ardrone_nav_video.rb
|
@@ -217,7 +212,6 @@ files:
|
|
217
212
|
- examples/roomba.rb
|
218
213
|
- examples/roomba_wiichuck.rb
|
219
214
|
- examples/sphero.rb
|
220
|
-
- examples/sphero2.rb
|
221
215
|
- examples/sphero_color.rb
|
222
216
|
- examples/sphero_cycle.rb
|
223
217
|
- examples/sphero_firmata.rb
|
@@ -228,13 +222,8 @@ files:
|
|
228
222
|
- examples/wiiclassic.rb
|
229
223
|
- lib/artoo.rb
|
230
224
|
- lib/artoo/adaptors/adaptor.rb
|
231
|
-
- lib/artoo/adaptors/ardrone.rb
|
232
|
-
- lib/artoo/adaptors/ardrone_navigation.rb
|
233
|
-
- lib/artoo/adaptors/ardrone_video.rb
|
234
|
-
- lib/artoo/adaptors/firmata.rb
|
235
225
|
- lib/artoo/adaptors/loopback.rb
|
236
|
-
- lib/artoo/adaptors/
|
237
|
-
- lib/artoo/adaptors/sphero.rb
|
226
|
+
- lib/artoo/adaptors/test.rb
|
238
227
|
- lib/artoo/api.rb
|
239
228
|
- lib/artoo/api_route_helpers.rb
|
240
229
|
- lib/artoo/basic.rb
|
@@ -242,22 +231,12 @@ files:
|
|
242
231
|
- lib/artoo/delegator.rb
|
243
232
|
- lib/artoo/device.rb
|
244
233
|
- lib/artoo/device_event_client.rb
|
245
|
-
- lib/artoo/drivers/
|
246
|
-
- lib/artoo/drivers/ardrone_navigation.rb
|
247
|
-
- lib/artoo/drivers/ardrone_video.rb
|
248
|
-
- lib/artoo/drivers/button.rb
|
234
|
+
- lib/artoo/drivers/counter.rb
|
249
235
|
- lib/artoo/drivers/driver.rb
|
250
|
-
- lib/artoo/drivers/led.rb
|
251
|
-
- lib/artoo/drivers/motor.rb
|
252
236
|
- lib/artoo/drivers/passthru.rb
|
253
237
|
- lib/artoo/drivers/pinger.rb
|
254
|
-
- lib/artoo/drivers/
|
255
|
-
- lib/artoo/drivers/
|
256
|
-
- lib/artoo/drivers/servo.rb
|
257
|
-
- lib/artoo/drivers/sphero.rb
|
258
|
-
- lib/artoo/drivers/wiichuck.rb
|
259
|
-
- lib/artoo/drivers/wiiclassic.rb
|
260
|
-
- lib/artoo/drivers/wiidriver.rb
|
238
|
+
- lib/artoo/drivers/random.rb
|
239
|
+
- lib/artoo/drivers/test.rb
|
261
240
|
- lib/artoo/events.rb
|
262
241
|
- lib/artoo/ext/actor.rb
|
263
242
|
- lib/artoo/ext/timers.rb
|
@@ -265,30 +244,17 @@ files:
|
|
265
244
|
- lib/artoo/master.rb
|
266
245
|
- lib/artoo/port.rb
|
267
246
|
- lib/artoo/robot.rb
|
247
|
+
- lib/artoo/robot_class_methods.rb
|
268
248
|
- lib/artoo/utility.rb
|
269
249
|
- lib/artoo/version.rb
|
270
250
|
- test/adaptors/adaptor_test.rb
|
271
|
-
- test/adaptors/ardrone_test.rb
|
272
|
-
- test/adaptors/firmata_test.rb
|
273
251
|
- test/adaptors/loopback_test.rb
|
274
|
-
- test/adaptors/sphero_test.rb
|
275
252
|
- test/api_test.rb
|
276
253
|
- test/artoo_test.rb
|
277
254
|
- test/connection_test.rb
|
278
255
|
- test/delegator_test.rb
|
279
256
|
- test/device_test.rb
|
280
|
-
- test/drivers/ardrone_navigation_test.rb
|
281
|
-
- test/drivers/ardrone_test.rb
|
282
|
-
- test/drivers/ardrone_video_test.rb
|
283
257
|
- test/drivers/driver_test.rb
|
284
|
-
- test/drivers/led_test.rb
|
285
|
-
- test/drivers/motor_test.rb
|
286
|
-
- test/drivers/roomba_test.rb
|
287
|
-
- test/drivers/servo_test.rb
|
288
|
-
- test/drivers/sphero_test.rb
|
289
|
-
- test/drivers/wiichuck_test.rb
|
290
|
-
- test/drivers/wiiclassic_test.rb
|
291
|
-
- test/drivers/wiidriver_test.rb
|
292
258
|
- test/master_test.rb
|
293
259
|
- test/port_test.rb
|
294
260
|
- test/robot_test.rb
|
@@ -309,9 +275,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
309
275
|
version: '0'
|
310
276
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
311
277
|
requirements:
|
312
|
-
- - '
|
278
|
+
- - '>'
|
313
279
|
- !ruby/object:Gem::Version
|
314
|
-
version:
|
280
|
+
version: 1.3.1
|
315
281
|
requirements: []
|
316
282
|
rubyforge_project: artoo
|
317
283
|
rubygems_version: 2.0.3
|
data/bin/sphero.sh
DELETED
data/bin/sphero_linux_bind.sh
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
#
|
3
|
-
# This will create a sphero connection bound to /dev/Sphero-XXX
|
4
|
-
#
|
5
|
-
# Requires sudo or ran as root
|
6
|
-
#
|
7
|
-
# $1 = unbound /dev/rfcommXX
|
8
|
-
# $2 = sphero hardware address from hcitool scan
|
9
|
-
# $3 = sphero three letter color code
|
10
|
-
#
|
11
|
-
# Optional parameter
|
12
|
-
# $4 = bluetooth radio hcix
|
13
|
-
#
|
14
|
-
# Example
|
15
|
-
#
|
16
|
-
# sudo ./sphero_linux_bind.sh 1 00:06:66:4A:43:23 PYG hci1
|
17
|
-
#
|
18
|
-
#
|
19
|
-
if [ -z "$4" ]; then
|
20
|
-
addr="hci0"
|
21
|
-
else
|
22
|
-
addr=$4
|
23
|
-
fi
|
24
|
-
rfcomm -i $addr bind /dev/rfcomm$1 $2 1
|
25
|
-
ln -s /dev/rfcomm$1 /dev/Sphero-$3
|
data/bin/sphero_linux_socat.sh
DELETED
data/examples/sphero2.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'artoo/robot'
|
2
|
-
|
3
|
-
class DoubleSpheroRobot < Artoo::Robot
|
4
|
-
connection :sphero, :adaptor => :sphero
|
5
|
-
device :sphero, :driver => :sphero
|
6
|
-
|
7
|
-
work do
|
8
|
-
@count = 1
|
9
|
-
every(3.seconds) do
|
10
|
-
sphero.set_color(@count % 2 == 0 ? :green : :blue)
|
11
|
-
@count += 1
|
12
|
-
sphero.roll 90, rand(360)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
SPHEROS = {"127.0.0.1:4560" => "/dev/tty.Sphero-BRG-RN-SPP",
|
18
|
-
"127.0.0.1:4561" => "/dev/tty.Sphero-YBW-RN-SPP"}
|
19
|
-
robots = []
|
20
|
-
SPHEROS.each_key {|p|
|
21
|
-
robots << DoubleSpheroRobot.new(:connections =>
|
22
|
-
{:sphero =>
|
23
|
-
{:port => p}})
|
24
|
-
}
|
25
|
-
|
26
|
-
DoubleSpheroRobot.work!(robots)
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'artoo/adaptors/adaptor'
|
2
|
-
|
3
|
-
module Artoo
|
4
|
-
module Adaptors
|
5
|
-
# This class connects to a ARDrone 2.0
|
6
|
-
# @see http://rubydoc.info/gems/hybridgroup-argus/0.2.0/Argus/Drone Argus Drone Documentation
|
7
|
-
class Ardrone < Adaptor
|
8
|
-
finalizer :finalize
|
9
|
-
attr_reader :ardrone
|
10
|
-
|
11
|
-
# Finalizes connection with ARDrone by landing and stopping the device
|
12
|
-
def finalize
|
13
|
-
if connected?
|
14
|
-
ardrone.land
|
15
|
-
ardrone.stop
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Creates Argus Drone connection with device
|
20
|
-
# @return [Boolean]
|
21
|
-
def connect
|
22
|
-
require 'argus' unless defined?(::Argus)
|
23
|
-
@ardrone = Argus::Drone.new(connect_to_udp, port.host, port.port)
|
24
|
-
super
|
25
|
-
end
|
26
|
-
|
27
|
-
# Disconnects device by stopping it and ending connection
|
28
|
-
# @return [Boolean]
|
29
|
-
def disconnect
|
30
|
-
ardrone.stop
|
31
|
-
super
|
32
|
-
end
|
33
|
-
|
34
|
-
# Calls ardrone actions using method missing
|
35
|
-
# @see https://github.com/hybridgroup/argus/blob/master/lib/argus/drone.rb hybridgroup-argus Drone
|
36
|
-
def method_missing(method_name, *arguments, &block)
|
37
|
-
ardrone.send(method_name, *arguments, &block)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'artoo/adaptors/adaptor'
|
2
|
-
|
3
|
-
module Artoo
|
4
|
-
module Adaptors
|
5
|
-
# Connect to a ARDrone 2.0 navigation data stream
|
6
|
-
# @see http://rubydoc.info/gems/hybridgroup-argus/0.2.0/Argus/NavStreamer Argus NavStremer Documentation
|
7
|
-
class ArdroneNavigation < Adaptor
|
8
|
-
attr_reader :ardrone
|
9
|
-
|
10
|
-
# Creates connection with Argus NavStreamer and starts ardrone device
|
11
|
-
# @return [Boolean]
|
12
|
-
def connect
|
13
|
-
require 'argus' unless defined?(::Argus)
|
14
|
-
@ardrone = Argus::NavStreamer.new(connect_to_udp, port.host, port.port.to_i)
|
15
|
-
@ardrone.start
|
16
|
-
super
|
17
|
-
end
|
18
|
-
|
19
|
-
# Closes connection with ardrone device
|
20
|
-
# @return [Boolean]
|
21
|
-
def disconnect
|
22
|
-
ardrone.close
|
23
|
-
super
|
24
|
-
end
|
25
|
-
|
26
|
-
# Calls ardrone actions using method missing
|
27
|
-
# @see http://rubydoc.info/gems/hybridgroup-argus/0.2.0/Argus/Drone Argus Drone Documentation
|
28
|
-
def method_missing(method_name, *arguments, &block)
|
29
|
-
ardrone.send(method_name, *arguments, &block)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|