artoo-ardrone 1.1.0 → 1.2.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 +4 -4
- data/Gemfile +3 -0
- data/Gemfile.lock +7 -7
- data/README.md +31 -5
- data/artoo-ardrone.gemspec +3 -3
- data/examples/ardrone.rb +5 -2
- data/examples/ardrone_animate.rb +19 -0
- data/examples/ardrone_autoreset.rb +18 -0
- data/examples/ardrone_nav.rb +8 -4
- data/examples/ardrone_video.rb +7 -3
- data/lib/artoo-ardrone/version.rb +1 -1
- data/lib/artoo/adaptors/ardrone.rb +2 -2
- data/lib/artoo/adaptors/ardrone_navigation.rb +2 -2
- data/lib/artoo/adaptors/ardrone_video.rb +2 -3
- data/lib/artoo/drivers/ardrone.rb +38 -2
- data/lib/artoo/drivers/ardrone_navigation.rb +27 -0
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bc5acd4687ec069209f7bb716184b457813530d
|
4
|
+
data.tar.gz: 60232183554a45cc4faa9c9fc966e3366b651dd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f670ede922a86b83dbe08a8d298a554c78d0828e551a5e2bfbac5028ec72d6f600f166b197859673ec3a131952a7d59c8e9a6d645cde599b5804da23e929c05
|
7
|
+
data.tar.gz: 0033765d9674b4d3ab3a21dc8ac254641eed1a51882e1ca28db68aa36297acc38c96b00efd5e08026b5cf4f047e95e3a3163ca005255fed24a4857904eb98168
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
artoo-ardrone (1.
|
5
|
-
|
6
|
-
|
4
|
+
artoo-ardrone (1.2.0)
|
5
|
+
artoo (>= 1.3.0)
|
6
|
+
hybridgroup-argus (>= 0.5.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: http://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
12
|
-
artoo (1.2.2)
|
11
|
+
artoo (1.3.0)
|
13
12
|
celluloid (~> 0.15.0)
|
14
13
|
celluloid-io (~> 0.15.0)
|
15
14
|
multi_json (~> 1.6)
|
@@ -17,7 +16,7 @@ GEM
|
|
17
16
|
rake
|
18
17
|
reel (~> 0.4.0)
|
19
18
|
thor (~> 0.18.1)
|
20
|
-
celluloid (0.15.
|
19
|
+
celluloid (0.15.2)
|
21
20
|
timers (~> 1.1.0)
|
22
21
|
celluloid-io (0.15.0)
|
23
22
|
celluloid (>= 0.15.0)
|
@@ -26,13 +25,14 @@ GEM
|
|
26
25
|
http (0.5.0)
|
27
26
|
http_parser.rb
|
28
27
|
http_parser.rb (0.6.0.beta.2)
|
28
|
+
hybridgroup-argus (0.5.0)
|
29
29
|
metaclass (0.0.1)
|
30
30
|
method_source (0.8.2)
|
31
31
|
minitest (5.0.1)
|
32
32
|
minitest-happy (1.0.0)
|
33
33
|
mocha (0.14.0)
|
34
34
|
metaclass (~> 0.0.1)
|
35
|
-
multi_json (1.8.
|
35
|
+
multi_json (1.8.2)
|
36
36
|
nio4r (0.5.0)
|
37
37
|
pry (0.9.12.2)
|
38
38
|
coderay (~> 1.0.5)
|
data/README.md
CHANGED
@@ -19,17 +19,19 @@ gem install artoo-ardrone
|
|
19
19
|
## Using
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
require 'artoo'
|
23
22
|
|
24
|
-
connection :ardrone, :adaptor => :ardrone
|
23
|
+
connection :ardrone, :adaptor => :ardrone
|
25
24
|
device :drone, :driver => :ardrone, :connection => :ardrone
|
26
25
|
|
27
26
|
work do
|
27
|
+
on drone, :ready => :fly
|
28
28
|
drone.start
|
29
|
+
end
|
30
|
+
|
31
|
+
def fly(*data)
|
29
32
|
drone.take_off
|
30
|
-
|
31
|
-
after(
|
32
|
-
after(30.seconds) { drone.stop }
|
33
|
+
after(15.seconds) { drone.hover.land }
|
34
|
+
after(20.seconds) { drone.stop }
|
33
35
|
end
|
34
36
|
```
|
35
37
|
|
@@ -37,6 +39,30 @@ end
|
|
37
39
|
|
38
40
|
The ARDrone is a WiFi device, so there is no additional work to establish a connection to a single drone. However, in order to connect to multiple drones, you need to perform some configuration steps on each drone via SSH.
|
39
41
|
|
42
|
+
## Automatic Reset From Emergency Mode
|
43
|
+
|
44
|
+
When you first connect to the ARDrone by calling the `start` method, if it is in "emergency" mode, the ARDrone will not take off. Artoo can automatically reset it back "normal" mode, to be able to fly IF you pass in the navigation like this example:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
|
48
|
+
connection :ardrone, :adaptor => :ardrone
|
49
|
+
device :drone, :driver => :ardrone, :connection => :ardrone
|
50
|
+
|
51
|
+
connection :navigation, :adaptor => :ardrone_navigation
|
52
|
+
device :nav, :driver => :ardrone_navigation, :connection => :navigation
|
53
|
+
|
54
|
+
work do
|
55
|
+
on drone, :ready => :fly
|
56
|
+
drone.start(nav) # pass the nav object into the start method
|
57
|
+
end
|
58
|
+
|
59
|
+
def fly(*data)
|
60
|
+
drone.take_off
|
61
|
+
after(15.seconds) { drone.hover.land }
|
62
|
+
after(20.seconds) { drone.stop }
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
40
66
|
## Contributing
|
41
67
|
|
42
68
|
1. Fork it
|
data/artoo-ardrone.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "artoo-ardrone"
|
7
7
|
s.version = Artoo::Ardrone::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Ron Evans", "Adrian Zankich"]
|
9
|
+
s.authors = ["Ron Evans", "Adrian Zankich", "Julian Cheal", "Joe Merante", "Benjamin Abruzzo"]
|
10
10
|
s.email = ["artoo@hybridgroup.com"]
|
11
11
|
s.homepage = "https://github.com/hybridgroup/artoo-ardrone"
|
12
12
|
s.summary = %q{Artoo adaptor and driver for Parrot ARDrone 2.0}
|
@@ -19,8 +19,8 @@ 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 'artoo', '>= 1.
|
23
|
-
s.add_runtime_dependency 'argus', '>= 0.
|
22
|
+
s.add_runtime_dependency 'artoo', '>= 1.3.0'
|
23
|
+
s.add_runtime_dependency 'hybridgroup-argus', '>= 0.5.0'
|
24
24
|
s.add_development_dependency 'minitest', '>= 5.0'
|
25
25
|
s.add_development_dependency 'minitest-happy'
|
26
26
|
s.add_development_dependency 'mocha', '>= 0.14.0'
|
data/examples/ardrone.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'artoo'
|
2
2
|
|
3
|
-
connection :ardrone, :adaptor => :ardrone
|
3
|
+
connection :ardrone, :adaptor => :ardrone
|
4
4
|
device :drone, :driver => :ardrone, :connection => :ardrone
|
5
5
|
|
6
6
|
work do
|
7
|
+
on drone, :ready => :fly
|
7
8
|
drone.start
|
8
|
-
|
9
|
+
end
|
9
10
|
|
11
|
+
def fly(*data)
|
12
|
+
drone.take_off
|
10
13
|
after(15.seconds) { drone.hover.land }
|
11
14
|
after(20.seconds) { drone.stop }
|
12
15
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'artoo'
|
2
|
+
|
3
|
+
connection :ardrone, :adaptor => :ardrone
|
4
|
+
device :drone, :driver => :ardrone, :connection => :ardrone
|
5
|
+
|
6
|
+
connection :navigation, :adaptor => :ardrone_navigation
|
7
|
+
device :nav, :driver => :ardrone_navigation, :connection => :navigation
|
8
|
+
|
9
|
+
work do
|
10
|
+
on drone, :ready => :fly
|
11
|
+
drone.start(nav)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fly(*data)
|
15
|
+
drone.take_off
|
16
|
+
after(10.seconds) { drone.animate(:turnaround, 3000) }
|
17
|
+
after(15.seconds) { drone.hover.land }
|
18
|
+
after(20.seconds) { drone.stop }
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'artoo'
|
2
|
+
|
3
|
+
connection :ardrone, :adaptor => :ardrone
|
4
|
+
device :drone, :driver => :ardrone, :connection => :ardrone
|
5
|
+
|
6
|
+
connection :navigation, :adaptor => :ardrone_navigation, :port => '192.168.1.1:5554'
|
7
|
+
device :nav, :driver => :ardrone_navigation, :connection => :navigation
|
8
|
+
|
9
|
+
work do
|
10
|
+
on drone, :ready => :fly
|
11
|
+
drone.start(nav)
|
12
|
+
end
|
13
|
+
|
14
|
+
def fly(*data)
|
15
|
+
drone.take_off
|
16
|
+
after(15.seconds) { drone.hover.land }
|
17
|
+
after(20.seconds) { drone.stop }
|
18
|
+
end
|
data/examples/ardrone_nav.rb
CHANGED
@@ -7,12 +7,16 @@ connection :navigation, :adaptor => :ardrone_navigation, :port => '192.168.1.1:5
|
|
7
7
|
device :nav, :driver => :ardrone_navigation, :connection => :navigation
|
8
8
|
|
9
9
|
work do
|
10
|
+
on drone, :ready => :fly
|
10
11
|
on nav, :navdata => :nav_update
|
11
|
-
|
12
|
+
|
13
|
+
drone.start(nav)
|
14
|
+
end
|
15
|
+
|
16
|
+
def fly(*data)
|
12
17
|
drone.take_off
|
13
|
-
|
14
|
-
after(
|
15
|
-
after(30.seconds) { drone.stop }
|
18
|
+
after(15.seconds) { drone.hover.land }
|
19
|
+
after(20.seconds) { drone.stop }
|
16
20
|
end
|
17
21
|
|
18
22
|
def nav_update(*data)
|
data/examples/ardrone_video.rb
CHANGED
@@ -7,12 +7,16 @@ connection :videodrone, :adaptor => :ardrone_video, :port => '192.168.1.1:5555'
|
|
7
7
|
device :video, :driver => :ardrone_video, :connection => :videodrone
|
8
8
|
|
9
9
|
work do
|
10
|
+
on drone, :ready => :fly
|
10
11
|
on video, :frame => :v_frame
|
12
|
+
|
11
13
|
drone.start
|
12
|
-
|
14
|
+
end
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
def fly(*data)
|
17
|
+
drone.take_off
|
18
|
+
after(15.seconds) { drone.hover.land }
|
19
|
+
after(20.seconds) { drone.stop }
|
16
20
|
end
|
17
21
|
|
18
22
|
def v_frame(*data)
|
@@ -19,8 +19,8 @@ module Artoo
|
|
19
19
|
# Creates Argus Drone connection with device
|
20
20
|
# @return [Boolean]
|
21
21
|
def connect
|
22
|
-
require 'argus' unless defined?(Argus)
|
23
|
-
@ardrone = Argus::Drone.new(socket: connect_to_udp, host: port.host, port: port.port)
|
22
|
+
require 'argus' unless defined?(::Argus::Drone)
|
23
|
+
@ardrone = ::Argus::Drone.new(socket: connect_to_udp, host: port.host, port: port.port)
|
24
24
|
super
|
25
25
|
end
|
26
26
|
|
@@ -10,8 +10,8 @@ module Artoo
|
|
10
10
|
# Creates connection with Argus NavStreamer and starts ardrone device
|
11
11
|
# @return [Boolean]
|
12
12
|
def connect
|
13
|
-
require 'argus' unless defined?(Argus)
|
14
|
-
@ardrone = Argus::NavStreamer.new(socket: connect_to_udp, remote_host: port.host, port: port.port.to_i)
|
13
|
+
require 'argus' unless defined?(::Argus::NavStreamer)
|
14
|
+
@ardrone = ::Argus::NavStreamer.new(socket: connect_to_udp, remote_host: port.host, port: port.port.to_i)
|
15
15
|
@ardrone.start
|
16
16
|
super
|
17
17
|
end
|
@@ -12,9 +12,8 @@ module Artoo
|
|
12
12
|
# Argus PaVE Parser starting a stream with ardrone device
|
13
13
|
# @return [Boolean]
|
14
14
|
def connect
|
15
|
-
require 'argus' unless defined?(Argus)
|
16
|
-
|
17
|
-
@ardrone = Argus::VideoStreamer.new(socket: connect_to_tcp, host: port.host, post: port.port)
|
15
|
+
require 'argus' unless defined?(::Argus::VideoStreamer)
|
16
|
+
@ardrone = ::Argus::VideoStreamer.new(socket: connect_to_tcp, host: port.host, post: port.port)
|
18
17
|
@ardrone.start(connect_to_udp)
|
19
18
|
super
|
20
19
|
end
|
@@ -5,12 +5,48 @@ module Artoo
|
|
5
5
|
# Ardrone driver behaviors
|
6
6
|
# @see https://github.com/hybridgroup/argus/blob/master/lib/argus/drone.rb Argus::Drone docs for supported actions
|
7
7
|
class Ardrone < Driver
|
8
|
-
COMMANDS = [:start, :stop, :hover, :land, :take_off, :
|
8
|
+
COMMANDS = [:start, :stop, :hover, :land, :take_off, :enable_emergency, :disable_emergency,
|
9
9
|
:front_camera, :bottom_camera, :up, :down, :left, :right,
|
10
10
|
:forward, :backward, :turn_left, :turn_right, :reset_watchdog, :led].freeze
|
11
11
|
|
12
|
-
def start
|
12
|
+
def start(nav=nil)
|
13
13
|
connection.start(false) # send false, so Argus does not use NavMonitor
|
14
|
+
|
15
|
+
if nav
|
16
|
+
start_with_nav(nav)
|
17
|
+
else
|
18
|
+
publish(event_topic_name("ready"))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def start_with_nav(nav)
|
23
|
+
until !nav.emergency_landing?.nil?
|
24
|
+
sleep 0.1
|
25
|
+
end
|
26
|
+
|
27
|
+
if nav.emergency_landing?
|
28
|
+
connection.disable_emergency
|
29
|
+
after(1) do
|
30
|
+
connection.disable_emergency(false)
|
31
|
+
publish(event_topic_name("ready"))
|
32
|
+
end
|
33
|
+
else
|
34
|
+
publish(event_topic_name("ready"))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def enable_emergency
|
39
|
+
connection.enable_emergency
|
40
|
+
after(1) do
|
41
|
+
connection.enable_emergency(false)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def disable_emergency
|
46
|
+
connection.disable_emergency
|
47
|
+
after(1) do
|
48
|
+
connection.disable_emergency(false)
|
49
|
+
end
|
14
50
|
end
|
15
51
|
end
|
16
52
|
end
|
@@ -4,6 +4,7 @@ module Artoo
|
|
4
4
|
module Drivers
|
5
5
|
# Ardrone navigation driver behaviors
|
6
6
|
class ArdroneNavigation < Driver
|
7
|
+
COMMANDS = [:emergency_landing?].freeze
|
7
8
|
|
8
9
|
# Starts driver and handle updates from device
|
9
10
|
def start_driver
|
@@ -12,15 +13,41 @@ module Artoo
|
|
12
13
|
end
|
13
14
|
|
14
15
|
super
|
16
|
+
|
17
|
+
publish(event_topic_name("ready"))
|
15
18
|
end
|
16
19
|
|
17
20
|
# Receives data from navigation and publishes
|
18
21
|
# and event in update topic for it
|
19
22
|
def handle_update
|
20
23
|
navdata = connection.receive_data
|
24
|
+
return unless navdata
|
25
|
+
|
26
|
+
@emergency_landing = navdata.emergency_landing?
|
27
|
+
|
28
|
+
navdata.options.each do |opt|
|
29
|
+
n = navdata.clone
|
30
|
+
n.options = opt
|
31
|
+
|
32
|
+
case
|
33
|
+
when opt.is_a?(::Argus::NavOptionDemo)
|
34
|
+
publish(event_topic_name("update"), "navdata_demo", n, opt)
|
35
|
+
publish(event_topic_name("demo"), n, opt)
|
36
|
+
|
37
|
+
when opt.is_a?(::Argus::NavOptionVisionDetect)
|
38
|
+
publish(event_topic_name("update"), "navdata_vision_detect", n, opt)
|
39
|
+
publish(event_topic_name("vision_detect"), n, opt)
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
21
44
|
publish(event_topic_name("update"), "navdata", navdata)
|
22
45
|
publish(event_topic_name("navdata"), navdata)
|
23
46
|
end
|
47
|
+
|
48
|
+
def emergency_landing?
|
49
|
+
@emergency_landing
|
50
|
+
end
|
24
51
|
end
|
25
52
|
end
|
26
53
|
end
|
metadata
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artoo-ardrone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ron Evans
|
8
8
|
- Adrian Zankich
|
9
|
+
- Julian Cheal
|
10
|
+
- Joe Merante
|
11
|
+
- Benjamin Abruzzo
|
9
12
|
autorequire:
|
10
13
|
bindir: bin
|
11
14
|
cert_chain: []
|
12
|
-
date: 2013-
|
15
|
+
date: 2013-10-17 00:00:00.000000000 Z
|
13
16
|
dependencies:
|
14
17
|
- !ruby/object:Gem::Dependency
|
15
18
|
name: artoo
|
@@ -17,28 +20,28 @@ dependencies:
|
|
17
20
|
requirements:
|
18
21
|
- - '>='
|
19
22
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.
|
23
|
+
version: 1.3.0
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - '>='
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.
|
30
|
+
version: 1.3.0
|
28
31
|
- !ruby/object:Gem::Dependency
|
29
|
-
name: argus
|
32
|
+
name: hybridgroup-argus
|
30
33
|
requirement: !ruby/object:Gem::Requirement
|
31
34
|
requirements:
|
32
35
|
- - '>='
|
33
36
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
37
|
+
version: 0.5.0
|
35
38
|
type: :runtime
|
36
39
|
prerelease: false
|
37
40
|
version_requirements: !ruby/object:Gem::Requirement
|
38
41
|
requirements:
|
39
42
|
- - '>='
|
40
43
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
44
|
+
version: 0.5.0
|
42
45
|
- !ruby/object:Gem::Dependency
|
43
46
|
name: minitest
|
44
47
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,6 +101,8 @@ files:
|
|
98
101
|
- Rakefile
|
99
102
|
- artoo-ardrone.gemspec
|
100
103
|
- examples/ardrone.rb
|
104
|
+
- examples/ardrone_animate.rb
|
105
|
+
- examples/ardrone_autoreset.rb
|
101
106
|
- examples/ardrone_nav.rb
|
102
107
|
- examples/ardrone_video.rb
|
103
108
|
- lib/artoo-ardrone.rb
|