Monday, July 31, 2006

ART - Augmented Reality Tagging - Directional ID's

I hope here to provide some fodder for programers and advanced NXT users by introducing Augmented Reality.
A student of mine brought into a computer class a webcam and asked permission to download ARTag a program which uses a regular webcam to recognize the unique identity and orientation of a printed 'tag'. (there are others) These blocky looking shapes can be linked to a 3D or 2D image or animation file which is then draped over the camera. Augmenting reality for example by having chess pieces displayed over a bunch of Tag cards so you could play virtual chess or other war games. Imagine your video of your "OceanOdessey" robot surrounded by virtual fish or have a shark follow it around - instant animation. But for robotics it could do more than just decorate our creations.

Inherent in this process is an ID - a unique identifier that the AR (Augmented Reality) program uses to find the correct Image or construct file. We could easily use this to ID individual robots in a swarm or pack. Tag becomes childs play as one bot anounces I touched some one and I have Bot D2 in my field of view - therefore D2 is it. Even better you can get orientations based on this system. I believe data could be pulled out of this system that gave 3D orientation. Angle with known camera and tag hieghts could be used to determine distance. Directionality of the Tag could allow a bot with a compass to pass on that data to other bots. You could even have no compass. Have one camera watch a bunch of bots and then diseminate info relative to its stationary "NORTH". Bot A3 your heading 96 degress and 5 feet away at 60 degrees, Bot B6 your... etc. telling all of them where they are and where they are going.

A simple video search can turn up many examples of how this is used :

So now to progress beyond simply wrapping our lego beams in illusionary tank armor, we need to have some interested programers see if they can use this technology to get a couple of things avaible.
Pull out the ID and directionality information
Plug it into a BT capable program that calculates the angles to find ranges and relative bearings and then transmits those to the mailboxes of NXT.

The rest of us might have to be patient - but one day we might get to program some very complex interactions.

Comments please on: How can you Help? What would you do with these capabilities?


Thursday, July 27, 2006

Constructopedia for bCat (aka Gupi NXT)

Don't want to read? Skip to the end of this post to find the constructopedia link.

A while ago, I said that my first robot was going to be a Lego version of Gupi, which I called Gupi NXT. Well, here it is.

When we were working on Gupi, we often lacked the actual body (because of various other prototyping activities). To compensate, we had a robot that I’ll call TechGupi. It had the exact same sensors like Gupi, and the identical software did the same things. But it didn’t look like a guiney pig. It really looked more like a cat, if you ask me. Here’s a picture of the TechGupi, next to the Gupi you'll find in the shop (without its fur).

TechGupi is really much easier to copy into Lego than the molded plastic Gupi. So I created bCat, the bNXT Cat. bCat is going to be my robot to test lots of NXT software and artificial intelligence.

The design of bCat is inspired by the TriBot (the robot that is in the quick start manual). I like the TriBot because has a nice wheel base, and a compact design. But there are a lot of things I don’t like about it as well. So I started changing it. And I kept changing. And here’s the result, showing both bCat and TechGupi:

The TriBot knows or sees nothing when driving backward. Backing up is pretty important when working with obstacles, and with other robots in the room. So I wanted bCat to have a rear bumper.

I intend to drive the robot through narrow spaces (like a maze). When the TriBot turns in place, the rear of the robot can easily bump into the wall without the robot having a clue. Because of this, there is no way the TriBot can navigate a reasonably complex maze. It would just get stuck trying to turn, or need to use brute force (trial and error). Personally, I prefer my robots intelligent. So I wanted to detect when the left or right side is bumping into the wall while turning. bCat has a special bumper that can detect collisions at the left or right. Since the NXT only has 4 sensors (for now), I built a special kind of bumper that combines the left, right and rear bumper detection into a single touch sensor. Because bCat knows whether it is driving backward, turning left, or turning right, it can interpret the signal (and if not, it can always try a few different options and detect when the bumping stops).

The grasping claw is pretty neat on the TriBot, but I had other plans for that last free motor. I turned the non-driving front motor by 90°. This way, it becomes a real neck, allowing bCat to look left and right. Curiosity killed the cat, and one of the main purposes of this robot is to explore its environment, and navigate it intelligently.

But I wanted to try out whiskers as well. Since the number of sensors are limited, I figured that the front motor could double as whisker sensor. If anything hits the left (or right) whisker, and assuming the front motor is not powered, then the head will be pushed to the left (or to the right). So, using these whiskers, we can detect obstacles left or right.

