Presentation is loading. Please wait.

Presentation is loading. Please wait.

Using the LEGO NXT March 2007 David Schilling Gus Jansson.

Similar presentations


Presentation on theme: "Using the LEGO NXT March 2007 David Schilling Gus Jansson."— Presentation transcript:

1 Using the LEGO NXT March 2007 David Schilling Gus Jansson

2 Overview NXT Hardware Programming Languages Using the NXT Demo Robots

3 NXT – What you see 4 Inputs (digital & analog) 3 Outputs (support for encoders) Screen (100x64 pixels) 4 Buttons Sound USB and Bluetooth

4 Processors Main processor: Atmel 32-bit ARM processor, AT91SAM7S256 256 KB FLASH 64 KB RAM 48 MHz Co-processor: Atmel 8-bit AVR processor, ATmega48 4 KB FLASH 512 Byte RAM 8 MHz

5 Bluetooth and USB communication Bluetooth wireless communication CSR BlueCoreTM 4 v2.0 +EDR System Supports the Serial Port Profile (SPP) Internal 47 KByte RAM External 8 MBit FLASH 26 MHz USB 2.0 Full speed com port (12 Mbit/s)

6 Graphics, Sound, etc Display 100 x 64 pixel LCD black & white graphical display Loudspeaker Sound output channel with 8-bit resolution Sample rate of 2-16 KHz 4 Buttons

7 Misc. 3 output ports 6-wire interface supporting input from encoders 4 input ports 6-wire interface supporting I2C as well as analog 1 high speed port, IEC 61158 Type 4/EN 50170 compliant JTag debugging pins if you want them LEGO has released technical specifications for all this

8 Online Documentation http://mindstorms.lego.com/http://mindstorms.lego.com/ - click on “NXTreme” button for information and downloads for advanced users Open source firmware!!! SDK – Software Developer Kit HDK – Hardware Developer Kit BDK – Bluetooth Developer Kit

9 Motors Biggest improvement over RCX – rotation counters built in 360 counts per rotation They are relative, not absolute positions Maximum speed is approx. 200 RPM Motors are much stronger than the other, older LEGO motors

10 Sensors Digital ultrasonic sensor (3cm-100cm) Light sensor – can control LED Sound sensor – DB and DBA Touch sensor - binary

11 Conversion cable LEGO has a conversion cable that allows you to use the sensors and motors of the RCX on the NXT And vice versa, but you can’t use the ultrasonic sensor on the RCX, and the motors won’t have encoder support

12 Wires The LEGO NXT wires have odd ends (like the DEC RJ-12 connector, but backwards) Wiring diagrams: Analog input

13 3 rd Party Sensors Prices from $30 to $50 (so far) HiTechnic (www.HiTechnic.com)www.HiTechnic.com Packaging like LEGO sensors Authorized by LEGO MindSensors (www.MindSensors.com)www.MindSensors.com Circuit boards with connectors

14 HiTechnic Sensors Color Sensor Compass Sensor Acceleration Sensor More coming… Prototype board Gyro sensor (analog, not I2C digital) IR Link (to talk to RCX and other LEGO IR devices) IR Seeker (for robo soccer, for example) No-contact touch sensor (electrostatic sensor) Motor Multiplexor Sensor Multiplexor

15 MindSensors Sensors Acceleration Sensor RCX to NXT communications link PS2 controller interface Motor Multiplexor Magnetic Compass Pneumatic Pressure Sensor

16 Bluetooth One way to download programs Can send files from one NXT to another Allows up to four NXTs to talk with each other One master, three slaves Can use a phone as a remote control for your NXT Other devices may be supported

17 Programming Languages NXT-G code NXC (and NBC) Robot C pbLua Java and others

18 NXT-G code LEGO’s development environment Graphical programming Based on National Instruments’ LabView Great for quick programs Wonderful for kids to use … but a real pain for old geezers like me who grew up with text programming languages

19 NXC (and NBC) NXC (Not eXactly C) is a language similar to NQC, which was the most popular way to program the RCX Built on NBC, the Next Byte Code ‘assembler’ Uses the built in firmware, and p-code system

20 NXC uses BricxCC Reasonably stable development environment Provides support for all LEGO robotic platforms Free!

