Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
README Noggin Noggin is the module of man housing all components which reason about the world and make decisions about how the robot will act. The main components are localization, ball tracking, and behaviors. Additionally opponent tracking should be added to this module. The module is controlled from the noggin class which is defined in "Noggin.*". The main noggin thread is called every vision frame. The coordinate frame used for localization has the longer side of the field as the x-axis and the shorter end as the y-axis. Picturing the blue goal side on the left and the yellow goal on the right, one can view the field as Quadrant I of a standard Cartesian x,y-plane. The origin is placed at the bottome left hand corner of the field green. Robot heading is in the range -PI to PI with 0 being facing the yellow goal, -PI / 2 facing the bottom of the field and PI / 2 facing the top of the field. That is the coordinate system is right hand ruled. The coordinate system in python is basically the same as that for localization, except that it headings are convertecd to degrees (-180 to 180) and coordinate are made relative depending to the team color. This means that OPP_GOAL_HEADING is always 0 and MY_GOAL_HEADING is always 180 or -180. The origin is placed at the right goal post side corner of the field green on the goal side being defended by the robot's team. In python the relative coordinates are found in the MyInfo() class which is instantiated as self.my in Brain.py. The localization information is directly accesible in python through the python wrappind described below. LOCALIZATION Localization is the problem of determining where a robot is in the world. This is performed using inputs of the last frame's odometry and any landmark observations ("Observation.*") and gives output of an (x,y) coordinate and a heading on the field, along with associated uncertainties. The interface defining localization is "LocSystem.*". We currently have two implementations an extended Kalman filter (EKF) systen "LocEKF.*" and a Monte Carloe localization (MCL) or particle filter system "MCL.*". See the system files for more detailed documentation. BALL TRACKING Ball tracking as currently implemented through the use of an EKF. The ball tracking system takes as input a ball observation and gives as output an estimate of the ball's (x,y) position and (x,y) velocites, as well as associated uncertainties for the four estimates. OPPONENT TRACKING Opponent tracking can be implemented similarly to ball tracking. The one additional problem is in correctly associating opponent robot sightings with the correct opponent model. There are many documented methods for doing this, the first try would be doing a simple nearest neighbor data association. PYTHON WRAPPING Python wrapping of localization is performed in PyLoc.*. These files define a simple Python class called "Loc". An instance of this class is created in the initialization of Brain.py and is called self.loc. LOGGING Localization logging is controlled by an #ifdef in Noggin.h nammed "LOG_LOCALIZATION". It is currently turned off by default. By uncommenting the define of LOG_LOCALIZATION in Noggin.h, a timestamped dot loc file (See startLocLog() in Noggin.cpp) will be created in /home/root/ on the robot when the noggin module is initialized. This file records the start configuration of the localization system and then records all observations and odometry information necessary for localization processing at each step of the updateLocalization() method in the Noggin class. Look in the offline directory to view files for processing localization logs.