8
$\begingroup$

What can an Arduino board such as the Uno really do? Of course simple things like controlling a couple servos is very easy for it. However, I don't think an Uno board would be able to preform real-time 3D SLAM from point cloud data gathered from a Kinect sensor on a mobile robot, right? If the robot had any speed at all the Arduino wouldn't be able to keep up, correct? Could it do 2D SLAM while moving and be able to keep up? What about taking 1/10 of the points from the Kinect sensor and processing only those?

Basically, what are some examples of the resource limitations of such an Arduino board?

$\endgroup$
6
$\begingroup$

It depends - on the number of landmarks in the feature map, and how much time you're willing to invest tuning the algorithm for speed, and a number other parameters which you may or may not be able to control for a given application.

Edit: As a thought experiment, I think it would theoretically be powerful enough to do extremely simple near-real-time SLAM in a very contrived environment, such as the center of a gym floor with a few cones set out. It could take a single scan line from the Kinect and update a low-resolution, 2D internal map, updating periodically (say every 10 seconds).

The Uno's 2K RAM would probably be a deal breaker, but the Mega might have enough (8K) and there is hack for upgrading it to 520K.

In practice, doing floating point matrix calculations on an 8-bit processor is not a good idea.

$\endgroup$
  • $\begingroup$ Ok, so you're saying that even attempting 2D SLAM with the Arduino is a going to be a bit difficult. Thanks. $\endgroup$ – golmschenk Nov 27 '12 at 16:20
6
$\begingroup$

The Arduino has always been horifically underpowered.

You can get a stack of stm discovery or other ARM based dev board for the price of a single arduino, and each one of those boards will be orders of magnitude more powerful than the arduino.

The ubiquity of the arduino has also hampered many projects that should have known better. Quadrotor stabilization and Reprap style g-code execution are two major areas where the arduino has been forced well beyond its capabilities and it shows. (The ardrupilot project needs three arduinos.)

Hopefully the teensy/due/leaflabs stuff will help make ARM development more friendly. Many of the newer/better projects such as smoothie, openpilot etc have also made the jump.

$\endgroup$
  • 1
    $\begingroup$ Agreed, without a doubt! I bought a simple robotic arm at an old electronic store, vintage 1980. The controller has 19MHz, compare to Arduino's 16, and 3X the RAM! From 1980! The sad thing is, people respond to the allure of the tiny blue board. Arduino is alot like Java - cool for what it is, but underpowered and overused beyond any reason. $\endgroup$ – Chris Nov 28 '12 at 8:12
  • $\begingroup$ @Chris, In all fairness, I doubt that robotic arm cost only $24 in 1980 (it's hard even today to find one that cheap that's not complete junk). I also doubt it had a huge community users and enormous library of free software available for it. There's more to the value of hardware than just it's clock speed and memory. Lot's of products have failed because they were overpriced while underused, even if they were technically superior. $\endgroup$ – Cerin Apr 11 '15 at 0:11
4
$\begingroup$

The raw specs on the Arduino's microcontrollers list clock speeds as high as 16 or 20 MHz -- around the speed of an mid-1990s Intel 386 computer.

That sounds promising, until you consider the fact that it doesn't natively support floating point math -- the "FLOPS" measurement by which most CPUs are compared. I've seen some arduino demos that calculate the speed of the Arduino at about 60 kFLOPS, whereas the Intel 386 at 20 MHz does something like 170 kFLOPS (according to this page).

Also, it should be noted that the Arduino does 8-bit math and the 386 is doing 16-bit and 32-bit math. A DSP board might be more suited to that kind of data acquisition, but I'm in no position to advise there.

Getting that code to work in such a constrained environment as the Arduino might be possible, but it will take a lot of optimization. You'd be better served by using a more powerful CPU to implement those algorithms; make sure that they work on the powerful CPU, then attempt to optimize for the weak CPU.

$\endgroup$
  • $\begingroup$ But you have to remember, the Apple II had a 6502 (8-bit, 1MHz)and 16K RAM. AppleSoft BASIC was floating point, and its "killer app" was VisiCalc link. You can do quite a lot with limited hardware, when that's all you've got. (and the whole industry is behind it) $\endgroup$ – Paul Williams Nov 27 '12 at 16:29
  • 1
    $\begingroup$ You are comparing a microcontroller with a microprocessor. 386 does not have a six channel PWM hardware generator, a ADC, an analog comparator, its two devices meant to two different works. Also if someone needs high float-point throughput they will use a probably a unit with FPU, but I made much projects that don't needed float-point, and in some cases this is a question of optimization. The ATMega goes nearly 20MIPS at 20Mhz while the 386 goes 9.9 MIPS at 33 MHz. $\endgroup$ – Diego C Nascimento Jan 24 '14 at 19:43
  • 1
    $\begingroup$ This question is about SLAM, so FLOPS is the only relevant metric to use in comparing these 2 processing units. $\endgroup$ – Ian Jan 25 '14 at 20:25
2
$\begingroup$

For the price of an Arduino Uno, or less, a recent alternative is the TI Stellaris Launchpad at $12.99 (including world-wide FedEx): Arm Cortex M4 with an excellent built-in library set called StellarisWare that resides on ROM - so your Flash and RAM remain free for application use.

Massively higher computational power than the Arduino Uno, but so far without the ubiquitous community participation that Arduino has garnered.

$\endgroup$
1
$\begingroup$

It's true that the Arduino is started to look underpowered now that people are by Raspberry Pis, but I think it depends more on the application. I like the arduino because the code is really easy to write, it's really easy to flash new code, and really easy to hook up new sensors. I wouldn't use it for a vision application like kinect or webcam stuff, but it can do a whole lot more than talking to servos. A good example would be a segway type application; the arduino is ideal for talking to accelerometer sensors, doing some 3D spatial math, and then talking to servos to keep things balanced.

$\endgroup$
  • $\begingroup$ I think it's important here to compare apples to apples here and compare the Uno's ATMega chip to other microcontrollers. The 700MHz ARM in the Raspberry Pi is an orange. That being said, the ARM Cortex-M3 chips in the Arduino Due/LeafLabs Maple and the PIC32 chips in Digilent chipKIT boards etc all completely blow the Uno out of the water computationally with the same programming environment. $\endgroup$ – Joe Baker Nov 30 '12 at 10:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.