OGEL: LEGO Mindstorm Controller Language Michael Ching Gerardo Flores Matt Kalish Charles O’Donnell May 13, 2003 LEGO Mindstorms Robotic architecture that allows one to build components from Legos and control sensors and motors from a microcontroller Complexity of microcontroller can be chosen (Scout, RCX 1.0, RCX 2.0, CyberMaster) Different development environments may be chosen that vary from a drag and drop approach to a Csyntax based language Not Quite C Targets experienced programmers C syntax and semantics Textual language removes the graphical metaphors that limit the type of programs that may be written Supported by several IDEs (WinNQC, MacNQC, Visual NQC, NQCEdit, Bricx Command Center) Not modular in nature Does not support hierarchy or abstraction of code Questionable event-based support OGEL Designed to support the RCX 1.0 but offers support for future firmware (Compatible with 2.0) Merge desirable characteristics of available technologies Built scalable hierarchy which improves code reuse OGEL (Cont’d) Able to create code for multiple target microcontrollers from one file Improved message passing architecture Improved modularity which leads to a more stable hierarchy Allows imbedded self-contained Not Quite C code Permits separation of RCX, task, message, and function declarations into library files which can be added to any existing code by means of include statements Architecture Preprocessor Lexer / Parser OGEL Source Code File RCX 1.0 Translator NQC Target Files For RCX 1.0 RCX 1.0 Optimized Translator RCX 2 Translator Static-Semantic Checker UNI-OGEL Generator RCX 2 Optimized Translator NQC Target Files For RCX 2 CyberMaster Translator CyberMaster NQC Target Files For CyberMaster Optimizing Translator Symbol Table Scout Translator Scout Optimizing Translator NQC Target Files For Scout Architecture Discussion 5 Stages: Preprocessor, Lexer/Parser, StaticSemantic Checking, UNI-OGEL Generator, Architectural Translator. Preprocessor: #include, #define, task/function order independence Architecture Discussion Lexer/Parser – Static-Semantic Checking UNI-OGEL Generator: code duplication & port mapping, source code profiling Architectural Translator: any architecture, architecture-specific errors discovered (task limit, recursion), optimization Testing Testing was done in 3 phases Isolated Module Testing Integration Testing Final Testing Sample OGEL Code #define TIME_REV 100 message done; rcx demo { SENSOR_TOUCH hit = $1; left_motor = $A; right_motor = $C; } task go(in hit)(out left_motor, out right_motor) { when (hit>0) do reverse(); nqc.OnFwd(left_motor + right_motor); } void turn()()(out left_motor, out right_motor) { nqc.OnRev(left_motor); nqc.OnFwd(right_motor); nqc.Wait(TIME_REV); nqc.Off(left_motor + right_motor); throw done; } void reverse()()(out left_motor, out right_motor) { nqc.OnRev(left_motor + right_motor); nqc.Wait(TIME_REV); nqc.Off(left_motor + right_motor); turn(); } task rev_task()(out left_motor, out right_motor) { int x = 1; while (x > 0) { catch done; reverse(); } } task main() { rcx demo first_born; first_born.addTask(rev_task); first_born.addTask(go); } Watch This Puppy run! Division of Work: Front-End: Michael Ching / Gerardo Flores Back-End: Charles O’Donnell Floater, Docs Compilation: Matt Kalish
© Copyright 2024 ExpyDoc