rororoomba - ruby on rails on roomba railsconf 2012
DESCRIPTION
Charles Abbott's presentation slides about hacking Roombas using Ruby and a Rails app over serial cable, bluetooth, arduino, and a straight serial to wifi gateway (wifly). Given at RailsConf 2012, video available on Confreaks.com.TRANSCRIPT
![Page 1: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/1.jpg)
RoRoRoomba
Roomba on Ruby on Rails
Friday, April 27, 2012
![Page 2: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/2.jpg)
Thanks!
• Nancy Dussault-Smith
• Joshua Lifton
• and iRobot for the Roombas!
Friday, April 27, 2012
![Page 3: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/3.jpg)
Thanks!
Friday, April 27, 2012
![Page 4: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/4.jpg)
Introductions
Friday, April 27, 2012
![Page 5: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/5.jpg)
My Roomba
Friday, April 27, 2012
![Page 6: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/6.jpg)
• Charles Abbott
•
• Life in Japan www.forthecode.org
• “The greatest obstacle...
konnichiwa
Friday, April 27, 2012
![Page 7: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/7.jpg)
“The greatest obstacle to discovery
“Greatest obstacle...
Friday, April 27, 2012
![Page 8: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/8.jpg)
“The greatest obstacle to discovery is not ignorance
“Greatest obstacle...
Friday, April 27, 2012
![Page 9: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/9.jpg)
“The greatest obstacle to discovery is not ignorance, but
“Greatest obstacle...
Friday, April 27, 2012
![Page 10: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/10.jpg)
“The greatest obstacle to discovery is not ignorance, but the illusion of knowledge” - Daniel J. Boorstin
“Greatest obstacle...
Friday, April 27, 2012
![Page 11: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/11.jpg)
“Hack Me”
Friday, April 27, 2012
![Page 12: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/12.jpg)
3 R’s
tokyorails.org
Friday, April 27, 2012
![Page 13: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/13.jpg)
Ruby
Friday, April 27, 2012
![Page 14: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/14.jpg)
Rails
Friday, April 27, 2012
![Page 15: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/15.jpg)
Roomba
Friday, April 27, 2012
![Page 16: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/16.jpg)
Roomba on Ruby on Rails
• SerialPort + Ruby controls Roomba
• Rails site that routes remote requests
• ???
• Profit!
Friday, April 27, 2012
![Page 17: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/17.jpg)
Resources• http://hackingroomba.com/ (Open
source Java package)
• http://www.dprg.org/projects/2009-07a/
• http://roombahacking.com/roombahacks/roombacmd/
• http://www.arduino.cc/
Friday, April 27, 2012
![Page 18: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/18.jpg)
Getting Started
Friday, April 27, 2012
![Page 19: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/19.jpg)
Getting Supplies
Friday, April 27, 2012
![Page 20: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/20.jpg)
and then...
Friday, April 27, 2012
![Page 21: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/21.jpg)
my firstborn
Friday, April 27, 2012
![Page 22: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/22.jpg)
Back on Track
Friday, April 27, 2012
![Page 23: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/23.jpg)
Arduino LayoutRX = receiveTX = transmit
Friday, April 27, 2012
![Page 24: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/24.jpg)
iRobot OI or SCI?
Friday, April 27, 2012
![Page 25: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/25.jpg)
ROI? API?
Friday, April 27, 2012
![Page 26: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/26.jpg)
Wired Up
Friday, April 27, 2012
![Page 27: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/27.jpg)
Roomba + ArduinoWhat’s next?
Friday, April 27, 2012
![Page 28: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/28.jpg)
Arduino Sandwich
Friday, April 27, 2012
![Page 29: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/29.jpg)
Arduino Sketches
void setup(){}
void loop(){}
Friday, April 27, 2012
![Page 30: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/30.jpg)
RAD?
Friday, April 27, 2012
![Page 31: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/31.jpg)
Example Roomba Sketch
Friday, April 27, 2012
![Page 32: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/32.jpg)
Debugging Arduino
Friday, April 27, 2012
![Page 33: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/33.jpg)
Debugging Pains
[137] [255] [56] [1] [244]
Disconnect, Connect, Disconnect
Headless
Documentation woes
Friday, April 27, 2012
![Page 34: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/34.jpg)
Past First Base
Friday, April 27, 2012
![Page 35: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/35.jpg)
Arduino
Friday, April 27, 2012
![Page 36: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/36.jpg)
Arduino Wireless XBEE
Friday, April 27, 2012
![Page 37: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/37.jpg)
Bluetooth
Friday, April 27, 2012
![Page 38: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/38.jpg)
USB to Serial
Friday, April 27, 2012
![Page 39: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/39.jpg)
Wifi
Friday, April 27, 2012
![Page 40: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/40.jpg)
Where to Start?
Friday, April 27, 2012
![Page 41: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/41.jpg)
Simple Serial
Friday, April 27, 2012
![Page 42: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/42.jpg)
Writing Code
def initialize(port, baud=115200)
@serial = SerialPort.new(port, baud, 8, 1, SerialPort::NONE)
sleep 0.2 api_setup_start sleep 0.1 api_setup_control
end
Friday, April 27, 2012
![Page 43: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/43.jpg)
Writing Opcodes # Must call this first to start the serial command interface def api_setup_start write(128) end
# Enables user control of Roomba, puts SCI in safe mode def api_setup_control write(130) end
# Starts a normal cleaning cycle. def api_clean write(135) end
Friday, April 27, 2012
![Page 44: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/44.jpg)
Modeling the ROI # api_drive(255, 0, 0, 0) //go backward # api_drive(0, 255, 0, 0) //go forward # api_drive(0, 0, 0, 0) // stop def api_drive(velocity_high, velocity_low, radius_high, radius_low) write(137, velocity_high, velocity_low, radius_high, radius_low) end
Friday, April 27, 2012
![Page 45: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/45.jpg)
Complex Write and Read def api_querylist(*bytes) write(149, bytes.length, *bytes) wait_for_rx read end
Friday, April 27, 2012
![Page 46: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/46.jpg)
The Bottom of the Barrel
def write(*args) args.each do |a| @serial.write a.chr end end
Friday, April 27, 2012
![Page 47: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/47.jpg)
The Bottom of the Barrel
def read(timeout=50) @serial.read_timeout= timeout bytes = [] until (x = @serial.getbyte).nil? bytes.push(x) end bytes end
Friday, April 27, 2012
![Page 48: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/48.jpg)
Pulling it Together
ls /dev/tty.*find your serial device
then jump into rails console
roo = Roomba.new(“/dev/tty.usbserial-xxx”)=> #<Roomba:0x00000103e5bec0 @serial=#<SerialPort:fd 9>>
Friday, April 27, 2012
![Page 49: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/49.jpg)
“Hello Roomba” Demo
“Don’t Assume It--Prove It”- Tip, The Pragmatic Programmer
Friday, April 27, 2012
![Page 50: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/50.jpg)
Forgetting to say “when”Pitfall #1
Friday, April 27, 2012
![Page 51: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/51.jpg)
Status Reports
Friday, April 27, 2012
![Page 52: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/52.jpg)
Flash Your Signdown the rabbit hole
Friday, April 27, 2012
![Page 53: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/53.jpg)
Binary and Signed Integersdown the rabbit hole
Friday, April 27, 2012
![Page 54: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/54.jpg)
Dealing With Binarydown the rabbit hole
def signed_integer(bytes) case bytes.size when 1 return (bytes[0] & ~(1 << 7)) - (bytes[0] & (1 << 7)) when 2 sixteenbit = bytes[0] << 8 | bytes[1] return (sixteenbit & ~(1 << 15)) - (sixteenbit & (1 << 15)) end end
learn more: http://en.wikipedia.org/wiki/Two%27s_complement#Calculating_two.27s_complement
Friday, April 27, 2012
![Page 55: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/55.jpg)
A Hex Digressiondown the rabbit hole
Friday, April 27, 2012
![Page 56: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/56.jpg)
Better Abstraction
Friday, April 27, 2012
![Page 57: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/57.jpg)
Distance & Time
# distance is in mm # velocity is in mm/s (-500 to 500) def move(distance, degree=0, velocity=200)
distance = distance.to_i.abs #distance can never be negative
if distance == 0 #not moving, just spinning on axis # time = wheelbase * PI / 360degrees * degrees / velocity ABS time_in_seconds = calculate_spin_time(velocity, degree) else time_in_seconds = (distance.to_f / velocity.to_f).abs end
Friday, April 27, 2012
![Page 58: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/58.jpg)
High Byte, Low Byte # distance is in mm # velocity is in mm/s (-500 to 500) def move(distance, degree=0, velocity=200) distance = distance.to_i.abs #distance can never be negative if distance == 0 #not moving, just spinning on axis # time = wheelbase * PI / 360degrees * degrees / velocity ABS # wheelbase might be different for different roombas time_in_seconds = calculate_spin_time(velocity, degree) # now that we know how long to spin, set degree to 1 so it will spin roomba instead of put it on an arc degree = 1 else time_in_seconds = (distance.to_f / velocity.to_f).abs end
set_velocity(velocity) set_degree(degree)
Friday, April 27, 2012
![Page 59: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/59.jpg)
Move!
api_drive(@velocity_high, @velocity_low, @radius_high, @radius_low)
start_moving = Time.now
until (start_moving - Time.now).abs >= time_in_seconds sensors = get_readings(:bumps_and_drops, :wall) break if sensors[:bumps_and_drops][:formatted].to_i(2) > 0 end
api_drive(0,0,0,0) sensors
Friday, April 27, 2012
![Page 60: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/60.jpg)
‘Move’ Demo
Friday, April 27, 2012
![Page 61: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/61.jpg)
L...a...te..n....c..yPitfall #2
...
no!
no!
yes!
no!...Friday, April 27, 2012
![Page 62: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/62.jpg)
Cut out the Middle Men
*Arduino is still awesome, and I encourage you to try it.
Friday, April 27, 2012
![Page 63: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/63.jpg)
What Freedom Looks Like
Friday, April 27, 2012
![Page 64: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/64.jpg)
Logic Level Converter
http://www.sparkfun.comhttp://www.sparkfun.com
Friday, April 27, 2012
![Page 65: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/65.jpg)
Prototyping!
Friday, April 27, 2012
![Page 66: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/66.jpg)
SerialPort || TCPSocket
All we need is an IP address and a Port!
Friday, April 27, 2012
![Page 67: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/67.jpg)
Connected and then...
............................never ending silence..........
Friday, April 27, 2012
![Page 68: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/68.jpg)
UART
UniversalAsynchronousReceiver (RX)
Transmitter (TX)
Friday, April 27, 2012
![Page 69: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/69.jpg)
UART an Angel
Friday, April 27, 2012
![Page 70: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/70.jpg)
All you get is #$@#!Pitfall #3
.4....U.
......V.
.-....L.
.7....T.
./....S.
.0....O.
.4....V.
.-....S.
.0....Y.
.*....V.
.-....U.
......R.
.1....W.
.,....R.
.1....V.
.-....S.
.0....N.
.5....[.
.(....M.
.6....R.
.1....Q.
.2....V.
.-....P.
.3....Y.
.*....S.
.0....U.
......L.
.7....T.
./....R.
.1......
......+.
.`....N.
.=......
........
......H.
.B......
........
........
......e.
.!......
........
.l....,.
.W....V.
.-....R.
.1....M.
.6....B.
.A....V.
.-....V.
.-....N.
.5....H.
.;....T.
./....L.
.7....M.
.6....H.
.;....K.
.8....S.
.0....U.
......O.
.4....U.
......Q.
.2....P.
.3....R.
.1....W.
.,....U.
......I.
.:....T.
./....L.
.7....M.
.6....Q.
.2....L.
.7....U.
......P.
.3....O.
.4....W.
.,....L.
.7....U.
......V.
.-....Z.
.)....Q.
.2....V.
.-....^.
.%....Q.
.2....O.
.4....M.
.6....Q.
.2....T.
./....M.
.6....X.
.+....N.
.5....N.
.5....U.
......R.
.1....`.
.#....Q.
.2....U.
......R.
.1....J.
.9....P.
.3....O.
.4....[.
.(....R.
.1....X.
.+....Y.
.*....S.
.0....T.
./....Y.
.*....Y.
.*....\.
.'....T.
./....W.
.,....U.
......Q.
.2....L.
.7....T.
./....[.
.(....V.
.-....N.
.5....Q.
.2....U.
......N.
.5....V.
.-....Q.
.2....T.
./....O.
.4....U.
......Q.
.2....O.
.4....W.
.,....N.
.5....W.
.,....S.
.0....X.
.+....S.
.0....Q.
.2....T.
./....L.
.7....T.
./....V.
.-....N.
.5....S.
.0....O.
.4....N.
.5....N.
.5....P.
.3....O.
Friday, April 27, 2012
![Page 71: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/71.jpg)
All you get is #$@#!Pitfall #3
Solution #1: RTFM
Friday, April 27, 2012
![Page 72: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/72.jpg)
All you get is #$@#!Pitfall #3
Solution #2: Factory Defaults
Friday, April 27, 2012
![Page 73: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/73.jpg)
All you get is #$@#!Pitfall #3
Solution #3: RTFM, again...
Friday, April 27, 2012
![Page 74: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/74.jpg)
All you get is #$@#!Pitfall #3
Solution #3: RTFM, again...
Friday, April 27, 2012
![Page 75: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/75.jpg)
Wifly ConfigurationP195:~ charles$ telnet 169.254.1.1 2000Trying 169.254.1.1...Connected to 169.254.1.1.Escape character is '^]'.*HELLO*$$$CMDset comm close 0AOK<2.23>set comm open 0<2.23>set sys printlvl 0<2.23> saveStoring in config<2.23> reboot
Friday, April 27, 2012
![Page 76: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/76.jpg)
Pretty Prototype...
Friday, April 27, 2012
![Page 77: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/77.jpg)
Roomba Wifi
Friday, April 27, 2012
![Page 78: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/78.jpg)
Roomba Wifi
Friday, April 27, 2012
![Page 79: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/79.jpg)
3 Final Hurdles
nope nope huh?
Friday, April 27, 2012
![Page 80: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/80.jpg)
Wifly Option (a)Hurdle 1
Friday, April 27, 2012
![Page 81: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/81.jpg)
“Hold, hold,...Hurdle 1
Friday, April 27, 2012
![Page 82: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/82.jpg)
Wifly Option (b)Hurdle 1
Friday, April 27, 2012
![Page 83: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/83.jpg)
The Stateless Web Tax
def initialize(port, baud=115200) sleep 0.2 api_setup_start sleep 0.1 api_setup_control
Hurdle 2
Friday, April 27, 2012
![Page 84: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/84.jpg)
Device Busy
OK Errno::EBUSY: Resource busy
CONCURRENTREQUESTS
Hurdle 3
Friday, April 27, 2012
![Page 85: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/85.jpg)
Socket Server
Roomba Socket Serverstartserver = TCPServer.open(port) # Socket to listen onroomba = Roomba.new(location)
Thread.abort_on_exception = trueloop do puts "Roomba Socket Server Running! (15 second timeout)" Thread.start(server.accept) do |client|
# => Read the incoming TCP Socket request # => Pass the command to the roomba client.close # Disconnect from the client endend
Pseudocode
Hurdle 2 & 3
Friday, April 27, 2012
![Page 86: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/86.jpg)
Extended Demo
“Coding Ain’t Done ‘Til All The Tests Run”- Tip 63, The Pragmatic Programmer
Friday, April 27, 2012
![Page 87: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/87.jpg)
Looking Forward
Friday, April 27, 2012
![Page 88: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/88.jpg)
Testing Drones
• How do you run software tests on something in the physical world?
Friday, April 27, 2012
![Page 89: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/89.jpg)
Roomba Simulator
Friday, April 27, 2012
![Page 90: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/90.jpg)
Test the Simulation
Friday, April 27, 2012
![Page 91: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/91.jpg)
Compare with Live Test
Bring it!
Friday, April 27, 2012
![Page 92: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/92.jpg)
Simulator Scenarios
Friday, April 27, 2012
![Page 93: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/93.jpg)
Challenges
If i tape a marker on Roomba...Map out a room...
Friday, April 27, 2012
![Page 94: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/94.jpg)
Physical Computing?
Jeremiah Palecek http://nerdkore.com
Why you should care.
Friday, April 27, 2012
![Page 95: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/95.jpg)
By 2020
Ericsson White Paper 284 23-3149 Uen | February 2011
Friday, April 27, 2012
![Page 96: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/96.jpg)
Already
http://techcrunch.com/2012/02/14/the-number-of-mobile-devices-will-exceed-worlds-population-by-2012-other-shocking-figures/
“By 2016, there will be 1.4 mobile devices per capita. That year, there will be over 10 billion mobile-connected devices, including machine-to-machine (M2M) modules.”
Friday, April 27, 2012
![Page 97: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/97.jpg)
People then Things
Ericsson White Paper 284 23-3149 Uen | February 2011
Friday, April 27, 2012
![Page 98: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/98.jpg)
People and Things
https://trandi.wordpress.com/2011/09/26/vfd-clock-connects-to-the-internet/
Friday, April 27, 2012
![Page 99: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/99.jpg)
People and Things
http://lifeboat.co.nz/the-finished-wireless-water-sensor/Friday, April 27, 2012
![Page 100: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/100.jpg)
Just Getting Started
Friday, April 27, 2012
![Page 101: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/101.jpg)
“A Pragmatic Philosophy”
Invest Regularly in Your Knowledge Portfolio
- Tip 8, The Pragmatic Programmer
“Simon Stevin!”
Friday, April 27, 2012
![Page 102: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/102.jpg)
An Eccentric
Friday, April 27, 2012
![Page 103: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/103.jpg)
Who is Simon Stevin?•waterway, spillways, sluices•navigation, steering•interest rate tables•The Art of Fortification •Copernican system
•treatise on perspective•musical tuning•civil unrest handbook•Trigonometry
•hydrostatic paradox•optics, geography, philosophy•and more...
Friday, April 27, 2012
![Page 104: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/104.jpg)
1585, De Thiende
“The Tenths”35pg
Friday, April 27, 2012
![Page 105: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/105.jpg)
Changes the World
“What seems a wonder, is not really a wonder.” - Simon Stevin
Friday, April 27, 2012
![Page 106: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/106.jpg)
Fork it!
github.com/tokyorails
Charles Abbottwww.forthecode.org
Friday, April 27, 2012
![Page 107: RoRoRoomba - Ruby on Rails on Roomba Railsconf 2012](https://reader033.vdocument.in/reader033/viewer/2022051314/54c827ee4a7959c0108b45e0/html5/thumbnails/107.jpg)
RoRoRoomba
Friday, April 27, 2012