1 / 34

[Low-level] Programming of NXT Robots

Pavel Petrovič Department of Applied Informatics, Faculty of Mathematics, Physics and Informatics ppetrovic@acm.org July 9 th 2008. [Low-level] Programming of NXT Robots. Welcome to world of LEGO. LEGO Geometry. Low-level Programming of NXT robots, July 9 th 2008 .

Télécharger la présentation

[Low-level] Programming of NXT Robots

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. Pavel Petrovič Department of Applied Informatics, Faculty of Mathematics, Physics and Informatics ppetrovic@acm.org July 9th 2008 [Low-level] Programming of NXT Robots

  2. Welcome to world of LEGO LEGO Geometry Low-level Programming of NXT robots, July 9th 2008

  3. You can build everything... Low-level Programming of NXT robots, July 9th 2008

  4. Programmable LEGO Manually programmable module in 1990 Low-level Programming of NXT robots, July 9th 2008

  5. Programmable LEGO TECHNIC Control Center 1993 Low-level Programming of NXT robots, July 9th 2008

  6. Programmable LEGO Control Lab Building Set 1995 Low-level Programming of NXT robots, July 9th 2008

  7. Programmable LEGO Code Pilot: programmed by sweeping barcodes (1997)‏ Low-level Programming of NXT robots, July 9th 2008

  8. Programmable LEGO LEGO Mindstorms RCX (1998)‏ 8-bit microcontroller Hitachi H8/300, 32kb RAM AUTONOMOUS Excellent tool for teaching basics of robotics, embedded systems, etc. at all levels Low-level Programming of NXT robots, July 9th 2008

  9. Programming RCX Robotics Invention System – event based, icons, visual, educational RoboLab – educational, visual, flow-chart based NQC – C-like language translated to bytecodes Lejos – Java-like language BrickOS – GNU C/C++ compiler – produces fast binary code, full flexibility of C language Many others... Low-level Programming of NXT robots, July 9th 2008

  10. LEGO Mindstorms NXT (2006)‏ 32-bit ARM7 microcontroller AT91SAM7S256 256 KB Flash 64 KB RAM BlueTooth, USB, I2C, high speed IEC 61158 Type 4/EN 50 170 100 x 64 graphical LCD, better sensors, motors Programmable LEGO Low-level Programming of NXT robots, July 9th 2008

  11. Built-in rotation sensors NXT Motors Low-level Programming of NXT robots, July 9th 2008

  12. Much stronger NXT Motors Low-level Programming of NXT robots, July 9th 2008

  13. Light sensor NXT Sensors Low-level Programming of NXT robots, July 9th 2008

  14. Touch sensor NXT Sensors Low-level Programming of NXT robots, July 9th 2008

  15. Sound sensor NXT Sensors Low-level Programming of NXT robots, July 9th 2008

  16. Ultrasonic distance sensor NXT Sensors Low-level Programming of NXT robots, July 9th 2008

  17. NXT Non-standard sensors: HiTechnic.com • Compass, Accellerometer, Gyroscope, Color, IRSeeker, … Low-level Programming of NXT robots, July 9th 2008

  18. Master-slave: only master initiates communication Master can connect up to 3 slaves Optional acknowledgement, request reply Mailboxes #1-10 Sending: Master: NXTCommBTWrite(slave, mailbox)‏ Slave: NXTMessageWrite(mailbox)‏ Receiving: both sides NXTMessageRead()‏ Unreliable & Quite complex, but does not block NXT BlueTooth Protocol Silvian Toledo: http://www.tau.ac.il/~stoledo/lego/btperformance.html Low-level Programming of NXT robots, July 9th 2008

  19. Programming NXT Low-level Programming of NXT robots, July 9th 2008

  20. Programming NXT Low-level Programming of NXT robots, July 9th 2008

  21. Programming NXT Low-level Programming of NXT robots, July 9th 2008

  22. Standard Software NXT-G Low-level Programming of NXT robots, July 9th 2008

  23. LEGO Digital Designer ldd.lego.com Low-level Programming of NXT robots, July 9th 2008

  24. Not eXactly C (NXC) • Derivative of NQC for RCX by John Hansen • BricX IDE • Excellent tools and features • C-like language with good documentation • http://bricxcc.sourceforge.net/nbc/ • NXT Power Programming book Low-level Programming of NXT robots, July 9th 2008

  25. NXC example: line-following int s; task main()‏ { SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE); SetSensorMode(S1, SENSOR_MODE_PERCENT); ResetSensor(S1); while (1) { if (Sensor(S1) < 48) { OnFwd(OUT_A, 75); Float(OUT_C); } else { OnFwd(OUT_C, 75); Float(OUT_A); } } } Low-level Programming of NXT robots, July 9th 2008

  26. Java programming for NXT • iCommand – direct command mode • Lejos • Object oriented language • Preemptive threads • Arrays, including multi-dimensional • Recursion • Synchronization • Exceptions • Java types including float, long, and String • Most of the java.lang, java.util and java.io classes • A Well-documented Robotics API Low-level Programming of NXT robots, July 9th 2008

  27. NXT Logo • Combines the power of educational programming language Logo with robots • wiki.robotika.sk/index.php/Logo_for_NXT 1. Interactive Imagine Logo project 2. Loadable imagine library (nxt.imt) 3. Interpreter of Logo 4. Stand-alone Low-level Programming of NXT robots, July 9th 2008

  28. NXT Logo example: line-following to "follow [] [ setsensor 3 5 128 motor 0 "onrev 40 while ["true] [ while [ge? sensor 3 59] [] motor 0 "float 0 motor 2 "onrev 40 wait 50 while [lt? sensor 3 60] [] motor 2 "float 0 motor 0 "onrev 40 ] ] Low-level Programming of NXT robots, July 9th 2008

  29. Issues of the standard firmware • Limited multi-tasking • Complex motor model • Simplistic memory management • Not suitable for development of tools • Design your own firmware! • NXT GCC project http://nxtgcc.sourceforge.net/ • Approach: Take the standard firmware and modify it Low-level Programming of NXT robots, July 9th 2008

  30. Architecture of Standard Firmware • Scheduler + modules • Each module: • Init()‏ • Ctrl()‏ • Exit()‏ • Scheduler periodically calls Ctrl() on all the modules • Method1: design a new module • Method2: call your code from Ctrl() function of some module • Programming Concept: STATE MACHINE Low-level Programming of NXT robots, July 9th 2008

  31. Modifying standard firmware • cUiMenuCallFunction(Function,Parameter)is called when user presses button to trigger various functions, set a global flag: if ((Function == 8) && (Parameter == 248)) run_example = 1; • IncCmdCtrl(void), check the global flag: if (run_example) example(); • Implement the example() function as state machine • All standard functions available + direct C coding! Low-level Programming of NXT robots, July 9th 2008

  32. void example()‏ { static int example_state = 0; static ULONG x; if (example_state == 0) { cDebugString2("example", 0, 5); dOutputSetSpeed(1, MOTOR_RUN_STATE_RUNNING, 75, 1); x = dTimerRead(); example_state ++; } else if (example_state == 1) { if (dTimerRead() - x > 1000) example_state = 2; } else if (example_state == 2) { dOutputSetSpeed(0, MOTOR_RUN_STATE_IDLE, 0, 0); cDebugString2("done", 0, 5); example_state = 0; run_example = 0; } } Low-level Programming of NXT robots, July 9th 2008

  33. Sources of Information • LEGO Official documentation http://mindstorms.lego.com/Overview/NXTreme.aspx • NXT Firmware Open Source • Software Developer Kit (SDK) • Hardware Developer Kit (HDK) • Bluetooth Developer Kit (BDK) • HiTechnic.com • LUGNET.com Low-level Programming of NXT robots, July 9th 2008

  34. Workshop • Today & tomorrow afternoon • 7 NXT bricks available • Hands-on creative exercise • Build and program the robot in your favourite environment, preferably modify the firmware • Welcome & Thank you for the attention Low-level Programming of NXT robots, July 9th 2008

More Related