rumba 0.2.5 → 0.2.6

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: 61b352b09eef601f9b36509b7283772d366fe906
4
- data.tar.gz: 5fd8ed4266bbe4b72ccac8a2ee5ead83217857ac
3
+ metadata.gz: cfa29def9523b31571bf2081b0428dac3c4804ce
4
+ data.tar.gz: e238032a3be080bae5b265ed7b3df1a5c6e9606f
5
5
  SHA512:
6
- metadata.gz: fe9715009338618cd7357377b666b95243eb4261abc356ed2d208b6f9ce18c96bdafac2c6e3bee85df21c9e81775b85dd464ffd9d4d38a284353e8125b1d08b8
7
- data.tar.gz: e85b669ef50bf3faf18fbe0fe41650e7a156fe4c83ccf8a09b1debe0daa00681905b1717be630b7ecfc99b5a624a5d476528b657787a65382afd6dbc502d7e32
6
+ metadata.gz: c09e420f4645064408470c33493e805bb255b08198525f46870a8e172fb0f692294629ad18d1c3ab3f7d6e1f2cfc790ff7c707e921bdcc7f8e1a9513b9eb79b3
7
+ data.tar.gz: 41110e7769d55452e58e4bcfa94aedf0586e7777edad55686a4b3b7fd139afd01d85121cc11da0550301c3f95fa75c798755202113d6f6c469591be88f7f127c
data/README.md CHANGED
@@ -20,6 +20,14 @@ Happy hacking!
20
20
  ### Dependencies
