I'm glad to see Lego continuing this line of logic - it's amazing what can be done with these mindstorms with the proper tools.
When I was much younger (about 12 years ago), I built a bipedal walker with gimbaled hips and articulated ankles and knees out of two first gen RCX units, and it managed to get me a free trip to ISEF, which in itself was pretty neat. I was using NQC [1] to program them in tandem, which at the time was pretty neat sauce. I've fallen way out of the loop with these, but it seems like Lego is encouraging good work that removes a lot of the stumbling blocks you'll see when using more bare-bones components like raw servos and arduinos.
My only wish was that Lego would start selling 'engineering' sets for those of us that grew up with them to use for prototyping - I got through a few hairy sessions in college using the tub I'd kept from when I was younger, but with the sets these days there's a lot of stuff you don't need. Something like the fischertechnik toys but with lego's distribution and selection of parts. Alas.
Tetrix with an NXT brick is the basis for FIRST Tech Challenge robots, if you want to see some examples of what high school age kids build with it.
http://www.usfirst.org/roboticsprograms/ftc
I've been looking at this system too. http://matrixrobotics.com Interfaces perfectly with Lego and is more Lego like in the way you can build things. Their holes line up perfectly with Lego holes. Pretty cool.
NQC was my first real world experiences with coding. I remember making a printer with one of the original RCX. It consisted of three motors, two rotation sensors, a pen, and a computer-side script to turn images into black and white "halftone".
The output was predictably bad, but I had a lot of fun making it.
Thanks guys - I'd forgotten about lego education, as I'm unfortunately outside of the range of mechanical prototypes these days (ended up as a materials engineer). However, it'd be better if lego publicised these some more!
So... back in the day I cross-compiled GCC to write code for the original Mindstorms in C (and to some extent, in C++). That wasn't easy for my early-teen self, but it was possible.
To which degree is it possible to program Mindstorms NXT or EV3 in a "real" programming language?
I teach RobotC to a FIRST robotics team, I really dislike it sometimes. The IDE is pretty bad, and only runs on Windows, and up until recently all variables in a RobotC program would implicitly be global. They fixed that with 3.5, and are aiming towards a more ANSI-C compliant implementation, but I still find it a pretty frustrating platform sometimes.
There are Python bindings to communicate with the NXT brick ... aptly named PyNXT. The python doesn't run directly on the NXT brick so there is some additional latency that one has to deal with.
I've used it on the RCX a year or five ago and back then leJOS didn't have any proper garbage collector implementation nor a proper way to free memory explicitly. Due to all my buddies only having Java knowledge we were forced to use leJOS and I ended up still having to write some C code and cross compile it in the leJOS JVM to get that all to work. A bit of a pain but fun and I learned lots.
Was that using brickOS (previously legOS)? I always stuck to NQC since it was powerful enough for my (likewise) early-teen self but worked with the stock firmware.
I did a lot of stuff with brickOS when it was still legOS. I started out in NQC, but it just wasn't fast enough. I had a two-wheeled robot that did dead reckoning by counting wheel revolutions to figure out where it was in the room. NQC took about one second per navigation update. My robot was kind of hilarious running NQC, because it would jump forward and then stop for a second while it calculated the navigation update, then jump forward and stop again, etc.
Using native C, I got the navigation update cost down to 10ms, allowing for smooth driving without having to stop and wait for calculations.
Having played around a bit with the original 1998 Mindstorms hardware, I found that the main factor restricting what I could build was the limit of three input and three output ports. Its a bit disappointing to see that the EV3 has added only one more input and one output port.
If Lego had made the physical connectors smaller then I don't see why eight or more sensor inputs couldn't have been allowed. I appreciate that outputs are limited by the on-board power, though.
A lot of that I think is to keep the complexity of a single unit fairly low. On the older models, you could set up IR communication without too much hassle, and it looks like these new ones can speak over bluetooth and wifi. I'm not sure if they support it out of the box, but I'll bet an API is forthcoming for microsoft's robotics studio or similar, and will make coordinating multiple units a bit simpler.
There is actually an arduino shield that let you integrate arduino with the Lego microcontroller, so you can expand the number of inputs and outputs, though this is mostly a transition from lego to arduino, because at that point, you better off doing everything through an arduino (except that you get to use your lego motors and sensors with it this way). Here is a book that teaches about how to do it and talks more about the arduino shield:
I don't think they added any sensor ports - still just the four. But now it comes with a gyro sensor built into the brick.
The 4th motor port is huge for some things. It was almost impossible to build a holonomic drive with only 3 motor ports. Now you can have two drive motors and two for manipulators, so you can have a simple articulated arm with a motorized grabber. But I'd sure love to have six of each port.
This looks fantastic. My main limitation so far has been memory, but 16 MB ought to be enough for everyone (plus there's an SD card slot).
While NXC is pretty simple to program in, I would like to see someone port a Go-like language to it. This would be a more natural fit, as the NXT brick works concurrently and NXC has coroutines doing the work.
My only wish was that Lego would start selling 'engineering' sets for those of us that grew up with them to use for prototyping - I got through a few hairy sessions in college using the tub I'd kept from when I was younger, but with the sets these days there's a lot of stuff you don't need. Something like the fischertechnik toys but with lego's distribution and selection of parts. Alas.
[1] http://bricxcc.sourceforge.net/nqc/