Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mindstorms:nxt_prolog_api [2008/04/21 11:43]
gjn
mindstorms:nxt_prolog_api [2019/06/27 15:50] (current)
Line 5: Line 5:
 These areas are much more accessible with the use of a declarative programming solutions, compared to classic, low-level imperative languages. These areas are much more accessible with the use of a declarative programming solutions, compared to classic, low-level imperative languages.
  
-The paper presents research developed within the //​[[hekate:​HeKatE]]//​ project [[http://​hekate.ia.agh.du.pl]] aimed at providing a high-level rule-based programming solution for Mindstorms NXT, based on the Prolog language API for the NXT platform.+The paper presents research developed within the //[[hekate:start|HeKatE]]// project [[http://​hekate.ia.agh.du.pl]] aimed at providing a high-level rule-based programming solution for Mindstorms NXT, based on the Prolog language API for the NXT platform. 
 + 
  
 ===== Design ===== ===== Design =====
 +Basing on the review of existing solutions presented above, the requirements of a new Prolog API for NXT has been formulated.
 +The main requirements are:
 +   * support for all functions of the standard NXT components, that is sensors and motors,
 +   * crossplatform solution, for both Windows and GNU/Linux environments,​
 +   * reuse some of the available solutions, and provide compatibility where possible,
 +   * ultimately integrate with the higher XTT layer.
 +
 +The whole platform based on this new Prolog API is planned as presented in the figure below.
 +In the figure the highest visual rule-based logic design with XTT is also included.
 +The focus of this paper is the design and prototype of the Prolog API layer, indicated in the figure by the dotted line.
 +
 +In order to reuse and support some of the existing solutions, as well as provide implementation flexibility,​ it's been decided to provide in the first stage a Prolog library, with the following features:
 +it is executed on a PC, controlling an NXT-based robot,
 +the control is performed with the use of the Bluetooth or USB cable connection,
 +the low-level communication is provided by some well-tested existing communications modules,
 +at the functional level the API is coherent with other available solutions.
 +
 +{{:​mindstorms:​prlognxtapi-design.png|Prolog NXT API Design}}
 +
 +Considering the requirements the following API architecture has been designed.
 +It is composed of three main layers as observed in the figure above.
 +  * //​communication layer// providing the low-level communication with the robot,
 +  * //​sensomotoric layer// allowing the exchange information with sensors and motors,
 +  * //​behavioral layer// providing a higher-level functions, e.g. drive.
 +
 +The behavioral layer exposes to the programmer some high level functions and services.
 +It provides abstract robot control functions, such as //go//, or //turn//.
 +Ultimately a full navigation support for different robots is to be provided.
 +(However, different robot configurations require different control logic)
 +
 +The sensomotoric layer controls the components of the Mindstorms NXT set  motors, all the sensors, as well as Brick functions.
 +This layer can be used to directly read the sensors, as well as program the motors.
 +This is a layer, that can be used by a programmer to enhance high-level behavioral functions.
 +
 +The goal of the communication layer is to execute the actions of the sensomotoric layer and communicate with the NXT Brick.
 +Currently in this layer several modules are present, providing different means of communication:​
 +  *  a pure Prolog module, using a serial port communication,​ and the NXT protocol commands,
 +  * a hybrid solution based on the Java-based iCommand library,
 +  * a hybrid socket-based solution, using the NXT++ library, that communicates with the robot.
 +All of these actually wrap the //​Mindstorms NXT Communication Protocol//.
 +
 +The first solution is the most straight forward one.
 +In this case standard ISO Prolog stream predicates can be used to control the serial port.
 +Prolog terms that wrap the NXT protocol have to be provided.
 +In the second ​ case the Prolog communication module is integrated with iCommand with the use of the SWI Java to Prolog interface called JPL.
 +Prolog calls are mapped to the iCommand methods.
 +In the third case, a simple server written in C++ exposes NXT communication with a TCP socket.
 +The Prolog communication module connects to the server and controls the robot through a TCP connection.
 +This opens up a possibility of a //remote// control, where the controlling logic is run on another machine, or even machines.
 +
 +Besides some basic send/​receive functions the library has to provide certain services.
 +These are event and time-based callback.
 +For example, it should be possible to instruct the robot to e.g. "drive till you hit/​approach an obstacle, then make a sound, ​ wait for a response for some time, if you don't get one, turn and drive on".
 +So the library has to provide //timers// that trigger some callbacks, as well as //​event-driven//​ callbacks.
 +This requires //​parallel//​ execution of certain threads.
 +
  
 ===== Implementation ===== ===== Implementation =====
 +For the implementation progress see working pages (so far in polish):
 +  * //​communication layer// see [[pl:​miw:​miw08_mindstormscontrolj|iCommand]],​ [[pl:​miw:​miw08_mindstormscontrolc|TCP]],​ and [[pl:​miw:​miw08_mindstormscontrols|serial versions]].
 +  * //​sensomotoric layer// see the [[pl:​miw:​miw08_mindstormsapi|main page]].  ​
 +  * //​behavioral layer// see [[pl:​miw:​miw08_mindstormsapi|the main page]].
 +
 +The [[pl:​miw:​miw08_mindstormsapi|main API]] page is here.
  
 ===== Examples ===== ===== Examples =====
 +See [[pl:​miw:​miw08_mindstormsdesign|the following project]].
  
 +===== Download =====
 +A complete downloadable version of the API will be available soon.
 +The API will be licensed on the GNU GPL v3.
 +See the main page of the API for a [[/​pl:​miw:​miw08_mindstormsapi#​section12|development version]].
  
 +===== Papers =====
 +A first paper describing the design and the implementation of the API {{:​mindstorms:​prolognxtapi-draft.pdf|is here}}.
mindstorms/nxt_prolog_api.1208771000.txt.gz · Last modified: 2019/06/27 15:51 (external edit)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0