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).
- MacOS Big Sur elevates the most advanced desktop operating system in the world to a new level of power and beauty. Experience Mac to the fullest with a refined new design. Enjoy the biggest Safari update ever. Discover new features for Maps and Messages. And get even more transparency around your privacy.
- App for OS X 10.5.8 only Explore Thousands of Mac Games From hard-core shooters to amazingly fun casual games, thousands of quality Mac games are available for purchase.
- Mac OS X only offers a few virtualization apps, but the competition is strong. We've chosen Parallels as our favorite thanks to its excellent performance, ease of use, and fantastic Mac.
- Hey guys, So apparently, this is an actual feature and not a bug. Its been. me off as well as I use 3 monitors, but I read on a different forum how to actually make it appear on a different monitor and all you have to do is actually move your mouse to the center of the screen, and move it all the way down as if you're trying to drive into the bottom of the screen. You'll see it appears on.
Mac OS X Mountain Lion Overview. OS X is an operating system designed and marketed by Apple Inc. For its Mac series of computers. The OS X Mountain Lion is the ninth version of the operating system, replacing its predecessor; the Mac OS X Lion. The change in the name signifies an update, which is now a regular feature of Apple’s software policy. Download the iRobot HOME App Use the iRobot HOME App to set up, configure and register your Wi-Fi ® connected Roomba ® 690, 890, eSeries, 900, iSeries vacuuming robots and Braava jet robots. The iRobot HOME App is compatible with: Apple devices running iOS11 or higher.
/downloading-the-harmonic-scanner-on-metatrader-4-for-mac.html.
(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.
Mac Os X Roomba Apps
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.
Converting Tilt Data to Roomba Commands
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()
“.
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: Dj mixvibes 3dex le software.
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
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.