21
21
  * [serialport](http://ruby-serialport.rubyforge.org/)
22
22
 
23
+ ### Installation
24
+
25
+ Easy!
26
+
27
+ ```bash
28
+ gem install rumba
29
+ ```
30
+
23
31
  ### Usage
24
32
 
25
33
  Here's an example program:
@@ -31,13 +39,13 @@ require 'rumba'
31
39
 
32
40
  Roomba.new('/dev/tty.usbserial') do
33
41
  safe_mode
34
- forward meter(1)
42
+ forward 1.meter
35
43
  rotate :left
36
44
  rotate -90 # degrees
37
45
 
38
46
  rotate :right
39
47
  rotate 90
40
- backward meter(1)
48
+ backward 1.meter
41
49
 
42
50
  # access to any methods in the Roomba class here!
43
51
  end
data/lib/rumba.rb CHANGED
@@ -50,7 +50,7 @@ class Rumba
50
50
  data = data.flatten.join
51
51
 
52
52
  @serial.write(data)
53
- sleep(0.1)
53
+ sleep(0.05)
54
54
  data=""
55
55
  while(data.length==0)
56
56
  data += @serial.read
@@ -35,7 +35,7 @@ class Rumba
35
35
  SONG = 140
36
36
  PLAY_SONG = 141
37
37
  SENSORS = 142
38
- QUERY_LIST = 149
38
+ QUERY_LIST = 149
39
39
  DRIVE_DIRECT = 145
40
40
 
41
41
  # Used for making the Roomba sing!
data/lib/rumba/dsl.rb CHANGED
@@ -8,61 +8,57 @@ class Rumba
8
8
 
9
9
  # Radius of an average Roomba, used for calculating rotation
10
10
  RADIUS = 165.1 # 6.5 inches
11
+
12
+ # move both wheels at the same speed in a certain direction!
13
+ # NOTE THAT THIS BLOCKS UNTIL COMPLETE
14
+ def straight_distance(distance, speed: DEFAULT_SPEED)
15
+ total = 0
16
+ straight(speed)
17
+ loop do
18
+ total += get_sensor(:distance).abs
19
+ break if total >= distance
20
+ end
21
+
22
+ halt
23
+ end
11
24
 
12
25
  # distance is in mm!
13
26
  def forward(distance, speed: DEFAULT_SPEED)
14
- duration = distance / speed
15
- straight(speed)
16
- sleep(duration)
17
- halt
27
+ straight_distance(distance, speed: speed)
18
28
  end
19
29
 
20
30
  # distance is in mm!
21
31
  def backward(distance, speed: DEFAULT_SPEED)
22
- duration = distance / speed
23
- straight(-speed)
24
- sleep(duration)
25
- halt
32
+ straight_distance(distance, speed: -speed)
26
33
  end
27
34
 
28
35
  # Direction can either be a Fixnum for number of degrees,
29
36
  # or a symbol for the direction (:left, :right)
30
37
  def rotate(direction, speed: DEFAULT_SPEED)
31
38
  # handle symbols...
39
+ # note that counter-clockwise is positive
32
40
  case direction
33
41
  when :left
34
- direction = -90
35
- when :right
36
42
  direction = 90
43
+ when :right
44
+ direction = -90
37
45
  end
38
46
 
39
- circumfrence = 2 * Math::PI * RADIUS
47
+ direction > 0 ? spin_right(speed) : spin_left(speed)
40
48
 
41
- # based on the angle, this is how far we need to turn
42
- distance = ((circumfrence / 360) * direction).abs
49
+ total = 0
50
+ goal = direction.abs / 2
51
+ loop do
52
+ raw_angle = get_sensor(:angle)
43
53
 
44
- direction < 0 ? spin_left(speed) : spin_right(speed)
45
- duration = (distance / speed).abs
46
- sleep(duration)
47
- halt
48
- end
49
-
50
- # MEASUREMENT HELPERS
51
- # TODO: break these out into separate helpers file?
52
- def inches(num)
53
- 25.4 * num
54
- end
55
- alias_method :inch, :inches
56
-
57
- def feet(num)
58
- inches(num) * 12
59
- end
60
- alias_method :foot, :feet
54
+ # taken from the official docs to convert output to degrees...
55
+ degrees = (360 * raw_angle)/(258 * Math::PI)
56
+ total += degrees.abs
57
+ break if total >= goal
58
+ end
61
59
 
62
- def meters(num)
63
- num * 1000
60
+ halt
64
61
  end
65
- alias_method :meter, :meters
66
62
 
67
63
  # eh, why not?
68
64
  alias_method :forwards, :forward
@@ -70,3 +66,22 @@ class Rumba
70
66
  alias_method :turn, :rotate
71
67
  end
72
68
  end
69
+
70
+ # MEASUREMENT HELPERS
71
+ class Fixnum
72
+ def inches
73
+ 25.4 * self
74
+ end
75
+ alias_method :inch, :inches
76
+
77
+ def feet
78
+ self.inches * 12
79
+ end
80
+ alias_method :foot, :feet
81
+
82
+ def meters
83
+ self * 1000
84
+ end
85
+ alias_method :meter, :meters
86
+ end
87
+
data/lib/rumba/sensors.rb CHANGED
@@ -4,7 +4,7 @@ class Rumba
4
4
  module Sensor
5
5
  class Boolean
6
6
  def self.convert(v)
7
- v == 1 ? true : false
7
+ v == 1
8
8
  end
9
9
  end
10
10
 
@@ -45,8 +45,8 @@ class Rumba
45
45
  class ChargingSourceAvailable
46
46
  def self.convert(v)
47
47
  h = {}
48
- h[:internal_charger] = v & 0b1 > 0 ? true : false
49
- h[:home_base] = v & 0b10 > 0 ? true : false
48
+ h[:internal_charger] = v & 0b1 > 0
49
+ h[:home_base] = v & 0b10 > 0
50
50
  h
51
51
  end
52
52
  end
@@ -54,12 +54,12 @@ class Rumba
54
54
  class LightBumper
55
55
  def self.convert(v)
56
56
  h = {}
57
- h[:light_bumper_left] = v & 0b1 > 0 ? true : false
58
- h[:light_bumper_front_left] = v & 0b10 > 0 ? true : false
59
- h[:light_bumper_center_left] = v & 0b100 > 0 ? true : false
60
- h[:light_bumper_center_right] = v & 0b1000 > 0 ? true : false
61
- h[:light_bumper_front_right] = v & 0b10000 > 0 ? true : false
62
- h[:light_bumper_right] = v & 0b100000 > 0 ? true : false
57
+ h[:light_bumper_left] = v & 0b1 > 0
58
+ h[:light_bumper_front_left] = v & 0b10 > 0
59
+ h[:light_bumper_center_left] = v & 0b100 > 0
60
+ h[:light_bumper_center_right] = v & 0b1000 > 0
61
+ h[:light_bumper_front_right] = v & 0b10000 > 0
62
+ h[:light_bumper_right] = v & 0b100000 > 0
63
63
  h
64
64
  end
65
65
  end
@@ -67,10 +67,10 @@ class Rumba
67
67
  class WheelOvercurrents
68
68
  def self.convert(v)
69
69
  h = {}
70
- h[:side_brush] = v & 0b1 > 0 ? true : false
71
- h[:main_brush] = v & 0b100 > 0 ? true : false
72
- h[:right_wheel] = v & 0b1000 > 0 ? true : false
73
- h[:left_wheel] = v & 0b10000 > 0 ? true : false
70
+ h[:side_brush] = v & 0b1 > 0
71
+ h[:main_brush] = v & 0b100 > 0
72
+ h[:right_wheel] = v & 0b1000 > 0
73
+ h[:left_wheel] = v & 0b10000 > 0
74
74
  h
75
75
  end
76
76
  end
@@ -78,10 +78,10 @@ class Rumba
78
78
  class BumpsAndWheelDrops
79
79
  def self.convert(v)
80
80
  h = {}
81
- h[:bump_right] = v & 0b1 > 0 ? true : false
82
- h[:bump_left] = v & 0b10 > 0 ? true : false
83
- h[:wheel_drop_right] = v & 0b100 > 0 ? true : false
84
- h[:wheel_drop_left] = v & 0b1000 > 0 ? true : false
81
+ h[:bump_right] = v & 0b1 > 0
82
+ h[:bump_left] = v & 0b10 > 0
83
+ h[:wheel_drop_right] = v & 0b100 > 0
84
+ h[:wheel_drop_left] = v & 0b1000 > 0
85
85
  h
86
86
  end
87
87
 
@@ -282,15 +282,20 @@ class Rumba
282
282
  # Get sensors by list
283
283
  # Array entry can be packet ID or symbol
284
284
  def get_sensors_list(list)
285
- ids_list=(list.map do |l|
285
+ ids_list = list.map { |l|
286
286
  if l.class == Symbol
287
287
  SENSORS_PACKETS_SYMBOL.find_index(l)
288
288
  else
289
289
  l
290
290
  end
291
- end)
291
+ }
292
292
 
293
- sensors_bytes_to_packets(write_chars_with_read([QUERY_LIST,ids_list.length]+ids_list),ids_list)
293
+ sensors_bytes_to_packets(write_chars_with_read([Constants::QUERY_LIST,ids_list.length]+ids_list),ids_list)
294
+ end
295
+
296
+ # convenience method for grabbing a single sensor
297
+ def get_sensor(sensor)
298
+ get_sensors_list([sensor])[sensor]
294
299
  end
295
300
  end
296
301
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Wood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-27 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: serialport