Because the whiskers are rather rigid, they also serve as collector arms. By powering the neck motor, the robot can easily collect balls and push balls. It can even kick a ball by backing out slightly and turning its head rapidly. Kicking with wiskers, it’s not entirely true to nature but still a lot of fun.

The rest was rather straightforward. The Ultrasonic is mounted on the head, allowing it to scan from left to right, and build a “map” of the world (notice that all ultrasonic sensors are very noisy, this is not a Lego problem). The color sensor is pointing at the place where a ball would be in the center of the whiskers/arms, the microphone is pointing forward. Oh, and I like legged robots, but they often move forward frustratingly slow. So for bCat, I added simulated moving legs. They are just for show, the robot really uses the rubber tires.

The robot is quite versatile. I also built a version which used more than a single NXT set, and had no less than 7 sensors in its head, and 2 NXT bricks on its back. The double-NXT-set-bCat made the maze navigation substantially easier. Plus the extra free motors are sources of endless inspiration. But I’ll get back on that later (notice that childhood-like addiction to Lego is back?).

Here is the constructopedia for bCat. By the way, this is also a first experiment toward building a (wiki-)constructopedia. Any help from ASP.NET developers to help build a wiki-constructopedia would be very welcome (no discussions on which web technology is better please).


Tuesday, July 25, 2006

Intermediate Wishlist

Just in case the right people are reading this post, here's my current wish list for upgrades and new features. I hope you chime in, and leave your most wanted features and parts in the comment section.


1) A "COM" action block and a "COM" sensor block that allows to communicate directly to the communications port on Bluetooth, and bypasses any mailbox system. The mailbox is great between NXT sets, but not so great when communicating with some other devices.

2) The ability to receive from the Ultrasonic sensor without sending the US blip (i.e. turn the transmitter off). This will help a lot in situations where multiple NXT bots are in the same room. Turning the US transmitter off allows to distinguish between your own US and some other robots US. It would also be a great way to get a general direction on where the other robot is, which would be nice to build swarm behavior. It is possible that the US is hardwired to transmit and receive at the same time, and that the firmware cannot change this behavior.

3) A "battery" sensor block that allows the software to detect the current level of the battery. To enable the robot to come home when battery is almost empty.

4) An method to communicate with I2C devices directly. I'm not exactly sure how the NXT port works, but I believe Brian Davis referenced that the NXT sensors communicate using I2C. If this is the case, then perhaps it would be nice to have an I2C action block and a I2C sensor block, that allow to connect up I2C parts, which can be found everywhere.


1) Documentation on how to extend the NXT-G. This would allow the community to create plug-ins that bring new features to the NXT-G, mostly in the form of online content becoming available within the NXT-G.

2) Every proporty can be seen in a property window. Currently, the property window only shows a subset of the actual properties, and many properties can only be set by drawing data lines. It is often not clear if the data line has connected to the right points. A property window, even if read-only, would help a lot.

3) An object browser. This allows to select the item from a list instead of graphical. In particular, I'd like the ability to select data lines as items with at least two properties (connecting to ... and ...).


1) Serial port. It may seem incredibly easy relative to the other parts that people at HiTechnic and Mindsensors are building, but just a simple serial port to NXT sensor connector bridge would make a lot of difference. I could revive some of my old robots with a NXT brain, and there are plenty of robot parts & sensors to connect to RS232.

2) Multiplexer. Ports you can never have enough off. HiTechnic will introduce a multiplexer, so this is really just a matter of waiting.

3) Tilt sensor (accelerometer). Can't build a real biped without it, and many other cool robots need it too. There are tilt sensors the connect to RS232, but nothing beats a real Lego part.

4) Compass sensor. One from Mindsensors is already available for purchase right now, and HiTechnic has announced a compass as well.

4) Stereo hearing. Can't build this in software, the speed of native electronics is needed to distinguish the minute changes in timing.

5) Object recognition camera, like the POB-EYE (from POB Technology). Could Lego or a part builder please go talk to these guys, and make turn it into an easy-to-use Lego part? It already features an I2C bus, and currently sells for 179 EUR. OK, so it would be a really expensive part, but it is really cool to have a Lego robot that does object recognition and motion tracking.


Bluetooth is "busy"

One of the things I have not been able to get up and running, is the Bluetooth connection to my PC. I'm wondering if anybody out there can help me on this one.

Let me first share a few things I did find out.

First, on the Bluetooth menu, make sure Bluetooth is turned on in the NXT brick.

