1 / 45

ARM from NXT NXC Programming

ARM from NXT NXC Programming. Overview. NXT Hardware Programming Languages Using the NXT Demo Robots. NXT – What you see. 4 Inputs (digital & analog) 3 Outputs (support for encoders) Screen (100x64 pixels) 4 Buttons Sound USB and Bluetooth. Processors. Main processor:

edan-wade
Télécharger la présentation

ARM from NXT NXC Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARM from NXT NXC Programming

  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/ - 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. 3rd Party Sensors • Prices from $30 to $50 (so far) • HiTechnic (www.HiTechnic.com) • Packaging like LEGO sensors • Authorized by LEGO • MindSensors (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 L,klk" 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?

More Related