Roomba Rampage (Olivier Proulx) Mac OS

Posted on  by

Roomba Tilt Control with MacBook & Perl

This project shows you how to use the built-in tilt sensors of the MacBook to control a Roomba. Since Perl hasn’t been used to program a Roomba yet, it seemed like a fun task to show that it could be done (and pretty easily too).

Roomba Rampage (Olivier Proulx) Mac OS

Share real-time maps of iRobot Roomba 960, 965, 966 and 980 missions. Spot clean from the app. Maintain Your Robots With Official Parts & Accessories for Roomba, Braava, Mirra and Looj among others. Home Shop Parts & Accessories. Parts & Accessories. Roomba® Accessories s Series i Series 900 Series e Series 800 Series 700 Series 600 Series Professional & 500 Series 400 & Discovery Series Original Series. If Roomba is picked up and moved during a cleaning job, it will not be able to find the Home Base when the “DOCK” button is pressed, unless it is placed facing the Home Base within 6 ft (1.8 m) of the Home Base. To resolve this, unplug the line cord from the Home Base and then plug it back in to. We have 19 iRobot Roomba manuals available for free PDF download: Bruksanvisning, Customer Support Booklet, Owner's Manual, Specification, Maintenance Manual, Supplementary Manual, Quick Start Manual. IRobot Roomba Owner's Manual (36 pages) Roomba 500 Series. IRobot Roomba 690 Robot Vacuum-Wi-Fi Connectivity, Works with Alexa, Good for Pet Hair, Carpets, Hard Floors, Self-Charging 4.3 out of 5 stars 10,457 $447.95 $ 447.


(revver link)

Download it

You only need two bits of software not already on your Mac:
– AMSTracker
– roomba-tilt.pl
Download them both, put them both in your PATH and try it out. But first you might want to read on to see how it works.

Measuring Tilt

Apple MacBooks have integrated 3-axis accelerometer called the Sudden Motion Sensor (SMS, previously Apple Motion Sensor, AMS). Normally this is used to detect when the laptop is dropped so it can shut down the hard drive to prevent damage. But the SMS can be accessed programmatically and used to measure tilt.

Amit Singh has a wonderful book out called Mac OS X Internals where he goes into great detail about the SMS. He’s also created several programs that use the accelerometer data. The one used in this project is the command-line program AMSTracker.

When AMSTracker is run, it outputs three columns of numbers, one for each axis of accelerometer data. AMSTracker can also be run in a “scrolling” mode where it outputs new data periodically. This is the mode used in this project. The output then looks like:

It’s easy for Perl to parse such stuff. The regex to get those three values is “/(-?d+)s+(-?d+)s+(-?d+)/“.

Controlling the Roomba from Perl

On Mac OS X, like other Unixes, serial ports appear as ordinary files. And just like any other files, they can be read from and written to. Perl’s whole reason for being is reading and writing files so it’ll be a snap for it.

But wait, how do we set the serial parameters like baud rate and so on? Files don’t have these kinds of attributes. That’s where the program “stty” comes in. Stty sets the various options on a “terminal device” (aka serial port). Figuring out the magic stty incantation needed to let the serial port work with the Roomba is laborious so will just be presented here:

This command is issued by the “roomba_init()” function in the Perl script before it opens the “file” that is the serial port.

Once the port/file is open, functions like “roomba_drive()” and “roomba_stop()“in the script just print to the open file descriptor. If you wanted to read the sensors, you would read from the file descriptor.

Roomba rampage (olivier proulx) mac os update

Converting Tilt Data to Roomba Commands

Roomba Rampage (olivier Proulx) Mac Os Download

The tilt data is essentially two numbers that vary between -127 and +127. One number corresponds to back-n-forth tilt motion of the laptop while the other corresponds to left-right tilt. A simple linear function can convert between the tilt data space and the velocity/radius space the Roomba expects. This is the ‘proportional’ mode of operation, where the degree of tilt affects the speed or angle of the Roomba.

The code implements two special cases of proportional control to make it easier to use:
– if laptop is flat (in the deadzone), send “roomba_stop()
– if only tilted left-right, send “roomba_spinleft()” or “roomba_spinright()“.

Roomba Rampage (olivier Proulx) Mac Os Catalina

Another mode called “fourway” or “d-pad” mode turns the tilt data into a four-state switch: forward, backward, spinleft, spinright, sort of like an old Nintendo D-pad controller. It does this by defining a “deadzone” in the center and only if you tilt in one direct enough to escape this zone does it count as a valid motion. In this mode, controlling the Roomba is easier but you can’t get as precise of positioning.

Usage

To use roomba-tilt.pl, the only required argument is the path to the serial port the Roomba is connected to. This serial can either be a RS-232 serial tether or a Bluetooth adapter as shown in the video. The full usage is:

Running it in verbose mode is interesting because you can see the data sent from AMSTracker and the drive commands sent to the Roomba.

Issues and Improvements

Roomba Rampage (olivier Proulx) Mac Os Update

As you play with AMSTracker or roomba-tilt.pl, you’ll see how the tilt data will flop from +/-127 to -/+127. In roomba-tilt.pl, this causes the Roomba to go from making hard left to a hard right (or vice versa). The code currently doesn’t attempt to smooth the data to eliminate these jumps. You could write a filter that does a little analysis on the data and if it does something unexpected (like the jump), it calms the data down before sending it to the Roomba.

Roomba Rampage (olivier Proulx) Mac Os Download

22 comments