I like making robots. I’m sure those of you that are sharing the same interest have faced this problem before: what can I use to control the robot? I need something that is small and light so that it does not increase unnecessarily the weight of the robot but is capable enough to allow me to perform more than just basic operation.
There are of course countless options of Arduino boards (and even more clones), some very small but they will not provide enough processing power to allow (for instance) a humanoid robot to display more complex behaviour.
You have then the Raspberry Pis and the other Single-Board Computers that might fit the bill for more processing power. Having Linux based controllers are very handy as this opens a lot of opportunities, for instance the ability to run ROS on the controller. But these boards are coming with a significant drawback: they are big and heavy (at least from the perspective of a robot where every gram and centimetre is important). The Raspberry Pi for instance comes with quad USB connectors and an additional Ethernet connector that more than double the weight of the board and are completely useless in the case of robot. Yes, I might use USBs to connect certain peripherals (more on this later) but under no circumstance I would like to do that using bulky USB cables; they add even more weight and will force me to make the robot even bigger. The Zero is indeed smaller and ditches away with most of the connectors but at the expense of processing power and available USBs. Then you have the Compute module which is really small (and the latest version finally comes with the quad core processor that is in Raspberry Pi 3) but it lacks any USBs and to connect it in a circuit you would need to have another board with the SO-DIMM connector and you have only one USB to work with so you’ll need to put on that board a USB hub too.
Wouldn’t be nice to have a Raspberry Pi without any connector soldered on the board? If you need something you just put some small connectors (Molex, JST, you name it, or solder the cables directly…) and have a very compact and light solution for your robot. Sadly when I approached the Raspberry Pi Foundation for such a variant of Pi they indicated that it is not something they are planning to do and I should discuss with the producer (Element 14), which in turn said they could do it if I could order at least 2,500 items (and we didn’t even got to the point to discuss the price).
So is there not hope? Fortunately there is. Recently I have come across this small board from FriendlyArm called NanoPi NEO Air.
The producer has an impressive list of boards and you should check them – they are very interesting (later I will write about the M3 board with which I am currently making a project). But this time I will focus on the NanoPi NEO Air. I have ordered a few of them with the purpose to see how they work and how they can be integrated in the robots.
Let’s start with some specs for the board as they are in the producer’s site:
- CPU: Allwinner H3, Quad-core Cortex-A7 Up to 1.2GHz
- RAM: 512MB DDR3 RAM
- Storage: 8GB eMMC
- WiFi: 802.11b/g/n
- Bluetooth: 4.0 dual mode
- DVP Camera: 0.5mm pitch 24 pin FPC seat
- MicroUSB: OTG and power input
- MicroSD Slot x 1
- Debug Serial Port: 4Pin,2.54mm pitch pin header
- GPIO1: 2.54mm spacing 24pin,It includes UART,SPI,I2C,GPIO
- GPIO2: 2.54mm spacing 12pin,It includes USBx2,IR,SPDIF,I2S
- PCB Size: 40 x 40mm
- PCB layer: 6
- Power Supply: DC 5V/2A
- OS/Software: u-boot, UbuntuCore
- Weight: 7.5g(WITHOUT Pin-headers); 9.7g(WITH Pin-headers)
That puts the board somewhere between the Raspberry Pi 2 and 3 with just the RAM being a little disappointing. Bellow is a picture of the front and the back of the board:
You might have noticed in the specs above that the size of the board is 40 x 40 mm. To put this in context here is a picture of the NanoPi NEO Air next to a Raspberry Pi (it’s a model 2 but that is the same size as model 3):
That makes you think, isn’t it?
I’ve started to play with the board and trying to see how well it runs and here are my first impressions (I will write more later as I will prepare some tests and have the chance to use it more).
What I like about it
- It’s small and light; in fact it is so small that for argument’s sake I have taken one of the micro-SD card boxes that I had lying around (one of those that have a support for the micro-SD card and another support for the SD card adapter) and cut off the lugs of the supports to show that the board fits inside:
(The wire you see there is the antenna – more on this a little bit later. You can also see that the box is a little bit bulged and is not exactly a clean fit – you will most likely not use this solution to case the board – but the point here is to show how small the board is).
- We have 2 USBs available in the pins on the single row; great!
- It has an 8GB eMMC that comes with the OS preloaded. This means you can simply plug the board in the power adapter and will just boot, no micro-SD card needed. There are some issues though that I will discuss later.
- Has nicely separated pins for console where you can connect a UART cable (like this one) and simply run screen from a computer. Combined with the eMMC means you can just plug the board on the UART cable and it will power on, boot and you can configure in minutes.
- Includes an I2S interface. This is very handy if we want to implement microphones and speakers as there are relatively inexpensive chips like this one from Maxim Integrated that provides stereo mic in and stereo power amplifier out (2x3W) in a very small chip. It is notable that Raspberry Pi does not yet support I2S and in a robot having the ability to add so much functionality in such a small add-on board is a very interesting prospect. (I already have a project down the line to deliver such an add-on board.)
- Runs Ubuntu 15.04 straight from the box (this is the version that is provided by the producer) but there is also a Xenial (16.04) that is supported by Armbian – more on this in another post when I will discuss the performance.
- The clock speed is adjustable depending on the load. This has significant impact on the power consumption and on how much heat the processor dissipates. In the early tests you can see how the processor goes from 400MHz to 1.2GHz when you push it with compute intensive tasks. This is a very nice feature. More on this in a future post.
- The list price at the producer is $19.99.
What I don’t like
- I’ve mentioned earlier about the antenna and the wire that was visible in the pictures above. It turns out that although the board has WiFi and Bluetooth support there is no built in antenna. Instead the board has a uFL (or IPX) connector and you need to use an external antenna. I have made some tests without an antenna and you can get some WiFi connection as long as you don’t get further than 3m from your router and you are not asking for too much speed. In real life you will need to use an external antenna and the guys at FriendlyArm have one available to add in your order – but that is obscenely large. Fortunately I found this antenna (it is sold by Adafruit but they might be other branding possible) that is small and cheap and fits perfectly on the board.
You can see bellow a picture with the antenna fitted on the board and it actually doesn’t look that bad! The antenna has self adhesive on the back and you can fix it wherever convenient.
It’s a little bit disappointing that there is no built-in antenna on the board (one of those porcelain antennas for example) – especially that it would have not added to much to the cost.
- The eMMC is actually less useful than I thought. You can indeed boot without an SD card and will work pretty fast but everything on the system boot is locked and frankly I could not find a way to change that. That means for instance that once you boot from eMMC you will not be able to change any files on /etc (or other system directories) to maintain the config files for WiFi (as an example). FriendlyArm suggests that you make an SD card with the image, put it in a computer (Linux or one that can read EXT4 disks) and change the files after which you create another .img file that you then flash on the eMMC using a flasher program they provide. Not exactly a very smooth thing. I can see the eMMC as a good solution when you have a development that is written is stone and not subject to any changes – maybe some IoT type of projects might benefit from this, but for my use is a no go and I have to use an SD card. Not really a big issue but I would have rather have an antenna instead of the eMMC.
- The memory is only 512MB. I understand that the producers have been targeting a low entry price, but it might be interesting to see a 1GB version of this board, even if the price will go up to account for this. I can’t say yet that I have encountered any issues with the 512MB of memory but it is still early days for the testing and I will come back to this in another post most likely.
I really love this board and is already my first choice for integrating in robots. So much that I already have a project in work to provide a 4 channel (that is separate channels!) Dynamixel board plus an IMU-9250 and power regulator on a tiny add-on board. You can see here a 3D impression of how that board might look like when ready:
But more on this in a future post.