Download presentation
Presentation is loading. Please wait.
Published byLorena McCormick Modified over 9 years ago
1
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.
2
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
3
Model-Based Generators Models: stored as directed, attributed graphs Generators: traverse/transform Targets: executable models analyzable model Synchronous Dataflow Petri Net Slide adaptated from www.isis.vanderbilt.edu
4
Metamodeling and Modeling 1.Abstract & Concrete Syntax 2.Static Semantics 3.Visualization MetaModel Model OCL Constraints Slide adaptated from www.isis.vanderbilt.edu
5
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
6
The Constraints Aspect The Constraints: MaxRobots: <= 2 Xmin: >= 0 Ymin: >= 0 UniqueName ValidName UniqueXYCoordinate
7
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
8
Example Instance Model
9
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); … Generated Control Code Model Interpreter (C++)
10
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
11
Snippet of Interpreter Code //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); Obtaining robot coordinates from model
12
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.
13
Questions? http://www.gray-area.org/Research/CREW/
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.