artoo-crazyflie 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e0d2c7d86a802bdc5bdb2549311392b230baa96
4
- data.tar.gz: 38e0a2be8d4936500f40acb5457c9f4847b9807f
3
+ metadata.gz: 6890ddc5ec889db00a3ed9468fec67b3a03ac599
4
+ data.tar.gz: fef07e21f062f4beccd9127c36557e6ddf1894fd
5
5
  SHA512:
6
- metadata.gz: c8af6dcddbf341d1b125eb5b25220ceb8b645a9c6beb348a923b47a486179423653fbbce895e48fa10e648ab569cd3ebe893555c67baf5986b584aa5927e5e8b
7
- data.tar.gz: eb781ee11670ffff07047498cd99f12c91c82a4490493dc949ad4efe95493a748785e10fa106015f3680afbf6c89c57b00d7f6bd2d366120a20876a67f030876
6
+ metadata.gz: 5545493e93429a491b820265ded8ee2b6a07d6be120e51a1454ebaa4af6988bccdab01bb48af243fad90c9be400bf6abd98cd73af549b9075be304a91e11b35f
7
+ data.tar.gz: ebf8c585bd3eeb666170b84ee5695fc4a534e8909314f43b71dd7ebce572dd51ce34d81c3d9f639db329426396b3919b63ecc6fafc8030f6c143cb506fe1043c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- artoo-crazyflie (0.1.0)
4
+ artoo-crazyflie (0.2.0)
5
5
  artoo (>= 1.3.0)
6
6
  hybridgroup-crubyflie
7
7
 
data/README.md CHANGED
@@ -35,6 +35,21 @@ end
35
35
 
36
36
  The Crazyflie uses a 2.4 GHz radio to communicate. There is a USB dongle called the Crazyradio that is required to control the Crazyflie quadcopter.
37
37
 
38
+ If you are have a USB 3.0 port, you might run into this issue http://stackoverflow.com/questions/17204253/crazyflie-usb-3-0-incompability
39
+
40
+ ## Crazyflie Hover
41
+
42
+ To use Crazyflie with the hover command, requires installing the https://bitbucket.org/omwdunkley/crazyflie-firmware fork of the Crazyflie firmware. The easiest way to currently do this, is to install the Crazyflie PC Client, download the 'hover' branch BIN file from here https://bitbucket.org/omwdunkley/crazyflie-firmware/downloads/cflie.bin and then use the Crazyflie PC tools to update the Crazyflie firmware.
43
+
44
+ Once you have updated the Crazyflie firmware, you will NEED to use the following syntax in your Artoo code to use it:
45
+
46
+ ```ruby
47
+ connection :crazyflie, :adaptor => :crazyflie, :supports_hover => true
48
+ ```
49
+
50
+ If you do not add `:supports_hover => true` to your connection code to the Crazyflie, it will go crazy out of control as you as you try to connect to it. You have been warned...
51
+
52
+
38
53
  ## Contributing
39
54
 
40
55
  1. Fork it
@@ -1,10 +1,10 @@
1
1
  require 'artoo'
2
2
 
3
- connection :crazyflie, :adaptor => :crazyflie
3
+ connection :crazyflie, :adaptor => :crazyflie, :supports_hover => true
4
4
  device :drone, :driver => :crazyflie, :connection => :crazyflie, :interval => 0.1
5
5
 
6
6
  work do
7
- drone.forward(0)
8
- drone.set_thrust_on
7
+ drone.take_off
8
+
9
9
  after(1.seconds) {drone.stop}
10
10
  end
@@ -0,0 +1,19 @@
1
+ require 'artoo'
2
+
3
+ connection :crazyflie, :adaptor => :crazyflie, :supports_hover => true
4
+ device :drone, :driver => :crazyflie, :connection => :crazyflie, :interval => 0.1
5
+
6
+ work do
7
+ drone.start
8
+ drone.take_off
9
+
10
+ after(1.5) {drone.hover(:start)}
11
+
12
+ after(3.seconds) {
13
+ drone.land
14
+ }
15
+
16
+ after(5.seconds) {
17
+ drone.stop
18
+ }
19
+ end
@@ -1,23 +1,20 @@
1
1
  require 'artoo'
2
2
 
3
- connection :crazyflie, :adaptor => :crazyflie
3
+ connection :crazyflie, :adaptor => :crazyflie, :supports_hover => true
4
4
  device :drone, :driver => :crazyflie, :connection => :crazyflie, :interval => 0.01
5
5
 
6
6
  connection :joystick, :adaptor => :joystick
7
- device :controller, :driver => :xbox360, :connection => :joystick, :interval => 0.01
8
- #device :controller, :driver => :ps3, :connection => :joystick, :interval => 0.01
7
+ #device :controller, :driver => :xbox360, :connection => :joystick, :interval => 0.01
8
+ device :controller, :driver => :ps3, :connection => :joystick, :interval => 0.01
9
9
  #device :controller, :driver => :joystick, :connection => :joystick, :interval => 0.01
10
10
 
11
11
  work do
12
- on controller, :joystick_0 => proc { |caller, data|
13
- handle_joystick_0 data
14
- }
15
- on controller, :joystick_1 => proc { |caller, data|
16
- handle_joystick_1 data
17
- }
12
+ on controller, :joystick_0 => :handle_joystick_0
13
+ on controller, :joystick_1 => :handle_joystick_1
14
+ on controller, :button_x => :handle_hover
18
15
  end
19
16
 
20
- def handle_joystick_0 data
17
+ def handle_joystick_0 caller, data
21
18
  thrust_scale = 1.46
22
19
  yaw_scale = 0.000191753
23
20
  degrade = 700
@@ -41,7 +38,7 @@ def handle_joystick_0 data
41
38
  end
