Class: Artoo::Drivers::Roomba

Inherits:
Driver
  • Object
show all
Defined in:
lib/artoo/drivers/roomba.rb

Overview

The Roomba driver behaviors

Defined Under Namespace

Modules: Direction, Mode, Note, Song, Speed

Constant Summary collapse

COMMANDS =
[:start, :safe_mode, :full_mode, :forward, :stop, :fast_forward,
:backwards, :nudge_left, :nudge_right, :turn_left, :turn_right,
:turn_around, :drive, :play, :song, :beep].freeze

Instance Method Summary collapse

Instance Method Details

#backwards(seconds) ⇒ Object

Move backward

Parameters:

  • seconds (Integer)


95
96
97
98
# File 'lib/artoo/drivers/roomba.rb', line 95

def backwards(seconds)
  drive(Speed::NEG, Direction::STRAIGHT, seconds)
  stop if seconds > 0
end

#beepObject

Beeps with a G note



174
175
176
# File 'lib/artoo/drivers/roomba.rb', line 174

def beep
  play_song([Note::G, Note::WHOLE])
end

#drive(v, r, s = 0) ⇒ Object

Drive

Parameters:

  • v (Integer)

    speed

  • r (Integer)

    direction

  • s (Integer) (defaults to: 0)

    seconds (waiting time)

See Also:



135
136
137
138
139
140
# File 'lib/artoo/drivers/roomba.rb', line 135

def drive(v, r, s = 0)
  vH,vL = split_bytes(v)
  rH,rL = split_bytes(r)
  send_bytes([137, vH, vL, rH, rL])
  sleep(s) if s > 0
end

#fast_forward(seconds) ⇒ Object

Move forward with fast speed

Parameters:

  • seconds (Integer)


88
89
90
91
# File 'lib/artoo/drivers/roomba.rb', line 88

def fast_forward(seconds)
  drive(Speed::MAX, Direction::STRAIGHT, seconds)
  stop if seconds > 0
end

#forward(seconds, velocity = Speed::SLOW) ⇒ Object

Move forward

Parameters:

  • seconds (Integer)
  • velocity (Constant) (defaults to: Speed::SLOW)

See Also:



76
77
78
79
# File 'lib/artoo/drivers/roomba.rb', line 76

def forward(seconds, velocity = Speed::SLOW)
  drive(velocity, Direction::STRAIGHT, seconds)
  stop if seconds > 0
end

#full_modeObject

Sends full mode



66
67
68
69
70
# File 'lib/artoo/drivers/roomba.rb', line 66

def full_mode
  start
  send_bytes(Mode::FULL)
  sleep 0.1
end

#nudge_leftObject

Nudge left



101
102
103
# File 'lib/artoo/drivers/roomba.rb', line 101

def nudge_left
  turn_left(0.25)
end

#nudge_rightObject

Nudge right



120
121
122
# File 'lib/artoo/drivers/roomba.rb', line 120

def nudge_right
  turn_right(0.25)
end

#play(song_number = 0) ⇒ Object

Play song

Parameters:

  • song_number (Integer) (defaults to: 0)


150
151
152
# File 'lib/artoo/drivers/roomba.rb', line 150

def play(song_number = 0)
  send_bytes([Song::PLAY, song_number])
end

#play_song(notes, song_number = 0) ⇒ Object

Play song

Parameters:

  • notes (Collection)
  • song_number (Integer) (defaults to: 0)

See Also:

  • Notes


168
169
170
171
# File 'lib/artoo/drivers/roomba.rb', line 168

def play_song(notes, song_number = 0)
  song(notes, song_number)
  play(song_number)
end

#safe_modeObject

Sends safe mode



59
60
61
62
63
# File 'lib/artoo/drivers/roomba.rb', line 59

def safe_mode
  start
  send_bytes(Mode::SAFE)
  sleep 0.1
end

#song(notes, song_number = 0) ⇒ Object

Save song

Parameters:

  • notes (Collection)
  • song_number (Integer) (defaults to: 0)

See Also:

  • Notes


158
159
160
161
162
# File 'lib/artoo/drivers/roomba.rb', line 158

def song(notes, song_number = 0)
  note_group = notes.flatten.compact
  l = note_group.length / 2
  send_bytes([Song::SONG, song_number, l] + note_group)
end

#split_bytes(num) ⇒ Object

Split bytes (hex)

Parameters:

  • num (Integer)


144
145
146
# File 'lib/artoo/drivers/roomba.rb', line 144

def split_bytes(num)
  [num >> 8, num & 255]
end

#startObject

Sends start mode



53
54
55
56
# File 'lib/artoo/drivers/roomba.rb', line 53

def start
  send_bytes(Mode::START)
  sleep 0.2
end

#stopObject

Stop movement



82
83
84
# File 'lib/artoo/drivers/roomba.rb', line 82

def stop
  drive(Speed::ZERO, Direction::STRAIGHT)
end

#turn_aroundObject

Turn around



125
126
127
# File 'lib/artoo/drivers/roomba.rb', line 125

def turn_around
  turn_left(1.6)
end

#turn_left(seconds = 1) ⇒ Object

Turn left

Parameters:

  • seconds (Integer) (defaults to: 1)


107
108
109
110
# File 'lib/artoo/drivers/roomba.rb', line 107

def turn_left(seconds = 1)
  drive(Speed::SLOW, Direction::COUNTERCLOCKWISE, seconds)
  stop if seconds > 0
end

#turn_right(seconds = 1) ⇒ Object

Turn right

Parameters:

  • seconds (Integer) (defaults to: 1)


114
115
116
117
# File 'lib/artoo/drivers/roomba.rb', line 114

def turn_right(seconds = 1)
  drive(Speed::SLOW, Direction::CLOCKWISE, seconds)
  stop if seconds > 0
end