130 likes | 235 Views
Model-Driven Synthesis of Embedded Robotic Navigation Systems. Rachael Dennison Raeanne@aol.com Bina Shah Iambina@uab.edu http://www.gray-area.org/Research/CREW/ Advisor: Dr. Jeff Gray gray@cis.uab.edu (www.gray-area.org).
E N D
Model-Driven Synthesis of Embedded Robotic Navigation Systems Rachael Dennison Raeanne@aol.com Bina Shah Iambina@uab.edu http://www.gray-area.org/Research/CREW/ Advisor: Dr. Jeff Gray gray@cis.uab.edu (www.gray-area.org) This research is sponsored by the CRA Collaborative Research Experience for Women.
Project Overview • Goal: • Synthesize robot control software from high-level models that depict configuration of a hostile environment containing robots, landmines, and lost babies • Motivating Problem: • Hard-coded control software for real-time embedded robotics control systems requires manual adaptation for each new configuration • Solution Approach: • Use a meta-configurable modeling tool • Create a meta-model that represents the hostile domain • Construct a code generator that translates model information into robot control software • Code generator has deep knowledge of domain and robot planning
Model-Based Generators Targets: Models: stored as directed, attributed graphs executable models Synchronous Dataflow Petri Net Generators: traverse/transform analyzable model Slide adaptated from www.isis.vanderbilt.edu
Metamodeling and Modeling MetaModel Model • Abstract & Concrete Syntax • Static Semantics • Visualization OCL Constraints Slide adaptated from www.isis.vanderbilt.edu
Explanation of “Hostile Grid” Meta-Model • Objects: Baby, Landmine, Robot • Attributes: X-Coordinate, Y-Coordinate • Constraints:Minimum X-Coordinate, Minimum Y-Coordinate, Unique Name, Valid Name, Maximum Number of Robots, Unique set of X and Y coordinates
The Constraints Aspect • The Constraints: • MaxRobots: <= 2 • Xmin: >= 0 • Ymin: >= 0 • UniqueName • ValidName • UniqueXYCoordinate
Example constraint • UniqueXYCoordinate • Pseudo code: • Return the number of babies, landmines, and robots with given X and Y coordinates. • If number > 1, the X and Y coordinate pair is not unique. • Sample OCL Constraint: let count = project.allRobots(self.XCoordinate, self.YCoordinate) + project.allBabies (self.XCoordinate, self.YCoordinate)+ project.allLandmines(self.XCoordinate, self.YCoordinate) in if (count <= 1) then true else false endif
A Model Interpreter for Generating Robot Control • The Interpreter is written in C++ and hooks into modeling environment as a GME plug-in • It will generate Java code • The Java code will generate instructions for the robot to navigate to babies while moving and avoiding landmines … //Get the hostileGrid model const CBuilderAtomList *allRobots = hostileDiagram->GetAtoms("Robot"); pos1 = allRobots->GetHeadPosition(); CBuilderAtom *Robot = allRobots->GetNext(pos1); //obtain the robot's (X,Y) coordinates--> (RobotX, RobotY) int RobotX, RobotY; Robot->GetAttribute("XCoordinate", RobotX); Robot->GetAttribute("YCoordinate", RobotY); //Get the hostileGrid model const CBuilderAtomList *allRobots = hostileDiagram->GetAtoms("Robot"); pos1 = allRobots->GetHeadPosition(); CBuilderAtom *Robot = allRobots->GetNext(pos1); //obtain the robot's (X,Y) coordinates--> (RobotX, RobotY) int RobotX, RobotY; Robot->GetAttribute("XCoordinate", RobotX); Robot->GetAttribute("YCoordinate", RobotY); //Get the hostileGrid model const CBuilderAtomList *allRobots = hostileDiagram->GetAtoms("Robot"); pos1 = allRobots->GetHeadPosition(); CBuilderAtom *Robot = allRobots->GetNext(pos1); //obtain the robot's (X,Y) coordinates--> (RobotX, RobotY) int RobotX, RobotY; Robot->GetAttribute("XCoordinate", RobotX); Robot->GetAttribute("YCoordinate", RobotY); //Get the hostileGrid model const CBuilderAtomList *allRobots = hostileDiagram->GetAtoms("Robot"); pos1 = allRobots->GetHeadPosition(); CBuilderAtom *Robot = allRobots->GetNext(pos1); //obtain the robot's (X,Y) coordinates--> (RobotX, RobotY) int RobotX, RobotY; Robot->GetAttribute("YCoordinate", RobotY); … ModelInterpreter(C++) Generated Control Code
Calculating Angle Rotations • Rotation sensor reads a value of 16 when the wheel has rotated 360 degrees. • Calculate the angle at which the robot needs to turn to point to so that it will travel to the baby in a straight line.double angle = atan2((finalY-RobotY), (finalX-RobotX)); • Convert into degrees. angle = angle * (180/pi); Rotation Sensors
Snippet of Interpreter Code Obtaining robot coordinates from model //Get the hostileGrid model const CBuilderAtomList *allRobots=hostileDiagram->GetAtoms("Robot"); pos1 = allRobots->GetHeadPosition(); CBuilderAtom *Robot = allRobots->GetNext(pos1); //obtain the robot's (X,Y) coordinates--> (RobotX, RobotY) int RobotX, RobotY; Robot->GetAttribute("XCoordinate", RobotX); Robot->GetAttribute("YCoordinate", RobotY);
Summary • Hard-coding models to adapt to new configuration can be automated using meta-configurable modeling tool. • A meta-model is created that allows to create a hostile environment including lost babies, landmines, and robots. • The code generator, interpreter, is written in C++, which translates the model information into robot control software.
Questions? http://www.gray-area.org/Research/CREW/