|
|
Line 1: |
Line 1: |
| == Welcome to Logo for NXT == | | == Welcome to Logo for NXT == |
| + | |
| + | [[Image:nxtlogo.gif]] |
| | | |
| * [[NXT Logo Overview|Overview]] | | * [[NXT Logo Overview|Overview]] |
Line 5: |
Line 7: |
| * [[NXT Logo User Guide]] | | * [[NXT Logo User Guide]] |
| | | |
− |
| |
− | [[Eurologo2007 Workshop]]
| |
− |
| |
− | This page contains information about the project of programming NXT in Logo language.
| |
− |
| |
− | The project is under intensive development, and there are no releases yet. '''the first preview will come in the very start of September'''
| |
− | However, the projet is open-source and the latest development version is available in the [http://webcvs.robotika.sk/cgi-bin/cvsweb/robotika/src/imagine/nxt/logo/current/ CVS].
| |
− |
| |
− | [[Image:nxtlogo.gif]]
| |
− |
| |
− | == Features ==
| |
− |
| |
− | * Implemented in Imagine and [[NBC|Next Byte Codes]] (NBC)
| |
− | * Three levels of use:
| |
− | # Interactive Imagine project with direct GUI controls that allow interfacing with NXT robot over Bluetooth
| |
− | # Loadable imagine library (nxt.imt) that contains set of procedures for direct control of NXT robot over Bluetooth from your Imagine projects
| |
− | # Interpreter of Logo running on the NXT that can run logo programs (with restricted syntax), which can communicate with Imagine projects and control the robots motors and sensors.
| |
− |
| |
− | == Motor & Sensor procedures ==
| |
− |
| |
− | (motor m cmd arg)
| |
− |
| |
− | where m is the number of motor(s) as in NBC:
| |
− | 0 - motor A
| |
− | 1 - motor B
| |
− | 2 - motor C
| |
− | 3 - motors AB
| |
− | 4 - motors AC
| |
− | 5 - motors BC
| |
− | 6 - motors ABC
| |
− |
| |
− | and cmd is one of (with the corresponding argument, similar to NBC):
| |
− | onfwd power
| |
− | onrev power
| |
− | off (ignored)
| |
− | float (ignored)
| |
− | fwdr [power regmode]
| |
− | revr [power regmode]
| |
− | fwds [power turnpct]
| |
− | revs [power turnpct]
| |
− | onrot [power angle]
| |
− | rst kind (1-4)
| |
− |
| |
− | (readmotor m cmd)
| |
− |
| |
− | where cmd is one of:
| |
− | rotations
| |
− | tacho
| |
− | blocktacho
| |
− |
| |
− | (sensor N)
| |
− |
| |
− | (setsensor N type)
| |
− |
| |
− | where type is number according to NBC:
| |
− | 0 - raw
| |
− | 1 - switch
| |
− | 2 - temperature
| |
− | 3 - refl
| |
− | 4 - angle
| |
− | 5 - light active
| |
− | 6 - light inactive
| |
− | 7 - sound db
| |
− | 8 - sound dba
| |
− | 9 - custom
| |
− | 10 - lowspeed
| |
− | 11 - lowspeed with 9V
| |
− | 12 - high speed
| |
− | add the following constants for adjusting the output:
| |
− | 32 - boolean output (0/1)
| |
− | 64 - transition count
| |
− | 96 - period counter
| |
− | 128 - percentage (0-1023 value normalized to 0-100)
| |
− | 160 - temperature in C
| |
− | 192 - temperature in F
| |
− | 224 - angle steps
| |
− | 31 - slope mask
| |
− | 224 - mode mask
| |
− |
| |
− | == Supported primitives ==
| |
− |
| |
− | NXT Logo supports the following primitive procedures and operations:
| |
− |
| |
− | # Arithmetic: ''<tt>add, sub, mul, div, mod, neg</tt>''
| |
− | # Logic: ''<tt>and, or, xor, not</tt>''
| |
− | # Bitwise: ''<tt>bitand, bitor, bitxor, bitnot</tt>''
| |
− | # Lists and words: ''<tt>first, bf, last, bl, item, se, list, word</tt>''
| |
− | # Maps & co.: ''<tt>map, apply, foreach, run, remote</tt>''
| |
− | # Loops and conditions: ''<tt>repeat, while, foreach, if, ifelse</tt>''
| |
− | # Predicates: ''<tt>empty? number? list? word? equal? gt? lt? ge? le? member?</tt>''
| |
− | # Variables and procedures: ''<tt>make, let, to, op, stop, erase, launch</tt>''
| |
− | # NXT file handling: ''<tt>load, printto, fopen, fwrite, fread, fclose, fremove</tt>''
| |
− | # Sounds: ''<tt>tone, sound</tt>''
| |
− | # Motors, sensors: ''<tt>motor, readmotor, sensor, setsensor, battery</tt>''
| |
− | # Other: ''<tt>wait, random, print, draw, ascii, char, boot, gc, fm</tt>''
| |
− |
| |
− | The expressions must be in prefix notation. Variables are used the same way as in Logo - as "name when referring to variable name, and as :name when referring to its value. There are global variables as well as local variables, lexical scoping as usual in Logo.
| |
− |
| |
− | The <tt>(remote "expression)</tt> operations allow to start evaluating an expression on NXT when started from PC, and vice-versa. This can be used for communication. Of course, one could then easily say, for example:
| |
− |
| |
− | remote "|[print "hello]|
| |
− |
| |
− | or
| |
− |
| |
− | remote "|[my_program 123]|
| |
− |
| |
− | or read value of remote variable:
| |
− |
| |
− | remote "|:var|
| |
− |
| |
− | However, one has to keep in mind that BlueTooth communication is slow due to switching of the direction of the transceiver and receiver. Therefore, it is preferable to implement higher-level functions and procedures that can run on NXT brick autonomously. Logo programs have about 30kb of memory available - for storing both the logo programs and data, however, programs can load/erase data and code from NXT files that are stored in the large flash.
| |
− |
| |
− | == Examples ==
| |
− |
| |
− | Some sample code for Logo for NXT is in the [http://webcvs.robotika.sk/cgi-bin/cvsweb/robotika/src/imagine/nxt/logo/current/examples Examples folder].
| |
− |
| |
− | == Syntax ==
| |
− |
| |
− | Detailed syntax is shown in the file [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/syntax.txt?content-type=text%2Fplain syntax.txt].
| |
− |
| |
− | == Reference Guide ==
| |
− |
| |
− | More detailed description of all commands and the system are located here:
| |
− | [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/reference_guide.html Logo for NXT Reference Guide].
| |
− |
| |
− | == Internals ==
| |
− |
| |
− | Short specification of the Logo for NXT internals is in the file
| |
− | [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/current/specification.txt?content-type=text%2Fplain specification.txt].
| |
− |
| |
− | == Publications ==
| |
− |
| |
− | * [[Media:eurologo2007_nxtlogo.pdf|Eurologo 2007 paper]] and [http://webcvs.robotika.sk/cgi-bin/cvsweb/~checkout~/robotika/src/imagine/nxt/logo/doc/nxtlogo.ppt presentation]
| |
| | | |
| __notoc__ | | __notoc__ |