Difference between revisions of "Logo for NXT"

From RoboWiki
Jump to: navigation, search
(front page should be simple)
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__

Revision as of 22:34, 1 October 2007