Irobot Roomba Movement Panel

by iRobot

Control the iRobot Roomba and read sensor data from 500 series roombas

How to add the Irobot Roomba Movement Panel robot skill

  1. Load the most recent release of ARC (Get ARC).
  2. Press the Project tab from the top menu bar in ARC.
  3. Press Add Robot Skill from the button ribbon bar in ARC.
  4. Choose the Movement Panels category tab.
  5. Press the Irobot Roomba Movement Panel icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Irobot Roomba Movement Panel robot skill.

How to use the Irobot Roomba Movement Panel robot skill

Control the iRobot Roomba and read sensor data. This skill currently works with the 500 series robots and iRobot create. The baud rate and connection type will need to be configured in the settings menu.

This robot skill can connect to an iRobot by using either a USB adapter or a microcontroller acting as an EZB (Arduino, etc.). The connection type in the config menu will specify the way this skill communicates with the iRobot. Continue reading below...

Main Window User-inserted image

  1. Enable sensor streaming and statistics of received sensor data. This requires a bi-directional connection. See below for different connection types and reading sensor data.

  2. Movement directions to drive the robot, and a box to place the mouse cursor which enables using the keyboard arrow keys.

  3. The speed for the left and right wheels, which defaults to 0.

  4. Commands for initializing the SCI connection, enabling cleaning, stop cleaning, or powering off the robot

  5. Status and log data for successful initialization and errors.

Config Window User-inserted image

  1. Connection type. Changing this setting will enable the selected connection type configuration below (Software serial, PC COM port, H/W UART). There is more information below in this manual on connection types.

  2. Software Serial connection type. This type should only be used if there are no other supported options. This uses software serial on the EZB to emulate a transmitted serial signal. This is not 100% reliable and therefore should only be used if there are no other options. This is a one-way transmission, so sensor data cannot be read.

  3. PC COM Port connection type. Uses a PC COM/Serial port that is usually a USB<->TTL convertor or an official iRobot Roomba USB cable (See details below). This is a bi-directional transmission, so sensor data can be read.

  4. H/W UART on the EZB. Selecting this will use the HW UART if supported. This allows sensor data to be read because it is bi-directional.

  5. NMS (Navigation Messaging System).

a) Enabling the first option in this group will send the iRobot Roomba's current coordinates to the NMS as a Level #3 Group #2 positioning/pose sensor. There is more information about this further in this manual.

b) The second option in this group will Pause NMS navigation if any of the iRobot Roomba sensors are triggered. The sensors covered are: cliff, bumper, virtual wall, and wheel drop

Baud Rates Different models (i.e. create vs Roomba) use different baud rates. Find your Roomba's version and check it's SCI (Serial Command Interface) or OI (Open Interface) manual to see what baud rate it uses. We believe the Roomba uses baud rate 115200, and the create uses 57600. But, don't hold us to that :). We do notice that older Roomba's use 57600 baud - ensure you have selected the correct baud rate in the config settings. 500+ series Roombas use 115,200 baud. If you are unsure, try each baud rate.

Demo Video Here's a video of the nice proportional steering that this control provides the iRobot Roomba. This video has the Roomba set to follow Kate's orange socks.

Like all movement panels, only one can exist. In this case, this Movement Panel will connect to a Roomba by its SCI interface. This control allows for a variety of speeds also, so you can use the analog joystick to control speeds. Or use the speed control in the camera to track objects with nice smooth trajectories.

ARC allows multiple physical robot controllers to be connected at once. The Movement Controls only operate on the first board (Board 0) or PC serial port.

Reading Sensor Data You can read sensor data if the PC COM or HW UART ports are used for the connection. This also requires the TX and RX wires to be connected to the Roomba's SCI port. The data from the sensors and internal values are set as global variables. You can access everything from battery voltage to wheel encoder counts.

SCI Connection Types The connection types that can be used to connect the Roomba to ARC are:

  1. Software Serial (read-only)
  2. HW UART (read/write bi-directional two-way)
  3. USB COM TTL (read/write bi-directional two-way)

Roomba SCI Cable  The cable can have either TX & RX or just RX connected from the Roomba. However, do note that if only the RX pin is connected, the sensor data will not be read.

Roomba <-> USB <-> PC This cable will allow reading sensor data. iRobot has a low-cost USB cable that can connect directly to a PC. This is useful if the PC is located within the robot. You can get it from here:

Roomba <-> EZB <-> PC (two-way communication) This cable will allow reading sensor data. This requires a 7 pin Male Mini Din to connect to an EZB I/O Controller. Watch DJ's iRobot Roomba Live Hack to see how to make a cable. The meat of the video starts at 20:00 because the first bit is demonstrating the iRobot Roomba and talking about it. You can find the part numbers and design information for a cable on Synthiam's GitHub repo HERE

Roomba <-> EZB <-> PC (one-way communication) The image below demonstrates how to make a cable with RX only. Meaning, the sensor data will not be read by ARC. User-inserted image

Charging After SCI Connection When the iRobot Roomba is used with this robot skill, the robot will be put into a mode that will not accept charging. The only way to enable the robot to accept charging is to power off or reset using the two buttons on the control. Pressing either the Reset/Power Off or Power Down buttons will play an acknowledge song if successful. User-inserted image

NMS (Navigation Messaging System) Within the configuration, the menu has an option to enable the NMS (Navigation Messaging System). This will push calculated cartesian position/location (i.e. pose) coordinates into the NMS for use with mapping/navigation tools such as The Navigator. In order to obtain wheel encoder data from the iRobot, a two-way SCI cable is needed (i.e. RX and TX must be connected) and streaming must be enabled.

The iRobot uses wheel encoders (508.8 ticks per revolution) to keep track of the odometry. This robot skill will calculate cartesian coordinates from the wheel encoders and send those values into the NMS. The iRobot's memory will keep the wheel encoder count even when powered off. In order to use the NMS correctly, follow this procedure to clear the iRobot memory and reset the encoder counts.

