I have been dissapointed recently by the Lego Mindstorms NXT software. Originally when I first played with my friends NXT robot and the software that came with it, I was impressed with it’s simple appearance, ease of use and the potential for quick robot prototyping. In general this is still possible but recently I have been trying to create routines with the software that are a little more complex than simply moving our creation forward and turning around when it comes across an obstacle, and this is where the software has started to faulter.
My main problem is that the interface responsiveness becomes very sluggish after a handful of building blocks have been added, to the point that it is almost unbearable. On a Windows machine that easily meets the recommended requirements (albeit a little old these days) this isn’t particularly good in my opinion and we have had similar poor performance results when using a pretty well-specced Apple Mac too.
In addition to the performance issue the scheme layout continually re-organises itself according to where you are placing the blocks which in itself seems to slow things down further and causes no end of frustration when blocks don’t get added to the correct place in the scheme or even worse, end up not attached at all.
There is a feature called ‘My Blocks’ which seems to be for wrapping a set of commonly used blocks in a single block for use in your schemes, which is rather like adding a function but in this case you cannot pass parameters to it. Although this means it is a bit limited it does tidy up the layout considerably and makes it quick to add large subsets of blocks. However, adding these custom blocks doesn’t detract from the poor performance of the software overall.
The way variables are setup is also not particularly intuitive although easy to do. You have to define them via a menu option which is actually on a per project file basis, very much like global variables that are within the scope of the file you are editing. Unfortunately this means that the variables aren’t available to your custom blocks because they are in a sperate file where the variables are not defined, and therefore you end up removing the custom block because it doesn’t quite do what you wanted.
As a programmer who has had to deal with non-programmer desginer’s a lot I can see the appeal of this type of design-based data-driven interface for building up code, as it is exactly the sort of thing you would want for a script editor in a game development environment. However it strikes me that it takes quite a long time (performance aside) to actually setup the most basic of routines you could write in a programming language with a few lines of code. For example to compare a variable and increment it, you need to setup the variable, add a block to read it, add a block to do the compare, add a block to do the increment with a final block to write it back to the variable. Three lines of code which suddenly takes about ten minutes to achieve, so it would be nice to be able to manually edit the code generated by the interface to speed up the development further.
On the whole the editor does what it says on the tin and you cannot argue that it makes creating a robot childs play, and there are a lot of things going off under the hood with the use of the more complex building blocks, but the level of scope afforded by the editor is fairly lacklustre and leaves a lot to be desired for those of us who are a little more adept with technology.