42
39
  end
43
40
 
44
- def handle_joystick_1 data
41
+ def handle_joystick_1 caller, data
45
42
  deg_scale = 0.00091
46
43
 
47
44
  if data[:y] < 0
@@ -60,3 +57,13 @@ def handle_joystick_1 data
60
57
  drone.left(0)
61
58
  end
62
59
  end
60
+
61
+ def handle_hover caller
62
+ if @hover
63
+ @hover = false
64
+ drone.hover(:stop)
65
+ else
66
+ @hover = true
67
+ drone.hover
68
+ end
69
+ end
@@ -1,19 +1,25 @@
1
1
  require 'artoo'
2
2
 
3
- connection :crazyflie, :adaptor => :crazyflie
4
- device :drone, :driver => :crazyflie, :connection => :crazyflie, :interval => 0.01
3
+ connection :crazyflie, :adaptor => :crazyflie, :supports_hover => true
4
+ device :drone, :driver => :crazyflie, :connection => :crazyflie
5
5
 
6
6
  connection :leap, :adaptor => :leapmotion, :port => '127.0.0.1:6437'
7
7
  device :leap, :connection => :leap, :driver => :leapmotion
8
8
 
9
9
  work do
10
10
  on leap, :hand => :wave
11
- every(0.01) do
11
+ every(0.05) do
12
+ calculate_power
12
13
  handle_thrust
13
14
  end
14
15
  end
15
16
 
16
- def handle_thrust
17
+ def wave sender, hand
18
+ return unless hand
19
+ @thrust = hand.palm_z.from_scale(100..800).to_scale(0..60000)
20
+ end
21
+
22
+ def calculate_power
17
23
  @degrade = 700
18
24
  @power = 0 if @power.nil?
19
25
  @thrust = 0 if @thrust.nil?
@@ -25,10 +31,8 @@ def handle_thrust
25
31
  else
26
32
  @power = @power - @degrade
27
33
  end
28
- drone.power(@power)
29
34
  end
30
35
 
31
- def wave sender, hand
32
- return unless hand
33
- @thrust = hand.palm_z.from_scale(100..800).to_scale(0..60000)
36
+ def handle_thrust
37
+ drone.power(@power)
34
38
  end
@@ -1,5 +1,5 @@
1
1
  module Artoo
2
2
  module Crazyflie
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ module Artoo
20
20
  end
21
21
  source = flies.first
22
22
  end
23
+ @crazyflie.supports_hover = additional_params[:supports_hover] || false
23
24
  @crazyflie.open_link(source)
24
25
  @commander = ::Crubyflie::Commander.new(@crazyflie)
25
26
  super
@@ -9,7 +9,7 @@ module Artoo
9
9
  :turn_left, :turn_right, :power].freeze
10
10
 
11
11
 
12
- attr_reader :roll, :pitch, :yaw, :thrust, :xmode
12
+ attr_reader :roll, :pitch, :yaw, :thrust, :xmode, :hover_mode
13
13
 
14
14
  def initialize(params={})
15
15
  @roll = 0
@@ -17,6 +17,7 @@ module Artoo
17
17
  @yaw = 0
18
18
  @thrust = 0
19
19
  @xmode = false # TODO what is this?
20
+ @hover_mode = 0
20
21
  super
21
22
  end
22
23
 
@@ -36,24 +37,43 @@ module Artoo
36
37
  end
37
38
 
38
39
  def start
40
+ @hover_mode = 0
39
41
  @roll = 0
40
42
  @pitch = 0
41
43
  @yaw = 0
42
- @thrust = 10001
44
+ power(10001)
43
45
  end
44
46
 
45
47
  def stop
46
48
  set_thrust_off
47
49
  end
48
50
 
49
- def hover
50
- # TODO: call firmware that can do this?
51
+ def hover(h=:start)
52
+ if h == :start
53
+ @hover_mode = 1
54
+ set_thrust_hover
55
+ else
56
+ @hover_mode = 0
57
+ set_thrust_off
58
+ end
51
59
  end
52
60
 
53
- def land
61
+ def land(secs=1)
62
+ @hover_mode = 0
63
+ power(32000)
64
+
65
+ after(secs) {
66
+ power(22000)
67
+ }
54
68
  end
55
69
 
56
- def take_off
70
+ def take_off(secs=1)
71
+ forward(0)
72
+ set_thrust_on
73
+
74
+ after(secs) {
75
+ power(33000)
76
+ }
57
77
  end
58
78
 
59
79
  def power(deg)
@@ -85,17 +105,22 @@ module Artoo
85
105
  end
86
106
 
87
107
  def set_thrust_on
88
- @thrust = 40000
108
+ power(40000)
89
109
  end
90
110
 
91
111
  def set_thrust_off
92
- @thrust = 0
112
+ power(0)
113
+ end
114
+
115
+ def set_thrust_hover
116
+ power(32597)
93
117
  end
94
118
 
95
119
  private
96
120
 
97
121
  def send_command
98
- connection.commander.send_setpoint(roll, pitch, yaw, thrust, xmode)
122
+ set_thrust_hover if hover_mode == 1
123
+ connection.commander.send_setpoint(roll, pitch, yaw, thrust, xmode, hover_mode)
99
124
  end
100
125
  end
101
126
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artoo-crazyflie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Zankich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-05 00:00:00.000000000 Z
11
+ date: 2013-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: artoo
@@ -95,6 +95,7 @@ files:
95
95
  - Rakefile
96
96
  - artoo-crazyflie.gemspec
97
97
  - examples/crazy_hop.rb
98
+ - examples/crazy_hover.rb
98
99
  - examples/crazy_joystick.rb
99
100
  - examples/crazy_leapmotion.rb
100
101
  - lib/artoo-crazyflie.rb