Get The Navigator robot skill here.

  1. Visit the iRobot robot skill configuration screen and enable NMS. Also, ensure your connection type is either PC COM Port or H/W UART because those are the only two that allow two-way communication.

*Optionally, you may select the "Pause NMS navigation with sensor detection" checkbox. This will send a pause signal to the selected NMS Level #1 navigator if any of the sensors are triggered. User-inserted image

  1. Connect to the iRobot Roomba and enable Sensor Streaming. Verify packets are being received by the packet count increasing in the Sensor Data status display. This step ensures the cable configuration is correctly receiving sensor data from the iRobot Roomba. If the packet count is increasing, the cable configuration is correct. User-inserted image

  2. Now we will press the Reset/Power Off button and the robot will play a little tune acknowledging that it has rebooted and reset internal settings. The Sensor Streamer checkbox will disable as well. This step will instruct the Roomba to reset the wheel encoder values which sets the position to 0 cm x 0 cm (home). User-inserted image

  3. Position your iRobot Roomba in the room where 0,0 (home) will be. Good idea to mark the area as well so saved maps can be re-used. User-inserted image

  4. Press the CLEAN button once on the iRobot to power on. It should light up.  User-inserted image

  5. In the robot skill, press the INIT button and then enable Sensor Streaming. Again, verify packets are being received. The robot will play a little tune acknowledging that it has been initialized. User-inserted image

  6. If you have The Navigator robot skill added to your project, you will notice the robot will be at location 0,0 (home). User-inserted image

  7. You may now right-click in The Navigator and specify waypoints or drive the robot around and view the trajectory. Read The Navigator for instructions on using that robot skill, as it is not covered in this manual.

Accuracy of Wheel Encoders ... or lack of accuracy is a better title. Wheel encoders are not accurate for mapping but will present a general enough position for simple tasks. This is because there are many limitations to wheel encoder odometry, such as gear slop, slipping wheels and real-world velocities are not constant.

As quoted by Andrew Kramer's work based on Edwin Olson's 2004 paper...


The larger problem is that odometry is inherently inaccurate. Encoder ticks do not translate directly into distance traveled by the wheel because wheels slip, the wheels aren’t perfectly circular, the ground isn’t perfectly flat, encoder ticks might be missed, and the motor gearbox has a backlash that isn’t accounted for in our model. This means that the position calculated from odometry will gradually diverge from the true position. We could use other methods that might be more accurate, such as optical flow and IMUs. However, any sensor we might use suffers from some inherent random error, known as noise, and this error will accumulate over time.
Great Platform Base How about using an iRobot Roomba for your robot wheelbase? You can attach a camera and the EZ-B to a Roomba and turn it into a lean mean cleaning security machine! Combine a USB Joystick and the HTTP Remote Server Control... Voila! Remote control security cleaning robot. That's easy!

You can use an iRobot Roomba motherboard as an H-Bridge to drive your custom motors. This gives your robot the ability to self-charge. By positioning the IR sensors on your robot in the same fashion as the Roomba, your robot can easily dock with the Roomba's self-charging base.


Upgrade to ARC Pro

With ARC Pro, your robot is not just a machine; it's your creative partner in the journey of technological exploration.


Hi DJ, would it be possible to include Roombas sensor data as variables? Speed, distance traveled, bumpers, battery charge, etc? User-inserted image


Yes - the manual on this page explains that sensor data can be read if an RX is connected on the ezb. The ezb must support hardware rx

#4   — Edited

Hello, the data readings are included as variables a few updates ago (months ago from your question). Please read the description for this robot skill at the top of this page. I also had already answered the same question you had asked right above this latest question.


Thanks DJ, will try it as soon as i finish my mini pc build on top of the roomba.


If you’re using a mini pc - then you can actually connect the mini pc directly to the roomba without needing an ezb.

This roomba robot skill has an option to use the PC COM port. Look in the configuration screen to see the settings available


Yes, that is what im going to do, and i am using an "EZDuino" for other IOs.


@DJ, following your advice in another thread, I am taking a look to the Roomba Movement Panel to read the data. I can indeed see a lot of Roomba-related variables when I am connected, however I don't know how to "interpret" them or use them in an "informative" way.

For example, for charging status, i can see in the Variable Watcher:

$RoombaChargingState  Number  253 (and the value is changing constantly)

How can I use the variable to obtain the charging state (Not Charging, Full Charging, Charging Fault, etc.)?

I have the same difficulty with a lot of other variables and I cannot make the link with info available in the Roomba OI manual...

Sorry if the info is somewhere on the website. Thanks

#9   — Edited

Hi fredebec, strange number indeed. In the roomba manual we should have this values for the charging state: User-inserted image Does the value change when for example you charge the robot or not?


The variables for the roomba have been fixed in this latest update :)


Thank you DJ for taking the time!


Thanks @DJ ! I have tested some of them in my different scripts and everything works smoothly. So many variables to play with, now... :D


I know, right?! It's crazy! I was having a ton of fun today and last night with it. The new plugin works really well!

#14   — Edited

Hey DJ, I returned from my trip to my cabin to find the hack night video AND coincidentally my next door neighbor brought over his dead (battery) Roomba 655 vacuum for me to keep. Question is will this work on any model Roomba...or specifically this one?

User-inserted image


Hi @fxrtst, how lucky you are to have such a nice neighbor :D

DJ will know better, but to my knowledge, 500 and 600 series are quite the same. At least the Open Interface (OI) Specifications are the same, so I think the hack and the Roomba Movement Panel should work just fine.


I know! He didnt know how to change the battery so he just gave it to me and got a new one?! Ok I'll try this out a little later in the week. I did pop the top and it has the same connector.

#17   — Edited

Deleted wrong product.


Scroll up in this page and look in the description of the plugin. There is a section about CABLES and there's info


Jinx..I think we posted at the same time!


DJ, I just got the IRobot usb To roomba cable.  I want to read and write to the roomba and use a PC on board the robot to control it.   I’m reading this thread.  When I go to the link for the roomba manual it does not link to the manual.   Am I missing something?


