Presentation is loading. Please wait.

Presentation is loading. Please wait.

[Low-level] Programming of NXT Robots Pavel Petrovič Department of Applied Informatics, Faculty of Mathematics, Physics and Informatics

Similar presentations


Presentation on theme: "[Low-level] Programming of NXT Robots Pavel Petrovič Department of Applied Informatics, Faculty of Mathematics, Physics and Informatics"— Presentation transcript:

1 [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

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

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

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

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

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

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

8 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 9 th 2008

9 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 9 th 2008

10 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 9 th 2008

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

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

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

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

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

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

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

18 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 Low-level Programming of NXT robots, July 9 th 2008 Silvian Toledo: http://www.tau.ac.il/~stoledo/lego/btperformance.html

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

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

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

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

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

24 24 Not eXactly C (NXC) Low-level Programming of NXT robots, July 9 th 2008 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

25 25 NXC example: line-following Low-level Programming of NXT robots, July 9 th 2008 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); } }

26 26 Java programming for NXT Low-level Programming of NXT robots, July 9 th 2008 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

27 27 NXT Logo Low-level Programming of NXT robots, July 9 th 2008 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

28 28 NXT Logo example: line-following Low-level Programming of NXT robots, July 9 th 2008 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 ]

29 29 Issues of the standard firmware Low-level Programming of NXT robots, July 9 th 2008 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

30 30 Architecture of Standard Firmware Low-level Programming of NXT robots, July 9 th 2008 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

31 31 Modifying standard firmware Low-level Programming of NXT robots, July 9 th 2008 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; In cCmdCtrl(void), check the global flag: if (run_example) example(); Implement the example() function as state machine All standard functions available + direct C coding!

32 32 Low-level Programming of NXT robots, July 9 th 2008 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; }

33 33 Sources of Information Low-level Programming of NXT robots, July 9 th 2008 LEGO Official documentation http://mindstorms.lego.com/Overview/NXTreme.aspx 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

34 34 Workshop Low-level Programming of NXT robots, July 9 th 2008 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


Download ppt "[Low-level] Programming of NXT Robots Pavel Petrovič Department of Applied Informatics, Faculty of Mathematics, Physics and Informatics"

Similar presentations


Ads by Google