Now we'll try to connect to the NXT using Windows XP Professional SP2. Using "Start > Connect To > Bluetooth Network Connection" does not work, because the NXT does not support the higher level Bluetooth functionality. Connecting from the NXT to the PC also doesn't work, because SP2 by default turns Bluetooth auto-discovery off. To turn auto-discovery on, navigate to "Start > Control Panel > Bluetooth Devices". Under the tab "Options", you'll find a checkbox to turn on Discovery. From the "Devices" tab, you can "Add" devices, and this finds the NXT perfectly. Type in the same passphrase, and you have a connection.

Once auto-discovery is turned on, you can also do the connection from the NXT menu, and it returns the name of the PC perfectly. To program to a connection on the NXT, you need to assign it to a connection (1-3). This is also done from the Bluetooth menu, using the "Search" menu option, but this is where things go wrong. No matter what I try, the NXT brick keeps coming back with the message "line is busy".

By the way, I have no problem connecting my Bluetooth phone (Sony Ericsson T610) to the NXT, and assigning it to a mailbox. I also have no problem connecting the phone to the PC.

To eliminate any already solved firmware issues, I have upgraded my NXT to 1.03, which worked immediately without problem. But it didn't solve the Bluetooth issue.

Anybody out there have any idea's on how to solve this?


Monday, July 24, 2006

Biped Seeks Cables

Here’s the first robot I tried to built. This biped has four degrees of freedom per leg. It has an ankle, knee, and two degrees of freedom in the hip. I took a design where the actual load on the motors while standing up would be as low as possible. Here’s a picture of the biped sitting on a chair.

first biped bNXT

As you can see, the robot is quite large. My main problem with this robot is that I don’t have cables long enough to connect the tip of the toe with the controller at the hip. That’s really too bad. I’ve been hitting the “no cables” nail quite a few times before, but this is really a nice demonstration why a crimp tool makes more sense that predefined lengths of cables.

In later robots, I found that I would have preferred to use more ultra-short cables.


NXT Arrived in Ypres

On Thursday, I came home from work and there it was: the package containing 3 Lego Mindstorms NXT sets. Thanks to a friend in Austin, Texas, who I won’t name to spare him from similar requests by too many others... It just so happens that Friday (21st of July) is the Belgian Independence Day, so I had a long weekend to try them out.

Here's NXT at the city gates of Ypres:

NXT in Ypres


Friday, July 21, 2006

Hello Modular Programing

Hello, Ladies and Gentlemen, Boys and Girls, Robots and Droids and everyone else...

My name is Drew Stevenson, as Filip said I am a teacher who is very interested in Mindstorms both professionally and as a hobby. I have worked with NXT for many years, but I found alot had already been done by the time I started. Now I hope to contribute alot to basic and advanced users. I like to focus on ideas. If I present a robot its likely to be to show some ideas for modular incorperation in your own works. (much like DAZLR where the main focus was the shooting mechanism not the drive system - Thanks Brian Davis ).

To start off my contributions I'd like to (re-)introduce the idea of Modular programing. With the NXT's included software it is very easy to program seperate parts of a complex program and test them individually and then re-incorperate them into a larger more complex program. Those of you who might try to program complex routines are likely to run across bugs. These bugs can be either errors in the coding for the malfunctioning function or some conflict with another piece of code. It is hard to diagnose in mind sight. By building Blocks of Code which can be quality controled (like real lego bricks) and then snapped together, wired up and then tested as a whole. This can save lots of frustration.

Similarly I have come to realize that stock testing routines can be very helpful. I am working on a Sphere launching robot and my feed mechanism wasn't working right - it was jamming. I needed to troubleshoot. Was the problem a lack of motor delay (to allow a sphere to load) or was it motor speed? What motor power works best? All of these questions could have been tested by trial, reprogram, load, trial reporgram load, t,r,l.... etc. Even with Bluetooth this can be annoying.
Instead I made a program that would use those lovely NXT buttons to alter the power or delay time as the program runs. Up & down Value (also displayed) and enter for begin X rotations. Initially this program was just for motor C and one variable. I am working on an "introductory" interface which will allow a user to pick which motor or motor combos to test, what variable to alternate (the rest will have defaults) so that this program which is now going to take a while to make will be one stop shopping for 80% of my testing needs. Build a model, determine quickly the best settings for motors to do the job then program the job into an enviromentally aware robot.

Oh by the way I am loving the usability of the NXT buttons. Check them out - they can be found by placing a generic sensor block and then pulling down the pulldown list of sensor types. Then a new pull down appears to let you choose: left, right, enter buttons. A few switch assemblies and some displays (a few space keys and some mouse work and you can label the keys) and you can get an interactive display. My first experiments with this saw my Future wife answering a multiple choice "do you love me" Lots of happy faces and Horray!s when she pushed Yes. Of course we had to try no later for kicks. But I didn't put much effort into that one - just a sad face.