Hi @mstephens_42

All references to the word manual on the Synthiam website get linked back to the Docs section of the website.  @DJ was referring to looking at the manual specific to the Roomba you own. For the 400 models you'll need the Roomba SCI (Serial Command Interface) manual, for the 500 Series you'll need the Roomba OI (Open Interface) manual, for the 600 series/Create 2 series the OI manual is available and looks very similar to the 500 Series. From what I've read the 700 & 800 series of Roombas have SCI ports as well and use the same Open Interface as the 500 series.

#22   — Edited

Okay great info here,My roomba Create 2 is just basically a modified 650 series. And you say if I have the serial-USB cable ,I can just hook up my Latte Panda only onboard the Roomba Easy. So now if I want to use a camera and I was planning to use the EZB cam but now I can't have it on the Roomba. I will be needing a USB camera of which the only one I can think of is this tiny Snap camera,it has USB connection,I have a bunch of older Android phones too may work with a spy cam app(turns on camera automatically when powered on).Can add it to the high speed USB on the Panda. I would rather use the EZB camera  as it just comes on when needed in the ARC scripting...I'll figure it out,I always do!

Edit----I must need some coffee, I just realized I can simply leave the EZBv4 on top beside the Panda and still use my Favorite EZ Cam!xD

#23   — Edited

You don’t need any of the links Jeremie provided. Synthiam’s ARC software makes it easy so you don’t need to read any of those manuals or understand their programming.

All you need is to connect the cable to the computer and select the port in arc. It’ll start working.


Thanks DJ! I just downloaded the Roomba control plugin and it does look like everything is there what I need! This is amazing!All what I read around the internet looks like incomplete Jibberish to me, Again you prove to have the best robot control programs in the world,Thanks so much!

#25   — Edited

What I’d suggest is the live hack. Give it a watch

no need to worry about technical jargon is the Synthiam way :D


User-inserted image Well I watched the video about 4 times and I realized uart connection is different. As I got the roomba to connect using the supplied serial to usb cable so this is only for PC connecting right, but it still kept saying EZB connection not found even though I know it is serial port 4 to roomba . my USB cable also has a similar uart extra port on top of the USB wire,am I supposed to connect any wire from that to ezb? Or just the Latte Panda alone with port 4 selected.A bit confused because if Ezb not on it won't connect at all to just mini pc. I Can keep trying as it worked once I turn on Ezb  with the http address it connects and finds the roomba in the roomba controls plug in but a few buttons do work for cleaning,init,brush motor on  seek charge port but the movement arrows are not working in the left box forward,back,turns.It usually takes me a few hours of trying LoL!Possibly because basic version of ARK?


Wow 3 hours of sleep all nightmares. How does a Roomba change into a horrifying Tarantula! I guess that was punishment for not getting the Roomba fully moving,so back at it.


DJ "All you need is to connect the cable to the computer and select the port in arc. It’ll start working." So are you saying I don't need the EZB controller at all? ARC always looks for the EZB  or it gives connection error if I just put it to  ARC Com 4 Connect/wifi button  ,for direct Serial to USB cable connection to Roomba. Now if I do turn on the EZB the first connecting is done using Http address ,connects successfully, Then instead of UART port in the Roomba plugin I pick PC--USB and com 4, Roomba beeps getting good connection, then all the buttons in the plugin work in the Init Box area which is so cool I can control all the cleaning routines and start them up but no control on the left box with 2 sliders and Left right Forward,Back nothing happens? Could this be something as simple as The roomba must be taken out of rest mode or there will be no motor access? I read that somewhere with the Create 2 bots.


Ah yes.........User-inserted image It was something so simple ,The 2 sliders were down to low for giving motor power,all good now!!


Yep, but just the beginning at least the hard part is over getting that basic control and movement happening. I do see the limitations with ARC basic, i am on hold with the bank lady about updating my bank card,really want the advanced tools working in ARC. Oh and I can't believe how awesome the roomba is when it goes searching for battery nest, I had it in the washroom trapped and it found the way out ,down the big hall and zoomed in perfectly on the infrared  nest!

#32   — Edited

I found a common problem that would explain why so many people give up and sell their Create 2 or Hacked Roombas . I find that If I connect my Roomba with serial to USB cable to PC running latest ARC(or any computer) The roomba clean button stops responding after half an hour and no longer lights up, thinking it is dead battery ,disconnect cable, put roomba on Charging nest.  Nope 3 hours later roomba still dead no charging going on anymore, A normal person would toss in the closet, sell on KiJiJi "as is" or complain to Roomba spokesman for replacement on Warranty. LoL! Roomba has no info on their web site about this huge problem...Found another techy guy that repeated this flaw over and over. The simple Fix is to just press all 3 buttons on the top together for 10 seconds which does a hard reset ,then roomba is normal again but problem will come again when USB cable is hooked up for half hour....No permanent fix for this that I can find??At least you don't have to take out the battery like some phones. On more investigation, while the roomba buttons won't respond if you keep the ARC software on you can still run the scripts and motors brushes vacuuming sequences all will work,just don't disconnect the cable,to return roomba back to Factory setting just hit those top 3 buttons again for 10 seconds. Interesting day I had yesterday!


Wow - i didn't know it won't charge if it is in diagnostic mode like that. Good to know!


Ya so it just shows how powerful ARC is to be able to overide that mode and continue to function with full motor power,as long as it has the Micro PC tethered to it.


Hey there,DJ I downloaded the latest version of the ARC that you posted today and it seems to have solved the problem of Roomba going dead and needing a hard reset,so far half an hour tethered to my PC and when I hit start,still showing full battery,Hopefully this issue is now corrected, I dont want to Jinks it,so I will just wait another 15 minutes and see...if all good ,if you don't hear anything later ,all went good,! If it was not your doing then thank you Jesus or Hail Satan or By -your-command,-Imperious Leader.

#36   — Edited

