COMP 150-07: Intelligent Robotics

Computer Science Department, Tufts University

Mathematics resources

We will do a review of basic linear algebra (vectors and matrices, geometric transformations) in class when it becomes necessary for the syllabus, but unless you have great facility with mathematics, you should probably make sure you have seen at least the basics before. Here are some resources.

Things to have a vague notion about (we will be refreshing our memories in class):

LEGO resources

LEGOs at the CEEO

To check out a LEGO NXT kit, come to the lab (CEEO, Curtis Hall) during class on Tuesday, Jan 20th.

Your kit comes with a rechargeable battery but no charger. When your battery runs out, exchange it for a freshly charged one at the CEEO during work hours (M-F, 9am-5pm). Keep your battery charged longer by removing it from the NXT brick when not in use. You can also leave your NXT brick to be recharged at my office during office hours, but charging takes a long time. Coordinate the use of NXT bricks within your team to prolong battery charge.

NXT internals and LEGO design

A great reference on The Art of LEGO Design by Fred G. Martin, originally published in The Robotics Practitioner in 1995. It's full of construction tips and tricks.

NXT motor internals by Phillipe Hurbain.

Example chassis designs for planar mobile robots:

NXT programming resources

We will be using the NXC (Not eXactly C) programming language (and the assembly-level Next Byte Codes or NBC) to program the NXT brick, as it is free and open-source. However, it is in a beta release, so you may encounter problems. Do not dispair, document the problem and see the TA.

How to install and use NXC

On Windows

First, you will need to download the Mindstorms NXT Driver v1.02 from the LEGO website, unzip it into a known locaiton and install by running the included setup utility. You will need to restart your computer after this.

The driver is necessary for your machine to talk to the NXT brick. Connect the NXT brick using the USB cable and look under your computer's Device Manager. Is the brick recognized? If not, run through the steps explained in the NXT Fantom Driver Help document from the BricxCC website.

Now, download the Bricx Command Center programming and debugging environment, which is available for Windows only and works with NXC and NBC. Download the bricxcc_setup_33719.exe file from Run the setup file, choosing a typical installation.

When runing BricxCC for the first time, choose NXC as your language, NXT as your brick platform, USB as your port, and standard firmware.

On Mac OSX or Linux
  1. Go to, click on "Beta Releases".
  2. Choose your OS and download the corresponding latest release.
  3. Decompress the file by running gunzip your_file.tgz then tar -xvf your_file.tar
    Copy the nbc and nxtcom files to /usr/bin (assuming you have root privileges).
  4. To compile with the command-line interface: nbc your_program.nxc -O=your_program.rxe (this is a capital letter O, not a zero).
  5. To download to the NXT brick using a USB port: nxtcom your_program.rxe (this assumes you have one NXT brick connected to one USB port).

On a Mac with Bluetooth capability, you can use the NXTBrowser Bluetooth connectivity application by Carsten Mueller, which enables you to upload and download programs and files to the NXT brick.

Tutorials and User Manuals

The NBC/NXC website contains links to documentation and sample programs that you should look at!

Enhanced firmware for NBC/NXC use on NXT

Enhanced firmware exists for use with the NBC/NXC language on the NXT, that supports multi-dimensional arrays and native wait. You can install it on your brick with the Download Firmware tool using the Bricx Command Center (you will have to find a Windows machine to install the BricxCC on for that).

Other Programming Languages for the NXT

We will not be using these in class, but there is a ANSI C/C++ platform for the NXT called nxtOSEK (available for Windows + cygwin and Linux), as well as a number of other programming languages.


Simple mini-guide to the command-line interface in Linux. Mac OSX is built on top of Linux, so this is also useful for the Mac OSX Terminal program.