Please leave comments and descriptions of any programs you regularly reuse and think the rest of us should have in our back pockets.

Thursday, July 13, 2006

New Contributor - Drew Stevenson

I'd like to welcome Drew Stevenson as co-author on the bNXT blog. Drew is a teacher and a big Lego fan. Drew may already be familiar to some of you as a regular comments writer on various Lego NXT sites.


Saturday, July 08, 2006

NXT Wiki launched

A new wikipedia dedicated to the NXT is launched: It is unclear right now who is responsible, and what the future of the site will be. If you read this and you know more, please leave me a comment! in bNXT Digest

I have added to bNXT's aggregated RSS. In case you don't have a RSS viewer, I also run a handy preview page. The aggregated RSS now contains (in alphabetical order):
I also display the last 8 messages from any of these blogs on bNXT's home page.

Notice that all the mentioned feeds are in English. bNXT also has Dutch aggregated feeds, German aggregated feeds, Portuguese aggregated feeds, and Spanish aggregated feeds.

If I am missing any blog or RSS source that is about NXT (in any language), please let know! And welcome to Eric over at Your site looks great.

Monday, July 03, 2006

The “NXT” Transformer Part

Update: Changed point 2 and dropped the conclussion

Lego offers the RCX transformer for the NXT. Before you buy it, it might be good to know that:

  1. You can only use the transformer with the rechargeable battery, since the NXT Brick itself does not have a socket for power. So you cannot use the transformer with a standard NXT Retail Set, unless you also buy the rechargeable battery.
  2. The rechargeable battery does NOT come with a transformer of its own.

Lego Education Raises NXT Prices (Creates After-Market?)

Last updated on July 8, 2006

Last Friday, the same day that Jim posted this, Lego Education announced some pricing changes on their blog. Unfortunately, it is mostly bad news, with price increases for educational users. By the way, there are some errors either in the blog or in the online pricing: perhaps is it might be good to order your “NXT Servo Motors” now.

There is also some confusion on the software site licenses. The Lego Education shop indicates the NXT Software Site License here, but you’ll notice both the part number and the price is for the NXT Software Classroom License. I assume this is just a typo by the Lego Education people (“site” instead of “class”).

UPDATE: Lego has since announced that this is no typo: the classroom and site licences have been merged as advertised.

The really bad news is the item that isn’t on the list: a crimp tool. In the past, Lego has said they used connectors with unusual latches to the right for security reasons. That way, you couldn’t mix up Lego cables with telephone cables. But now, you have to wonder. They are charging approximately $ 3,3 per cable. But on their own NXT demonstration stands, quite a few cables had broken latches. Without those latches, robots are unreliable at best. It makes you wonder how many cables a teacher is supposed to buy. Looks like Lego is trying to create an aftermarket, much like printer companies make their real money on the ink.

The great thing about these new NXT connectors is that they are much easier to build than the old RCX cables. Provided that you have a crimp tool. Perhaps Lego is planning a crimp tool, but it would make a lot of sense if they provided some sort of announcement on that.

Below an overview of the price changes. Notice how the price changes are not all over the map. The Lego Education blog cites “some unforseen rises in the cost of materials”, but looking at the price changes, that doesn’t make any sense. How can the bill of materials for every NXT part of the LME Base Set become more expensive, but the LME Base Set itself stay at the same price? The increases are only on those parts that you are likely to order after you have bought the set, another sign of Lego trying to get more profit from the aftermarket revenue.

Item #






LME Base Set




NXT Intelligent Brick



+ $9


NXT Rechargeable Battery



+ $2






NXT Servo Motor


$23 ($18 ?)

+ $5
(+ $1)


NXT Touch Sensor



+ $2


NXT Light Sensor



+ $2


NXT Sound Sensor



+ $2


NXT Ultrasonic Sensor



+ $2


Bluetooth Dongle



+ $3


Education Resource Set




Education NXT Software (single license)




Education NXT Software (classroom/site)




Education NXT Software (site license)


same as classroom



ROBOLAB 2.9 Upgrade (single)




ROBOLAB 2.9 Upgrade (site)




Robotics Engineering I: Introduction to Mobile Robotics




Robotics Engineering II: Guided Research




Robotics Engineering I GS Pack




Robotics Engineering II GS Pack




NXT Value Pack (12)




NXT Value Pack (8)




NXT Value Pack (4)




Conversion Cable (3 pk)




.2M Connector Cable (3 pk)




.35M Connector Cable (3 pk)




.5M Connector Cable (3 pk)




NXT Poster Pack (similar to this)



+ $5 from RCX