I had to give up trying to use my Latte Panda with battery power as I accidentally wired the polarity the wrong way on my DF Robot Voltage regulator(Magic smoke)- that would cut the power down from the 12 volt SLA battery to 5 volts or the 7.4 Lipo 5000 also worked with the Panda. Now my only choice is to wire up the EZB with UART directly to Roomba connection. for the Roomba Movement Panel to work.(If you connect any more than 5 volts,Panda will not even start) So I am wondering if I use the serial--USB cable that came with Roomba, can I still just add 2 wires on the cable(it has a header connection) to the TX and RX directly to EZB? and then switch it to UART in the ARC Roomba movement panel,I already found where the 5 volts and main Roomba battery 15v comes out the cable header... I know it's a shame not to be able to just use the USB cable on Panda,it was working great but now all I got is the EZBv4 to use,OR do I need to make a new cable from scratch like in the video?

#37   — Edited

Oh no, is the latte panda dead? Or just the power supply?

Surely do not connect more than 5v to the lattepanda or it'll break. :P

If you do run the latte panda headless, here's a few tips

  1. Save on disk space and improve performance :

  2. Run headless:


Hey DJ great to see you still looking out to help us! I did submit a ticket for premium help and got some great info on how you guys run the Panda on battery power. Took the advice! I only blew a voltage regulator not the Panda ,it survived,LOL! Not sure what headless means, will check the Link you put, The Panda is so particular on how much current it wants at start up over 3 Amps I believe! So you guys use 5 Amps on your Panda rigs,good to know!

#39   — Edited

Oh ya, totally. I think they’re called LM1084 voltage regulators. We used to use them on the old ezb v3. Jeremie discovered them and they’re amazing. Just make sure you put a heat sink on it though. They get toasty


Ahhh yes will do, Interesting that it is the EZBv4 that can take so much abuse and always come on top,everything else can blow up but out of the ashes EZB survives everytime!xD


Ahh, just a heads up to Roomba owners  .As I have create2. Roomba 650 which is reconditioned to be like new. The battery supposed to be new so thought it strange that if you leave it without putting on charging cradle,next day battery shows the orange light as empty. Suspect it is on still waiting for commands,still,how it dies so quick?


Is it powered on while it’s off the charger?

also I notice the same with all of mine

#43   — Edited

There is no off switch so unless battery removed it could be listening for button commands? It was off the charger like a day and a half . I do see irobot sells a 99 dollar longer lasting battery too and Li on type.(lithium..Lipo?)


Oh wait there is a power command used to power it down, just saw that now,gotta try and see if battery saves longer!


I get my batteries from Amazon


User-inserted image

Wow checked my battery and it seems to be the more powerful Li Ion battery 14.4 -16.4 volts 3300 mah ...48 wh whatever that means No wonder I have never seen it run low power,even 45 minutes it still runs strong ,I get bored and push the dock button to send it home for recharge but I have yet to watch it run low and return to nest by itself, 1 and half hour possibly? Will test that. So ya documents say no real power off unless removed.Another nice fact they say you can bypass the 200 Ma limit fuse, by attaching microprocessors like Ezb to the motor,brush or vacuum power connectors for more powerful amps ! Also add power switch then too.


Updated to not require an EZB connection when using PC COMM

#48   — Edited

Wow will try it out! This is interesting because if I just only use Latte Panda I can even have all my other sensors attached to it through  the Arduino part on it.

#49   — Edited

When you go in the Roomba Panel on Arc, configuration and the Button push Edit section ,it first takes you to Blockly where you can run some control commands to write into a script. I was checking some would work ,when you save  and other commands like "stop all Brushes" would not. If I first ask -Init, -Clean then turn off brushes or vacuum, not responding to turn off brushes or vacuum but could control how long Clean can function and some of the other functions. I am just started on learning these Roomba controls in Blockly or Javascript . It sure is fun when you try something there and to see the Roomba do something new you create in scripting. I am sure they should all work if put in the correct order and using sleep commands timed just right,  Time for more fun to see what I come up with! Error message after ControlCommand brushes Start ControlCommand Error for 'iRobot Roomba Movement Panel 2' sending 'SideBrushOn'. 'ControlCommand' with parameter SideBrushOn, is not supported for this control (iRobot Roomba Movement Panel 2) Done (00:00:01.2048716) So I guess it could be just not yet supported or I am forgetting something simple. Simple Code I tried was-----

controlCommand("iRobot Roomba Movement Panel 2", "Init"); sleep(1000); controlCommand("iRobot Roomba Movement Panel 2", "SideBrushOn"); sleep(1000); controlcommand("iRobot Roomba Movement Panel 2","Init"); sleep(1000); controlCommand("iRobot Roomba Movement Panel 2", "MainBrushOn");

I probably just need to research the Java coding and see examples of how other people are doing it ,then Make my own scripts, I have not really done any major script writing since 2 years ago but it should be like getting back on a Bicycle once I start doing it ,but got a Doctors appointment later today ,really sucks Just want to keep at this.

#50   — Edited

Just a quick tip, ARC doesn't support Java. It does support JavaScript. So be sure not to look into Java, because you will not find anything that works. Here's a link to the ARC JavaScript documentation:


Oh right there is a big difference in the two , thanks DJ!


So I spent an hour trying to build the mobile ARC interface for my cell phone to control Roomba but not having any luck, everything working great on PC and Latte Panda but after making interface builder to upload to cloud and download to phone I can't get any Roomba movements, but again try on PC and everything works. I must be missing something important to work with mobile interface, which type of script is supposed to be included with mobile?

#53   — Edited

Check the user interface manual - it doesn’t support the iRobot roomba Movement Panel or any plug-in skill. This is a limitation of mobile devices not having compatibility of the robot skill dll’s

Here’s the manual:


Ok just saw some guys doing it in 2014 and 2019 with mobile scripting in the community archives here, so phased out? will read that manual now.

#55   — Edited

