Title: Lowlevel Programming of NXT Robots
1Low-level Programming of NXT Robots
- Pavel Petrovic
- Department of Applied Informatics,
- Faculty of Mathematics, Physics and Informatics
- ppetrovic_at_acm.org
- July 9th 2008
2Welcome to world of LEGO
Low-level Programming of NXT robots, July 9th
2008
3You can build everything...
Low-level Programming of NXT robots, July 9th
2008
4Programmable LEGO
- Manually programmable module in 1990
Low-level Programming of NXT robots, July 9th
2008
5Programmable LEGO
- TECHNIC Control Center 1993
Low-level Programming of NXT robots, July 9th
2008
6Programmable LEGO
- Control Lab Building Set 1995
Low-level Programming of NXT robots, July 9th
2008
7Programmable LEGO
- Code Pilot programmed by sweeping barcodes
(1997)?
Low-level Programming of NXT robots, July 9th
2008
8Programmable 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
9Programming 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
10Programmable LEGO
- 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
Low-level Programming of NXT robots, July 9th
2008
11NXT Motors
- Built-in rotation sensors
Low-level Programming of NXT robots, July 9th
2008
12NXT Motors
Low-level Programming of NXT robots, July 9th
2008
13NXT Sensors
Low-level Programming of NXT robots, July 9th
2008
14NXT Sensors
Low-level Programming of NXT robots, July 9th
2008
15NXT Sensors
Low-level Programming of NXT robots, July 9th
2008
16NXT Sensors
- Ultrasonic distance sensor
Low-level Programming of NXT robots, July 9th
2008
17NXT Non-standard sensors HiTechnic.com
- Compass, Accellerometer, Gyroscope, Color,
IRSeeker,
Low-level Programming of NXT robots, July 9th
2008
18NXT BlueTooth Protocol
- 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
Silvian Toledo http//www.tau.ac.il/stoledo/lego
/btperformance.html
Low-level Programming of NXT robots, July 9th
2008
19Programming NXT
Low-level Programming of NXT robots, July 9th
2008
20Programming NXT
Low-level Programming of NXT robots, July 9th
2008
21Programming NXT
Low-level Programming of NXT robots, July 9th
2008
22Standard Software NXT-G
Low-level Programming of NXT robots, July 9th
2008
23LEGO Digital Designer ldd.lego.com
Low-level Programming of NXT robots, July 9th
2008
24Not 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
25NXC 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) lt 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
26Java 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
27NXT 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
28NXT 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
29Issues 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
30Architecture 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
31Modifying 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 - 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!
Low-level Programming of NXT robots, July 9th
2008
32void 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 gt 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
33Sources 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
34Workshop
- 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