-
Notifications
You must be signed in to change notification settings - Fork 29
/
README
67 lines (52 loc) · 3.59 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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.