Oh well ,no big deal really, I mainly just wanted to use the very cool Google TTS voice on my new Samsung phone going into the EZ Tiny and speaker there on the Roomba. I can think up a work around just having my Google Mini Bluetooth speaker on it and Bluetooth the sound from Latte Panda running the Android apps(Google TTS voice) with Bluestacks program, more work but do-able. Edit----Also @ DJ , I do appreciate when you chime in to give help. I hate to bother you or Jer when I have problems, I do actually enjoy reading the Forum posts and skill description/help files on my own to figure out what I need. I know you must be so extremely busy with so many other coding issues and running a business, I like knowing that if I try for days and can't figure out something then and only then will I bug you ,LOL!:D


Hi DJ, is the skill source code from the Irobot Roomba Movement Panel anywhere available? Thxs


Click on the link that says SOURCE CODE for this robot skill

User-inserted image


Hey Nice , I have been learning serial codes (for EZ Tiny port) to send to Roomba just absorbing all the info I can find here and there is so much great info! I learn code slower than you guys but where it takes me a day some of you guys know in 5 minutes, eventually I do catch up!xD


Well that was not so hard! I do have a mobile app for my Samsung S2o cell phone and the Mobile Synthiam ARC working with custom Movement Panel (left right forward backward stop arrows),no joystick yet,gotta make one up,but all the main roomba controls working now in mobile and working with EZ Tiny IO Like the terminator would say, My Mission is a success!:D


@DJ- Thanks for the code! @robo rad- Glad you got it working!

#61   — Edited

Updated to display # of packets received and a few small fixes fixes

#62   — Edited

Hi DJ, display what? There is a counter now, what does it do? Obs: Voltage displays correct now:)

#63   — Edited

I missed the SHIFT key when hitting 3. Supposed to say # of packets :)

There's also a power off and reset button added

#64   — Edited

The plugin window was to small and was hiding the new buttons. That was just what i was trying to add in the source code. Thanks DJ!! The encoder values are not yet being sent to the NMS, right?

#65   — Edited

Great to see the added buttons, works great with my desktop PC, will try with Latte Panda next, I have already figured out  the codes to use with Mobile ARC and use custom Movement Panel for mobile, I also got brushes on/off ,Innit and some of the others, will add joystick control for mobile ,try to get that going with my PS3 game pad.:D

Got the mobile touch joystick with camera view and init , dock buttons,all works with phone ARC app!


Awesome roborad!

proteusy, the NMS integration isn’t complete. I’ll need some time to figure out how to take the encoder values and concert into Cartesian coordinates


Added NMS compatibility with the iRobot Roomba robot skill. Verify with this manual (top of this page) for instructions on using the NMS and how to reset the iRobot's memory to correctly home (0, 0) the location parameters.


So if i want the Rx line to work and read roomba data , it cant work with io Tiny (software serial) only Usb or UART on computer or Ezbv4 ports,correct?


Correct. As documented in the manual. A tx and rx are both required for reading sensor data. Rx = receive


Nice work DJ, wonder if there is a way to auto calibrate this. Can you get into the roomba IR sensor? Maybe some well placed IR LED's in strategic locations around the room. You could even pulse them to say where they are. I guess you could always add a camera and a Glyph

#71   — Edited

The iRobot firmware doesn’t support that.

There’s instructions in the manual above on how to calibrate for home position. Be warned that wheel encoder have a large margin of error if this is your first time experiencing wheel encoders.

oh one thing - If you’re interested in navigation challenges of different types, check the manual for the navigator robot skill. There’s some additional reading links at the bottom

here’s the link:


Ok thanks for clarification DJ ,will just use Panda computer to try out more sophisticated navigation:D


Oh yes. If you have the option to use anything else I would. I did this work on the roomba mostly to allow you all to experience various localization/pose methods

I also provided those links for deeper learning. A large percent of Synthiam users are education and universities. So it’s a good idea to learn and experience the troubles the industry faces.

I only got excited about the intel t265 when I experienced it. And boy I was surprised. I was also mostly surprised that with technology like this, why aren’t more robot companies doing amazing things?!

but then I remember it’s because they want to program from scratch for the ego and bankrupt themselves....

one day the world will get it and ARC will prevail :)


I am having problems using the roomba encoders. Here is a video first without and last with the encoders on.


Prot, disable NMS on roomba and only use the intel t265. You can’t use both. There’s no reason for both. The roomba will just mess up the t265 data. There’s information in the NMS manual about only having one level #3 group #2 sensors


Ok. I thought you could use both. This is my test platform:

  • Roomba 560 with FT232 USB UART Board
  • Intel Compute Stick STK1AW32SC with windows 10 Home 64bit - Intel RealSense Tracking Camera T265
  • PS3 Eye camera (has a nice 4 mic array)
  • Arduino Uno with EZ-Genuino Uno firmware
  • 3 HC-SR04 ultra sonic distance sensors with 3d printed supports (
  • USB 3.1 4 port Hub (with external power)
  • 2 LM2596 1.25...30V 3A voltage converter with display. Both using 5V. One for the PC Stick and the other for the      USB hub and the Arduino Uno.
  • 4 MR18650 - 3.7V 3500mAh Li-ion Battery giving 7.4 Volts at 7000mAh.

User-inserted image

User-inserted image


Using both would mean the t265 is fighting with the roomba wheel encoder. One has a higher degree of resolution than the other. So you can only imagine what will happen....

the t265 will be trying to constantly fix the roomba’s pose values. And boy, that would be a mess kol


I got the 2 way communication going by just adding the old Ezb4 and changing to use UART1 and adding the Rx wire to recieve Roomba sensor ,voltage data,tested and working. I am now looking for example program scripts to get and use the roomba ir and bumper data.My question right now is,can i use this NMS Roomba movement switch and run this nav program without the T 265 sensor,just 2 sonars or roomba ir,bump?

#79   — Edited

You can read about the NMS here:

i suspect you’ll want to use The Navigator for navigation.

I also recommend reading the iRobot roomba manual on how to use the NMS with it. Scroll up to the top and you’ll find the manual


Would a room a support an Inmoov? thanks


nice roomba hack @proteusy :)