21 Robot C Carnegie Mellon’s programming language for various robotic platforms (including VEX, RCX, as well as NXT) Requires new firmware Not free (free trial, $30 download)

22 pbLua New firmware, and language Small portable language for embedded systems By Ralph Hemple, the author of pbForth for the RCX Compiles on brick! Use any terminal device to talk to it

23 Other languages Java and several other languages are reportedly in the works as well MS Robotic Studio also supports the NXT Download a small client program to NXT Actual control is on a PC

24 Programming with NXC Assuming you are comfortable with C… How to use the motors How to read the sensors Threading model

25 NXC Programs NXC is based on C Restrictions because it’s based on the built-in P-Code system There’s no stack Limited memory Limited number of tasks (256) And subroutines, which are also ‘tasks’

26 NXC program skeleton #include "NXCDefs.h" task main() { }

27 NXC Sensors #include "NXCDefs.h" task main() { SetSensorType( IN_1, SENSOR_TYPE_TOUCH ); SetSensorMode( IN_1, SENSOR_MODE_BOOL ); }

28 NXC Sensors #include "NXCDefs.h" task main() { SetSensor( IN_1, SENSOR_TOUCH ); }

29 NXC Sensors To read a sensor use x = Sensor( IN_1 );

30 NXC Sample program #include "NXCDefs.h“ task main() { SetSensor( IN_1, SENSOR_TOUCH ); while( true ) { if( Sensor( IN_1 ) ) { PlayToneEx(440, 100, 3, false); TextOut( 0, LCD_LINE1, "TOUCHING!"); while( Sensor( IN_1 ) ) ; } TextOut( 0, LCD_LINE1, "---------"); while( !Sensor( IN_1 ) ) ; }

31 NXC Motors Simple motor commands are available OnFwd(), OnRev(), Off(), Float()

32 NXC Motors To use the built-in rotation sensors, you need to use the new motor commands Easiest to use is RotateMotor()

33 RotateMotor RotateMotor( port, speed, angle ); port is OUT_A, OUT_B, OUT_C, or combinations such as OUT_AB, OUT_ABC speed is a number -100 to 100 angle is the number of degrees you want the motor to turn (positive or negative)

34 Mimicking a Servo Motor Read the current motor angle Current = MotorRotationCount( OUT_A ); Calculate how far you need to turn Delta = Target – Current; Turn that amount RotateMotor( OUT_A, speed, Delta );

35 Displaying Text The LCD display is useful for Debugging Setting parameters Runtime messages Graphics Games … and more

36 Displaying Text TextOut( x, y, text ); NumOut( x, y, number );

37 LCD display The origin is the bottom left So TextOut( 0,0, “hi” ) will display in the bottom left corner Use the LCD_LINEn macros if you like to make it easier

38 Text Example y = 42; TextOut(0, LCD_LINE5, "Answer:" ); NumOut( 8*6, LCD_LINE5, y ); // characters are 6 pixels wide

39 Graphics There are also commands to draw lines, circles, rectangles, and set points You can display bitmaps from a file RIC files – contain drawing commands One problem is there isn’t an easy way to clear areas of the screen It’s easy to clear the whole screen You can display a 1x1 blank bitmap

40 Tasks and Subroutines Multiple tasks are possible, but don’t work like you might expect Scheduling is different – tasks start when a ‘dependant’ task finishes There is no easy way of stopping a task Use Precedes() or Follows() in a task to define task dependencies

41 Tasks task FooTask() { // will start executing when main() finishes } task main() { // program starts here Precedes( FooTask ); } task BarTask() { Follows( main ); // will also start executing when main() finishes }

42 Subroutines Essentially a task that can be called It suspends the calling task until it returns Don’t use task keyword to define these Can pass in parameters or return a value

43 Subroutine Example void TestSub( int x, int y, short i ) { x = y + i; } task main() { TestSub( 1, 2, 3 ); }

44 NXC Help Preliminary help file is a PDF There are many samples and a tutorial online

45 Demo Robots Dog 6-legged walker Crane Crate Dump truck Others?


Download ppt "Using the LEGO NXT March 2007 David Schilling Gus Jansson."

Similar presentations


Ads by Google