Saturday, September 6, 2014

Intel NUC for ROS

This post has been a long time coming -- I think I promised it to several HBRC members at the July SIG...

I've frequently been asked "what computer do you use on your robots?", usually from someone looking at a variety of sub-$100 ARM boards. ARM processors have come a long way, but for a ROS computer, they are not the easiest choice. Austin Hendrix has done a lot of work to get a buildfarm up and running for ARM processors -- but there is still a long way to go and many things will not work "out-of-the-box".
So my choice? Well, it's not under $100, but it is a very fast, fairly low power machine (here, I define low-power in the sub-15W range). The latest generation of Intel NUC (Next Unit of Computing) modules offer quite a few options for small Intel Core-based computers. I'm using the 4th-generation i3-based D34010WYK. This offers quite a bit of compute power for ROS, especially when you consider that early TurtleBots ran on a single-core Atom. I've used 35W TDP i3 processors on a number of mobile manipulation problems and been able to run the OpenNI/OpenNI2-based drivers, the navigation stack and MoveIt! without much difficulty. If you're looking for a bit more processor, there is an i5-based version for $100 more.
Intel NUC (image from Intel NUC website)
These computers are sold as either a board (somewhat hard to find for sale) or as a kit which includes the case. Either option requires memory, hard drive and wifi card to be added. My setup is:
  • 8GB Crucial Ballistix Sport SODIMM. Whatever you choose, be sure it is 1.35V RAM -- the newer NUC models work ONLY with 1.35V RAM (many modules are 1.5V).
  • 120GB Crucial mSATA SSD. Intel offers a larger case version of the NUC that fits a standard 2.5" drive, but the smaller versions only take an mSATA drive.
  • Intel 7260 Wireless-AC Card. This card will work best with Ubuntu 14.04, older versions will need an updated kernel (at least 3.13) to get working drivers. No need for antennas as they are already in the case.
These boards take 12-24V DC input, but are probably most efficient at 19V. I'm powering mine off a 12V battery connected to a Pololu 5A Step-Up Regulator that is configured to output the desired 19V. My batteries will never get even close to 19V even when fully charged, and so the regulator should not have any issues.
I would recommend installing Ubuntu 14.04 and using ROS Indigo for these machines. If you want to use an older Ubuntu distro, you should definitely make sure your wifi card is compatible, because the Ethernet port will not work with the drivers present on the 12.04 installer and you will have to connect to ubuntu.com to update somehow. Another alternative is to look for a NUC based on the 3rd-generation Intel Core processors, but these might be hard to locate.

9 comments:

  1. interesting. thanks for the post michael. what do you think about intel mini-itx http://www.intel.com/content/www/us/en/hardware-developers/thin-mini-itx.html or something like minnowboard max http://www.minnowboard.org/meet-minnowboard-max/

    ReplyDelete
  2. I've definitely used a number of Mini-ITX boards over the years -- one of my favorite was an Intel 3rd Gen Thin-ITX with 19V input. Unfortunately, Intel has really gotten out of the motherboard game with the exception of these NUCs. My favorite Thin-ITX board has long since been discontinued and there was never a 4th Gen replacement.

    As for the Minnow, it's somewhat hard to tell. The original board was never really available, and had pretty low-end specs. The new Max version isn't available yet. From what I've seen, their community isn't huge, and has chosen to support Yocto, so I get the sense that it isn't quite a desktop board. One of the main appeals of the NUC is that it's a standard desktop chipset and whatnot, so you can install regular old Ubuntu and put ROS on from debs. With an SSD, I found that installing Ubuntu 14.04 took maybe 10 minutes on the NUC, installing ROS another 20-30 for desktop-full depending on internet connection. With an ARM processor, or some odd-ball Intel, you might spend days or weeks compiling all sorts of packages.

    ReplyDelete
  3. you can order the minnow max at mouser. i just got it this week (a few weeks lead time). so far ubuntu 12.04 and ros hydro seem pretty smooth, with an ssd, but i need to play with it more.

    on a related note, would you recommend to upgrade to 14.04 and indiego? is indiego stable yet? we've done all of our development on hydro and putting the upgrade to 14.04 on hold until indigo is stable.

    ReplyDelete
  4. Did you test the power consumption as well as powering the NUC with 12V? It would be an interesting option for Kobuki/TurtleBot, if we can run it on Kobuki's 12V/5A power supply.

    ReplyDelete
  5. Hi,

    I was wondering if you ran into any issues with USB bandwidth especially with Kinect/ASUS sensors. I have an ASUS, Hokuyo laser, USB2Dynamixel and motor driver on my robot and when everything is running I can only get the depth stream from the Xtion, RGB is just a black image.

    I've been working on tying my motor driver and dynamixels into single board and communicating via the NUC's ethernet port but it would be great to know if you've had similar issues and if so how you solved them?

    Thanks

    ReplyDelete
  6. Richard, I've been using ethernet-based comms for my robot hardware for quite some time, so I haven't really run into this.

    ReplyDelete
  7. Richard, a minor follow up: I had been using a Carmine for a while and was setting up with an ASUS Xtion Pro Live this weekend. I ran into several USB issues, which I fixed by a) installing the latest firmware onto the Xtion, and b) blacklisting usb-snd-audio kernel module. With these updates I now have an Xtion Pro Live + Hokuyo URG + USB Bluetooth running fine (dynamixel comms are over ethernet though). I posted the notes of this setup to https://github.com/mikeferguson/maxwell/blob/HEAD/maxwell/docs/computer.md

    ReplyDelete
  8. I always forget the Xtion has a a mic too, thanks for the follow up. Just out of interest what's your hardware set up for your Ethernet controller. Are you using an arbotix with w5100 interface or an ARM micro with built I Ethernet?

    ReplyDelete
  9. It's an STM32 with a TI Ethernet Phy, design for the board is here: https://github.com/mikeferguson/eagle/tree/master/etherbotix

    ReplyDelete