Okay, i did not notice all the additional info you added at top of this Movement Panel page, seems easy enough to try out!

#84   — Edited

Thanks DJ works great. Noticed that the battery indication is not correct... User-inserted image

#85   — Edited

*Note: moved this question from the Intel T265 thread to here because it was not relevant to the Intel T265 thread.

What does your battery voltage read? It is also a variable...


What's the voltage capacity of an iRobot Roomba battery?

#88   — Edited

DJ i know its 14.4V and that the 15.* volts indicates full battery but the battery charge capacity is 433 of 2696. I have run the roomba almost empty and it always showed 100%.

#89   — Edited

When i opened my create 2 battery i think it was saying 16.3 as it was the 99 dollar Lithium Ion pack but I will have another look, i could be wrong.yep wrong indeed 14.4 volts just more Amps 1800ma

#90   — Edited

Mine is a 14.4V Ni-MH. I am charging the battery now and read 16.14V at 1185/2696 mAmps.


Oh ya for sure it says something about 16 to 21 volts on the charger base, that is why I can only turn on EZB after leaving charger dock, i ordered a voltage regulator still waiting for shipping.


Ok, i get 16.70V with full charge.


A new feature for automatically sending a pause signal to the NMS level #1 navigation skill if any of the obstacle sensors are triggered. Read the manual above for information on this feature and how to enable it in the config menu.


This Roomba control gets better and better every time I come and check! That Pause is going to come in handy to avoid full robot body smashing into chairs when sonar misses it and Roomba sensors still work,going to make an outer force field for the bumpers to compensate larger robot body.Thanks for adding that convenient pause switch DJ!

#95   — Edited

Does anyone know if the TX and RX ports are pin 5 and 6 for the com port on the first gen EZB4? I blew the com board on my newer EZB4 X2 so trying to see if older EZB4 will connect to Roomba, not having any luck with Old EZB4. Will need to hold off working on robot until I can order a new Com board for the new EZB. could take a month if part comes from China though possibly 2. The EZb Tiny works great with Roomba but not enough digital ports to handle the robot,just basic movements.

#96   — Edited

All generations of the ez-robot v4 have the same pinouts for i/o. Got this image from ez-robot's website for their product. Their website is The data sheet for the ez-robot product is here:

User-inserted image


Interesting, that is what I thought, should still work then, possibly just need a rest ,have a coffee and try again in the morning, Thanks DJ.

#98   — Edited

OK so I watched the video again top of the page connecting cables and I did see 1 major thing I did wrong I keep getting UART 0 and UART 1 mixed up,kept trying to use UART 0 when in fact the wires are connecting to UART 1,OKAY will fix that in the morning then,bit of relief finding the problem,otherwise no sleep comes Ha ha!

EDIT----- So I had to try it out and after changing to UART1 Bingo that did it ,started working again, I dont know how many times I watched that video above but every time I do it solves my problem! Saved me from spending about 40 dollars on a new com board, should send DJ a 24 pack now!

#99   — Edited

I can't tell you how many times I've screwed up or destroyed something because I was tired and rushing. It's hard to step away and get some sleep or take a break but most of the time doing so works wonders when trying to figure something out. Tired minds plan poorly.

I'm glad you worked this through. Well done.

#100   — Edited

Do these Roombas have lidar for navigation or is it one of those bumper things where goes straight until it hits something then moves in another direction until bumper hits again?

#101   — Edited

These Roombas have an IR sensor array and bump sensors front. I have a xiaomi that has Lidar, and you can place it on the floor in any room and it figures out exactly where it is. The android mapping app is so cool...

User-inserted image


I was actually amazed the Roomba had sensors on the bumper because my Roomba just smashed into everything.  There is a great viral video of a Roomba someone hacked swearing a cursing every time it hits something.

I guess a paint option on NMS would be nice so you could draw lines in to represent your rooms. Drive to every corner so you get the general location and then play join the dots.


Good to know on these. I have one but have not replaced the battery yet. But I was looking at my neato and the lidar is on the top, but couldn't see anything on the Roomba. IR interesting. The good thing is I'm adding a robot to the top and I won't have to worry about the robot blocking the lidar.


Ha ha ya that swearing video, I was going to do the same thing but the EZ Tiny can't do roomba sensor input, need ezb4 or any other computer that does transmit/recieve from UART.My Tiny can only do transmit data by software.

#105   — Edited

So in my sampled Roomba mobile  I do get the init button and Dock button next to the joystick and camera, so If I wanted to add the Start main brush ControlCommand() button on the mobile interface and start /stop vacuum button ,I think it is just as simple as making a new script titled Brushes off put in the code and if I go to inteface builder It should then give the new option for a Brushes off button, Etc....Right? Upload to cloud and then download to my mobile tablet, I think that is how I did it last month?

Okay I get to make a new button,label it then I can edit the Command control code for Brush On and save it in mobile Interface window.

---Wow this is really cool, DJ has made it even more easy than ever to start getting all the Roomba codes to work on the Mobile Builder and create my own custom buttons for the mobile Tablet, Using Java script now instead of EZ script, the cheat window makes this so simple to copy and paste for the mobile buttons. Like I always just copied scripts from those before me that uploaded samples but now it is so easy to do my self,I have many cool ideas for the mobile Tablet controls.

#106   — Edited

I just wanted to add to what I have found looking back at all the detailed library ,history posts and Questions from Synthiam and EZ Robot going back to the EZ v3 and a bunch of posts in 2016 on Getting the Roombas/Create,Create2 to work with Synthiam mobile software some of the best info I got from a User name Dunning Kruger in our Forum here. He had some great Mobile sample code that could get the motor brushes running with your mobile app interface . I had it working up to a month ago using sample code from others as well. Only had to change the EZ4 UART commands into Send Serial commands for my IO Tiny. I there was no button to turn on Vacuum motor so I will need to find that send Serial code to get full vacuuming functions again in Mobile Tablet. Unless anyone else knows what the serial code is for Vacuum ON/Off? I do remember the info is on the Roomba plug in ?info button,going to see if I can find that still. (I had it working last month but I may have accidentally over written that program I had.)

Edit-----OKay so the web site just says this code turns on all brushes and vacuum together at 100 percent, good enough.....

SendSerial (D0,115200,138,13

..............I have uploaded a sample program that does turn on all motors and brushes,vacuums floor by touch control on your phone or tablet ,I simply converted sample code from EZB4 UART code  into EZB Tiny Serial code using the TX pin at D0 ,No sensors yet but you can use the joystick and video window to remote drive Roomba and Vacuum by touch control using Synthiam ARC Mobile on your device. Search my User name for the App down load, If you have EZB4 or computer then use original program By User Dunning Kruger and download his App for UART version.


I have built the cable as per the instructions on Github. Since this uses a different method of attachment to UART0 as opposed to UART1 you end up with a 3 pin connector that goes into a 4 pin slot. You must pay attention to the polarity. I found this in the datasheets and it might be helpful. Looks like the 3.3V pin is not connected.

User-inserted image


Ahhh, spring day often brings in the Ants looking for food.The best time to let the Roomba go crazy on their little arses!xD


I am having trouble getting this to work with NMS. I am following the tutorial to a tee, I am using UART comms for bidirectional comms and sending the data to the NMS. I cannot get the initial yellow dot to display at the 0,0 coordinates nor does it plot out as I move by bot. The coordinates update but there is not graphical indication on the NMS window. After about 2 minutes the coordinates and heading just start to vary randomly. Do the internal wheel encoders function as a level 3 group 2 sensor, even if inaccurate?


Yep, packets accrue at a rate slightly slower than my student loans.

Also noticing that there seems to be long periods where the plugin stalls and a lot of random variables are output. Eventually it will stabalize


When it stalls might be when the weird locations are updated in the nms. Sounds like somehow there is a noisy connection. Not sure how to figure that out. Ill have to think about that

#113   — Edited

Any idea why there is no initial placement of the yellow dot to establish the (0,0) cartesian coordinate?

#114   — Edited

Not yet - I’ll reply if I do. But I’m stumped because I can’t reproduce it. The roomba provides the localization details - I don’t know why it’s not providing the details for you.


So glad to see the Roomba skill always get updated,was my favorite new Robot to work with this year,Keep up the great work!:D


@Perry - What do the wheel encoder variables look like for you? Are they moving up as the robot drives?

Hopefully, your Roomba wheel encoders aren't damaged. Maybe write a quick javascript that loops and prints the values to check. Something like...

while (true) {

  print("L: " + GetVar("$RoombaLeftEncoderCounts"));
  print("R: " + GetVar("$RoombaRightEncoderCounts"));

#117   — Edited

Hi DJ. I tried the code but get this error

User-inserted image

I did use the advanced variable watcher to verify my encoders are working. I did notice that comms were intermittent and the encoder values will fluctuate wildly quite often. During this time my position start increasing non-stop. The reason I could not see the yellow dot and position movement was because it thought the bot was 75 meters away from (0,0). So I get initial function and it works for about 30 seconds and will work for another 30 if I reset the roomba.


Maybe this will help to illustrate. The red circle is it starting to map as I drive and the orange circle shows where it instantly jumps position by 20 meters off the screen.

User-inserted image


The description sounds like either the encoders aren’t working. Or an older firmware with an encoder comm issue. Or the wiring has noise and is being corrupted.

I’ll add an option to enable debugging to view parsing errors. That can identify noise issues.

If that isn’t it - there must be a firmware version difference and a bug in their firmware.

#120   — Edited

Perry, I can confirm that noise on the signal lines is a real issue sometimes. If there are any EMF waves from power wires or other devices your encoder signals will get jumpy or scrambled. Just yesterday I had to rewire a couple limit switches that give feedback to a micro computer because they were not working. The MC thought they were open when they were actually closed. I rewired with shielded wire, grounded the shield wire and everything worked great. Grounding the shield drain wire is important because it will drain the collected EMFs.

Encoder and limit switch cables are very susceptible to noise issues.

I used a Ethernet cable I had laying around to rewire with. It had twisted 24awg copper wires, foil wrapping and a drain wire. Just cut off the end connectors and wired it in.


Dave is spot on about the ground - you'll have to make sure there is a solid ground between the MCU (ezb) and roomba.

I checked the code and turns out parsing errors are already logged. There is no additional logging or debug I can add. The parsing error you would see is "Missing data. Expecting 80 bytes" if there is a parse error of data.

Are you resetting the roomba before use as in step #3 of the instructions in this manual?

#122   — Edited

Well, i am having this position jumps to. I use the PC com port at 115200 Baud. I post a pic of the problem, but i can see that the encoder value jumps to 65445 or so. And i noticed also that if i move left, the left encoder jumps, or if i move back, both encoders jump to max values. Also if i use only one ultra sound sensor i must remove the "Filter false positives" check box or it does not map.

User-inserted image


Yes, that is the problem I am having. And to follow up with DJ, yes I am resetting the Roomba and once it starts sending packets the Navigator resets to coordinates (0,0) as expected. I am connecting via the UART and I built my cable to Jeremy's spec and instructions on your GIT repo.

User-inserted image


After reset, do not move the roomba in reverse. The roomba will need to move forward a distance in order for the encoders to count up from their starting zero position. The way the roomba works is by using a 16 bit integer for the encoders and they count up. This is how the roomba works internally.

if the roomba is instructed to move in reverse, for encoders count down from 0 and that is 65545


Correct, but the jumps happen even if you move forward and everything is ok.


The roomba has encoders on the wheels. It uses the encoders to know how fast the wheels are moving. It doesn’t use the encoders for pose localization.

the encoders values are transmitted in the debug packet that we’re using. that’s the only information we can get from the roomba about the movement

We’re pushing the limits of what’s possible with these things. :(

#127   — Edited

If all else fails install pull up resistors on the encoder's A & B lines. Usually, a 1k resistor placed between "A" and "5V," and another one placed between "B" and "5V" of the encoder feedback lines should work in most cases. Place them near the controller.


Actually that has me thinking. Because these roombas are used to clean dust and dirt.... I wonder if they’re dirty. Maybe take the wheels off and give them a good spray of compressed air. Maybe wash with brake clean. I use brake clean for everything lol. I keep a 20 liter metal barrel from Napa around at all times

#129   — Edited

There is something not right with the navigator plugin. The encoder counts are spot on, but every time the value passes from 65545 the position of the robot jumps out of the map. This happens every time the left or right encoder passes this value counting up or down.


That’s because the value wraps. It’s a fault in the design of the roomba encoder values. Remember, the position is estimated by the encoder values changing. When it changes from 0 to 65000, it thinks it has moved a far way. I cannot fix the firmware of the roomba vacuum.

#131   — Edited

Sorry but i dont understand. An encoder is finite, so when it reaches the end it goes back to 0. What am i missing?

#132   — Edited

I’m not sure what you’re missing either. Maybe you missed one of my previous responses or I can add more information? You see, it would be different if I was in charge of the encoder counts because I’d reset the count every time I referenced it in the pose calculation. But instead I can only see the counts it returns. So the value might suddenly jump to 65000 because the uint16 wrapped (overloaded).

remember this is a vacuum you’re using. It’s a vacuum that was made to bounce off walls with a bump sensor.

*Edit: an encoder count is simply an integer value (number). It increments or decrements every time a "tick" from a "switch" on a wheel. The switch is connected to a wire on the MCU which has an interrupt. That means it jumps to that piece of code every time the i/o port switches from high to low or vice versa. When that happens, you simply ENCODER_COUNT++ if it's one way, or ENCODER_COUNT-- if it's reverse.

The trouble with the roomba is the encoder count value is returned, but that's it. So there's no way to "reset it" every time it is read. So when the encoder count continually increases, it eventually wraps the small int16 they're using for the count size. That means in reverse it does the same thing, it can go from 100 to 65300 in one packet. The trouble is there's no way to know what just happened in the time between the last packet and the most recent.

What I "could" do as a hack, is see if the encoder difference is greater than 30,000 and assume it wrapped - then calculate the difference. It's probably not going to work well because the accuracy might be decreased... but the robot won't "jump" on the map. Instead, it'll go to a position that "might be close" lol

There's a lot of information in the NMS page about the challenges with pose telemetry and odometery that have plagued the world of robotics forever. The closest we've come in the industry for inside-out navigation (i.e. the robot uses its sensors) is the intel realsense. Just sucks that it has been discontinued....

The robots used in warehouses and at amazon, etc use outside-in navigation. External sensors tell the robot where it is. This is how the IPS works. I have an item on my todo list to modify the IPS to use a glyph - but that still doesn't help when something is in the way.

#133   — Edited

Hi DJ, Have you tried to use the NMS with a roomba in this configuration? I notice in the hack videos above yo do not use the NMS and on the NMS hack you do it with the realsense camera. It seems we should be able to get something to work with the wheel encoders here. It would be good to see a floor map from someone that had it working with just encoders. I am not sure if Proto has my basic config or something much better.

#134   — Edited

Yes, in order to create a robot skill the hardware is required. In this case, it's an iRobot Roomba 500 series vacuum that I test with. Pictures and screenshots are in the manual above. I explained why the encoders do what they do and how it affects the NMS in the post above your response. I might have a method to hack the encoder values - but it won't be perfect for this vacuum.

I wrote a lengthy and detailed response in the post above.


For your encoder issues jumping around, there's a guy who documented the same behavior. He ended up soldering the wires directly to the encoders (second page):

Also, there's a mention in there about cleaning the encoders really well.

#136   — Edited

Thank you DJ for taking the time to explain. I was thinking maybe we could read the encoder count to two 32bit variables and use that instead. That would give us 2147483647 i think, this number would be enough.

#137   — Edited

Also, it appears the encoders for this vacuum are even simpler than first imagined. They're not quadrature, which means each wheel only has one switch. So the roomba MCU determines the direction the count goes. This also means the accuracy is even more limited. Also, it means there is only 1 single fault of error so the encoder values are going to be out-to-lunch when they're dirty (or a loose wire).


User-inserted image

#138   — Edited

Interesting, there are a few documented firmware issues as well - but this one shouldn't affect us because I'm calculating the angle based on the encoder values. It's just that the encoder values are bonkers on some roombas....

User-inserted image

User-inserted image


I just wanted to mention that you probably shouldn’t use brake clean on your Roomba as it contains acetone. Acetone melts ABS and other plastics. I would suggest using isopropyl or windex for cleaning any plastic based robots. Or good old fashioned soap and water if there aren’t electronics at risk of getting wet.


Yeah - jeremie is correct. But I live on the edge :D


DJ, the bad boy of robotics. Lock up your daughters! So I am now wondering if I have an encoder problem or whether this NMS can operate with the Roomba Create2. What is the next step besides all the cameras that keep getting cancelled?


Next step is I’m working on an idea to handle wrapping the encoder value. I wrote the code two days ago and it needs testing on real hardware before I release it. Need a day or two


This is a crazy update but it might just work... Long as the iRobot Roomba is reset to the home position with Step #3 in the above manual instructions, this should work with all encoder values. I tested this successfully on my Roomba and I'm able to move in reverse even at home position - this was the problem that made everything go crazy.


Thanks for working on it DJ. I have been resetting to home as the tutorial calls for. I have the issue. I am not sure it is an encoder wrapping problem for me unless I misunderstand the term. Mine work fine for about 10 seconds then  become completely erratic. I think I may be having comms problems.


Comm or encoder issues. I’m guessing encoder because if it was comm, the parser wouldn’t understand the packet and raise an error.


Hi DJ, can you elaborate on the workaround you did? Will test it when I get home.