DRAFT: This module has unpublished changes.
DRAFT: This module has unpublished changes.

Summer Internship 2010

NASA Goddard Space Center


Progress Report

 

Day

Hour Span

Recent Hour Count

Cumulative Hour Count

06/24/10

10:00am – 5:00pm

7 hours

7 hours

06/25/10

8:30am – 2:00pm

4.5 hours

11.5 hours

06/28/10

8:30am – 4:00pm

6.5 hours

18 hours

06/29/10

8:30am – 4:30pm

7 hours

25 hours

06/30/10 9:00am - 7:15pm 10.25 hours 35.25 hours
07/01/10 8:30am - 7:15pm 10.75 hours 46 hours
07/06/10 7:30am - 9:00pm 13.5 hours 59.5 hours
07/07/10 8:00am - 9:00pm 13 hours 72.5 hours
07/08/10 8:00am - 5:30pm 9.5 hours 82 hours
07/09/10 8:30am - 5:30pm 9 hours 91 hours
07/12/10 8:00am - 5:30pm 9.5 hours 100.5 hours
08/02/10 8:00am - 7:30pm 11 hours 111.5 hours
08/03/10 8:00am - 5:30pm 9.5 hours 121 hours
DRAFT: This module has unpublished changes.

Tuesday June 29, 2010

So far this summer, I have been assigned to work on a stereo vision system (presumably for astrobot). Because I am COMPLETELY unfamiliar with C++, the language we are using, I have spent every day so far attempting to teach myself using four textbooks. The first two were borrowed from the library on Chris' account, and the second two are from my dad. I've constructed a rudimentary program that demonstrates various exercises I've been doing. It's listed here:

 

FIRST CODE

 

Of course this is not the way it's supposed to be explained, but from my basic understanding, there are three main components of code in terms of the larger structure. There is the top (before the int main()), the main program (int main()), and alternative programs (like int main() but alternatives to that . . . like subprograms that fit into the larger one). These alternative program listings are shown after the (return 0;), because (return 0;) signals the end of the executable program. Alternative programs are simply called up during the course of the main program.

 

The top portion includes two types of features. The first kind are statements to identify portions of the preexisting library that the program references throughout the course of execution. The functions that already exist in various libraries can be redone in the text of the program (redefined), but it's much easier to just use what already exists. This feature is in purple above (#include  ) for example. “iostream” is the most common, and is used as default in nearly every program. I've been experimenting with multiple sections of the library, as can be seen above. The second main feature of the top portion of the program is the declaration of processes used (and their variables that will later be defined). These are references to (int main ()) for example or the equivalent subprocesses including (double sqtest(double a);), (void drwbx(int size);), or (int ascending( int, int );). After mentioning that the program will use these processes, a declaration of variables must follow. This is done by simply listing them after the process name using the correct syntax.

 

Curly brackets are used, most notably, to mark the start and end of a process. Parentheses, “<<”, “>>”, quotes, and other symbols are used in various circumstances. When a program is executed, its result is shown in a display console. For a simple program like this, it means that often the only result I get is the program “printing” what I tell it to print. Printing means displaying text/numbers/symbols that the program or user defines.

 

The outline of my program's functions so far include:


Integers

  • Prompting the user to submit two integers
  • Adding the integers together
  • Printing the sum

Triangle

  • Prompting the user to submit two numbers that represent legs of a triangle
  • Using the Pythagorean Theorem to calculate a hypotenuse
  • Printing the hypotenuse as both a number and a box of the same dimension (height-wise) of that number

Relationship

  • Prompting the user to submit two numbers
  • Comparing the relationship of those numbers
  • Printing the relationship in terms of whether/not those numbers are equal, not equal, greater than, and less than the other

Boxes

  • Prompting the user to input a number
  • Printing a box (of ****) that has the same height dimension as the user's input (can go up to infinity)
  • User is prompted three times for three boxes

Pointer Demo

  • Creating the address of a pointer
  • Printing both the name and result of the pointer
  • [This exercise was done to demonstrate the principle of pointers – remote access to a number using an address – pointers are names that are said to point to the number they address]

Capitalization

  • An original string of characters (lower case) is printed 
  • A resultant string of characters, exchanged for upper case is printed 
  • [Today I plan to redo this program so capitalization is applied to a user-inputed string rather than a preexisting string]

String Demo 1

  • A string is named
  • A string is printed using a pointer (meaning that the string was remotely accessed)
  • [The result wasn't all that impressive, but again, it demonstrated an important concept]

String Demo 2

  • The user is prompted to input two strings
  • The program combines these strings to become a new string (that has the same name as the old string)
  • [I have yet to see how powerful this concept will be]

Ascending/Descending

  • Program prints a list of 10 numbers that exist previously in the program
  • The user is prompted to decide between wanting the program to list these numbers according to ascending or descending order by typing in either “1” or “2”
  • The resulting list is printed

Military Time

  •  [This section of code is still in progress; I'm running into syntax errors that will hopefully be worked out today]

 

I've tried and failed a few other exercises, though I've saved my code in Word in case I have time for further revision. My main project that I plan to revisit is a simulated card game. I created a stack of 52 virtual cards corresponding to Aces, Kings, Queens, Jacks, Tens, . . . with all of their suits. This exercise is practice creating an array of strings. I then tried to shuffle and deal those cards, but again ran into numerous errors that I have currently put aside in priority to learning other concepts. This is what I have so far:

 

CARD PROGRAM

 

I've been programming in the Eclipse work space. I've never even heard of the application before and haven't spent any time really exploring what it can do, but it does create a good workbench anyway. Unlike at APL, I was supplied with a computer immediately. The facility was experiencing Internet problems (our group had just moved to this building the previous week), but it was up again only a day or two later. I needed a lot of software downloaded, but Chris did most of that for me while I started practicing with a stale “Hello World” on his computer. I did most of the learning on my own using my textbooks, but Chris does check on my progress fairly often. He showed me how to do for and while loops, explained how sub-processing worked in a way that was much clearer than the textbook indicated, synthesized the “Drawing Boxes” portion of my algorithm drastically, and suggested I learn about pointers. I'm again using the Linux Ubuntu operating system. Apparently that's what all engineers use now. I'm getting used to it.

 


 

As for the actual project for which I've been trying to learn all this . . . Our goal is to program a stereo vision system that uses displacement measurements to calculate distance in a variable environment. It should be able to map a local environment. The prototype is being programmed to avoid obstacles, and (I assume) identify regions of interest, whatever those may be. A different part of the group is working on a LIDAR system. LIDAR stands for “Light Detection and Ranging”. That machine will map its surrounding environment using a 360 broadcasting view. Eventually the LIDAR and stereo vision will be compared in a presentation to the Mars Rover people. According to Mike, they tend to work in isolation and aren't very open to accepting work from those not working exclusively on that project, but they will be more open to listening perhaps if we show them that what we're doing is not meant to replace, but improve by adding to what they already have. LIDAR is the new piece. Stereo vision has been done before of course; I did the exact same thing for my 9th grade science project. This is a very long project though that will probably not be done maybe even in time for me to graduate.

 

There are about 40 interns working here. Most of them are college or graduate students, and I was only the second high school student here when I first arrived. The other high school girl's name is Courtney and I had lunch with her yesterday. She's working on a presentation piece. I saw a little bit of what she's been doing for the last week since she got here. She's building iMovies of all the projects going on here right now using a picture slideshow. People are always taking pictures around here. I wished that I could have had her job at first, because I've recently become very familiar with iMovie through a recent task: creating a momento video for the Mentorship SLC. That was a lot of work, but I think it turned out alright. It was finally published and distributed as a DVD, though I hope to put it on the website next year as well with other shorts of Mentorship clips I've yet to format in the same way.

 

However, I've decided that where I am is better for me. I'm learning something new and useful. I'm pretty much useless in terms of the project, but I do appreciate the opportunity to look over everything. It's the exact same thing as my freshman year science project practically, but everything's much more sophisticated. I learned LabVIEW basics, but nothing all that well. I took a few Visual Basic and Java courses in 6th and 7th grade at Howard Community College, but they were only intros, and I was at least three years underage at the time, so I didn't understand much anyway. I didn't learn anything at APL last year. That experience was still valuable, because I became familiar with the work environment and had the chance to flounder while experimenting on equipment I was not used to seeing, but all in all, I gathered no new skills. The majority of my time spent there was given to recording and refining my thoughts on next years project while simultaneously planning a book. Those tasks were very helpful, but it all could have been done more efficiently. I ended up writing nearly 100 pages of combined freewriting, notes, journals, outlines, etc.

 

Anyway: I'm here now. There are new interns coming in every day now. I'm now longer the youngest – an incoming junior arrived yesterday to work on the LIDAR project. Another incoming senior came in today.

 

We're going on a three-day trip to Wallops next week. I need to bring in permission from my parents, because I'm not 18 yet, but they said I could go. I don't know exactly what we're doing, but we'll be “testing robots” and going to the beach/on the beach. It's about $25 a night and a few hours to get there.

 

I've been thinking about my plans for next year, and I thought I had something pretty solid, but my mom thinks my proposal is old and that I need something new. I think my plan is the logical next step in the research process, and that I am finding something new, but then maybe I should try to add more. I wanted to expand my study to include more subjects and more independent variables. I would compare The Story Template algorithm to its competitors (i.e. Freytag's Pyramid, Hero's Journey, Monomyth, etc.). Depending on my findings, I might then focus my audience to the education system in attempt to replace teaching such systems (especially Freytag's Pyramid) with a more correct model, perhaps resembling The Story Template's description of story structure.

 

Maybe that's not good enough. It probably isn't. It is the same project I suppose. The first stage established the raw credibility of The Story Template, and this year would show that score in comparison to alternative products to make for a better commercial base. The outcome of that project wouldn't be exciting though. This year's result was innovative. It showed that ONE element influenced which works were identified as classics versus non-classics. One of my main goals this year is to find an outlet for presentation of my work. I've decided that research means absolutely nothing unless people know about it. It seems like a waste of time often to record every minuscule finding, describe in painful detail every challenge of the research process, but then again, writing and presentation are all that matter in a sense. That's why journaling is so important.

 

I want to go back into science fair. The material I had this year wasn't ready in time or even refined enough to present, so I wouldn't be embarrassed. This project is brilliant though. It is completely new!! I think I can make it work in the science community if I present it in just the right way. It's not that I like science fair all that much, but science fairs are the only organized competition I've come in contact with so far. I don't necessarily have to enter a 'competition', but I need some kind of outlet where I'll get visibility. The GT Student of the Year Award was only a stroke of luck this past school year. My only presentation opportunity was at the APL SLC. That's not enough. Who knows if I'll even get that next year! I presented in freshman year, but they didn't even look at my sophomore project, which is the one that went to Reno. Actually I only got 2nd place in Glenelg's science fair for that project too. It just shows you how subjective these kinds of awards are. I probably shouldn't have gotten that award. The hypotheses were contrived and old – just like my plan for next year is old compared to this year's project. Freshman year science project was the most fun and the best constructed in terms of the scientific method. Sophomore year, I got lazy and focused more on presentation. Maybe that's what I need though. Maybe I should put off doing real innovative research in favor of making sure what I do is articulated well. Maybe I shouldn't bite off so much, so I can focus on refining what I've already done. I need an outlet. I need a place to present where I can try for recognition, otherwise it doesn't matter. That's sad, but really it's true. Research means nothing without advertising.

 

My other option is to do more research. I had the other idea of actually writing a technical manual for the template. I wanted to do that this year but ran out of time. Maybe it would be in the style of a software manual? Who knows. Maybe I could make it into a program instead of a book . . maybe it would be an interactive wizard to be purchased separately or in conjunction with the book itself. The problem with creating a product though is that it's such a huge undertaking, it might be impossible. I might not be able to present it well.

DRAFT: This module has unpublished changes.

Wednesday June 30, 2010

 

Yesterday I was introduced to more of the specifics of the project.  I was given a 26 page technical article and chapter in a robotics book to read.  I got to see stereovision in action so far.  the cameras are in grayscale, with one side showing close objects in white and distant objects in black.  The other camera is the opposite way, but I don't know why that is.  In a mini test, the cameras were also running in RGB for awhile.  That meant that far objects were in blue, close in red, and medium objects in green.  That model was confusing so it was discarded.  One problem with the grayscale vision now is that some objects are actually white or black in real life and so distance and actual color get confused?  This is a purely optical system so it is a problem.  Distance for every pixel is calculated individually, and the grayscale distance filter is then applied to the original image.  In any case, the images have relatively good disparity.

 

We are trying to program the machine to simultaneously create a map of its surroundings and localize itself within that map; that concept is called SLAM (simultaneous localization and mapping).  I still don't understand exactly how to do this.  I've been trying to grasp the basic concepts, but really I am so inexperienced, I can separate the technical stuff from anything else yet.  I understood a few paragraphs here in there of that article, but really, it was all over my head.  Everything here is over my head.  The one good thing though, is that I'm learning little bits of things enough that I can use some of the terminology and attempt to understand what's going on.  I'm completely useless as a worker though.  This is all software development, and I'm completely unfamiliar with it in general. 

 

I worked with object identification using template matching.  Here, we're using keypoints to build a map.  It's a similar concept of course, but there are many more variables than I could even consider with my project.  I don't know how keypoints are defined, and there doesn't seem to be any real explanation.  Keypoints tend to be circular of various radii at seemingly random points in the image.  Key points have identifying x,y coordinates (to supplement a distance calculation), listing of size in terms of the radius, and a descriptor tag of about 128 numbers on the end. 

 

Right now, Chris is working on creating a database to sort those key points.  I still don't understand how that works, but basically we need to be able to call up certain key points at different times.  I'm not sure how to word it exactly either.  There's a problem with the processing getting stuck and taking too long.  There was also a problem with linking a section of the library in the code, but he hacked around it.

 

There are two blocks of code that could be used to acquire images.  One from a graduate student is very thorough, but it takes a little longer.  Another one from a manual or somewhere else off the internet or something is what we're using a little bit to test things. 

 

I'm planning on looking over that 26 page report today.  From the very little I could pick out, it describes how to identify objects and environment using various filters.  It talked a lot about Difference of Gaussians (DOG) which is a process that can help in edge detection without using an actual edge detection filter that tends to have a lot of noise.  I don't understand it at all really, but somehow it uses subtraction of one image from another blurred image making it better than a regular edge?  I don't understand at all.  I'm not even saying it right.

 

I'm looking over my notes at this point: "Keypoints are used to find familiarity . . from library", "Keypoint descriptors tend to have high sensitivity but low specificity", "To increase specificity, correct matches are filtered by checking the object in terms of its location, scale, and orientation in the new image.", "Scale invariance is used to identify targets when they're different sizes", "Frequency of sampling . . size of image doubled =  increase number of stable keypoints by 4 times".  I didn't copy any of that directly, and just looking at now, based on some of the things I learned yesterday, a few of those concepts don't make sense in that they're flat out wrong.  I don't understand any of this - yet - I hope it's a 'yet'. 

 

Here's the abstract for that paper:

"This paper presents a method for extracting distinctive invariant features from
images that can be used to perform reliable matching between different views of
an object or scene. The features are invariant to image scale and rotation, and
are shown to provide robust matching across a a substantial range of affine dis-
tortion, change in 3D viewpoint, addition of noise, and change in illumination.
The features are highly distinctive, in the sense that a single feature can be cor-
rectly matched with high probability against a large database of features from
many images. This paper also describes an approach to using these features
for object recognition. The recognition proceeds by matching individual fea-
tures to a database of features from known objects using a fast nearest-neighbor
algorithm, followed by a Hough transform to identify clusters belonging to a sin-
gle object, and finally performing verification through least-squares solution for
consistent pose parameters. This approach to recognition can robustly identify
objects among clutter and occlusion while achieving near real-time performance."

 

Anyway, I can explain how the distance calculation works, at least the mathematical concept, because that was what I did for my project.  It works using the geometric principle of proportional lengths within similar triangles:   Target Distance Calculation Schematic.pdf. The reference line (r) is calibrated before the system is employed.  It is not a physical line, but rather a ratio of pixels/centimeters when those centimeters are viewed by the cameras at (r) distance.  The inter-camera distance, reference line distance, and distance to the target remain constant.  The only variable values are 'a' and 'c'.  These measurements are used to calculate Z.  This system does not require that the size of the target be known.  Just like the human eyes (though we don't notice all this internal calculation), viewed displacement of an object (to contrast the known constant real displacement: inter-camera distance) changes based on the distance of the viewed object.  The farther away an object is, the less it will appear to move when the cameras move.  In reciprical, the closer an object is, the more it will appear to move as the cameras move.  For example, the sun appears to rise and set in the sky throughout the course of the day.  Stars at night also appear to shift throughout the course of the year.  Assume all stars, including the sun, are static, meaning that only the earth is moving.  If the earth is moving the same distance, why does the sun appear to move?  Elementary geometry my dear Watson!  Optical displacement.

 

The visuals below show first my program that matches keypoints between two images (I stole most of the program from Chris but adapted it a bit).  Two pictures of the globe from two different perspectives are matched successfully!  That is a very simple thing to do compared to what the real engineers on this team are trying to do, but my little demo does show the basic concept...even if it's not entirely accurate.

 


DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.

July 1, 2010

 

Today is the last day of the week for me.  I've decided to take Fridays off so I can volunteer at a medical center like I've been doing all year without being completely exhausted by the end of the week.  A few weeks ago, I had some extra time and decided to play piano in one of the unused dining rooms; my supervisor heard me, and instead of getting in trouble, I've been promoted to play for an hour during dinner and take over the 2 hour music session previous to that on some occasions.  I'm trying to practice reading music again, but so far I've just been doing improv.  Anyway the next few days are going to be fun and easy.  I get off Friday, have the weekend, have Monday off for the government holiday, leave for Wallops Island on Tuesday, get back on Thursday, and may or may not come in next Friday.  I've also been discovering other cool stuff they have around here.  I took the advanced belt Tae Kwon Do class yesterday held in building 26 room 205 from 5:00 to 7:15.  I showed up 20 minutes late, but they hadn't started yet.  I was under the impression that it was being held in building 8 (the regular classes on Mondays and Thursdays are there).  I couldn't get a taxi for whatever reason (and I'd overused it that day going back and forth to and from the library twice).  I need to stop using taxi so much.  It's free, but still I have to make my trips more efficient. 

 

Anyway I hiked about five blocks from building 8 to building 26 (building 26 is nowhere near building 25).  Building 8 was holding a dance class for tango, and I actually considered staying there instead of going to karate.  I chatted with the astronomers teaching the class for a few minutes, and it was interesting, but decided a vigorous walk across campus in heat and dress clothes in hope of getting a chance to spar and do push ups sounded more attractive.  I'm hoping to try out that class in two weeks though after we get back from Wallops.  Once I got to karate, things were ok though.  I was the only other black belt besides the instructor, though he has a 2nd DAN, and I'm just a 1st.  I was the only girl.  I got to do a little bit of leading even on my first day.  I got to call out numbers to lead half the class, do some example kicks, yell loudly, etc. etc.  It was fun.  I was beginning to feel exceedingly incompetent (and still do), but it was nice to be able to do something relatively well. 

 

I haven't been able to contribute anything to this project so far, though I have been trying to understand what's going on at least.  I spend most of my time here reading articles, books, theses, and doing a little bit of practice programming for my benefit only.  It looks like our group is nearing the end of one stage of production.  Kevin and Jason are finishing up the mechanical processes.  Right now they're fixing the wheels that wouldn't turn.  This morning, the entire system kept shutting down randomly; on start up once it presented the message "thermal overload".  I don't know what happened since then in terms of specifics, but there were a lot of people working on the problem.  It seems to be fixed now though.  For awhile they were playing around with speakers, trying to get Astrobot to spit out bytes from Family Guy everytime it bumped into something.  Of course that's going to be deleted before presentation time, but it was funny.

 

Stereovision software is working well too.  It looks so amazing!  I wish I could do the things they're doing, but I'm having trouble just trying to grasp it.  Anyway, the cameras are getting live feed that is displayed in four panes on the screen.  The top two show keypoint matches between the two cameras' images.  The bottom two show keypoint matches between images from the same camera but from images taken sequentially, thus indicating movement.  The more rich an environment, the more keypoints tend to be matched. As mentioned before I believe, images are cast in black and white to indicate distance estimation in terms of the gradient.

 

As for the population here, there are about 40 interns with Dr. Mike Comberiate in charge.  A large group of them are foreign nationals: Brazil, Mexico, Spain, Puerto Rico, Pakistan, Switzerland, etc.  Consequently, many of us find ourselves speaking or thinking in Spanish at least some of the time.  Everyone speaks English also.  The majority of the foreign nationals are Brazilians; I've picked up a few Portuguese phrases, but I doubt I'd be able to order lunch at a Brazilian drive through if my life depended on it.  There are a total of seven girls including me that I can think of right now.  Almost everyone in here is graduate, and the rest are undergrad.  The youngest person is 15.  Apparently the youngest person who's ever worked here was 13.  Most of the high school students (total of about 6 including me) are seniors.  There are many projects going on simultaneously right now, and I'm not familiar with all of them unfortunately.  There's ASTROBOT (the one I'm working on).  LIDAR Polar Bear, Penguin 1, and Penguin 2.  There are at least three other projects going on in the other room and possibly one more taking place in the room I'm in.  It's kind of hard to keep everything straight because all the teams work closely.  My group includes Chris, Jason, and Kevin.  Chris is software; Jason and Kevin are both software, but have been doing a little more hardware in the last few days to check their codes.  Chris is a graduate student going to school somewhere up north.  I don't know where Kevin goes, but I'm under the impression that it's south somewhere, and Jason is Puerto Rican.  They're all amazing smart and of course know  100% more than I do.  One guy named Kodiak (I think he's undergrad) is from Alaska.  Courtney is from New York.  Will is a senior at Bucknell, but he's originally from my hometown and went to Glenelg private school.  He and Kodiak have been giving me rides to and from karate lately, and they're pretty cool.  I got to run errands around the campus with the whole group of foreign nationals.  I wish I were fluent. I would feel left out, but they spoke everything in Spanish first and English right after so I wouldn't miss anything.  I had the longest chat with the head engineer of the LIDAR project from Mexico.  He and his team slept over in the lab the night before trying to get ready for a demo to the heads.  I'm usually the first one in the computer room in the morning, sometimes the first one there period.  Today though, I walked in, turned on the lights and accidentally woke them all up.  NASAMike brought in donuts today, so we got food, hurried around cleaning the office.  I was sorting through clips and wires, tape, odd nuts and bolts, vacumming, trading chairs with the lab room.. 

 

Chris didn't really pay attention.  NASAMike got the whole bunch of us in an uproar trying to get ready, but Chris just went out to the meat truck to get breakfast and started working.  It was kind of fun.  I stayed at my desk to work through lunch again today, because I felt guilty about not working in the morning.  Matias came over and asked about what I was learning, what I'd done before, what I wanted to do, etc.  He introduced me to the advantages and disadvantages of about 6 popular languages including C, C++, C#, Python, Java, Assembly, etc.  He's a pretty interesting person, and I learned a lot - definitely an engineer. I talked to him for about an hour.

 

I don't think I'm a true engineer at heart.  I'm a show person.  I don't think like an engineer would.  I understand how they think...in that I can understand why they come to certain conclusions, but I just can't make those same leaps myself.  Maybe it's that I'm not as smart as them.  I'm not half as smart as half the people I know.  I'm not one of those people that can 'see things that most people miss', but it seems that I am one of those people that can say everything people see.  Why am I successful in science?!  I'm not.  I'm not at the top of my class, and math just about kills me, so why is it that I can work at NASA in the first place???  Why did I even go to Reno!  I still can't figure that out.  I'm not an engineer, but I'm pretending to be one, and somehow I think that's dangerous.  I'm not a programmer, and I didn't like to build radios and gadgets when I was a kid like my brother did, and I didn't take things apart to figure out how they worked, and I didn't sit outside and think about how things worked.  That's what scientists do.  They sit around and try to figure out how things work.  I don't even know what I did as a kid, but it wasn't that.  Sometimes I seriously wonder if all of this is fake.  I'm not an engineer, but I'm faking it.  I'm pretending I know how to program, and I pretend to know all about robots, and I'm pretending to love math when really I hate it more than anything.  I just don't think logically.  I don't know what it is, but I'm just not an engineer, and though I can explain what they're thinking better than even some of them can, I just can't make myself think like they do enough to come up with the ideas myself.

 

Anyway, we have visitors coming through the lab all the time.  I've presented the stereovision system a few times, but I'm only comfortable talking to incoming interns so far.  Some big important person - he couldn't have been the actual head of NASA I don't think, but someone pretty high up in administration came down to check out the facility last Friday.  Unfortunately I had to leave early that day and didn't get to see the presentations.

DRAFT: This module has unpublished changes.

July 9th, Friday

 

At this point we added a template matching algorithm that AstroBot uses to find the charging station. This was successfully implemented today. A series of images with the charging station was first used in which the best match was identified using a region of interest box. A second stream of images without the charging station in view was then used to determine that the algorithm at that point would identify a match (the best match) even if the target was there or not. To solve this problem, we added a threshold that had to be matched for a certain ROI to be considered a match. When we displayed the values of the best matches on images with the charging station and ones without, there was a significant difference between average values, and from this a threshold number could be somewhat arbitrarily identified. After implementing this threshold requirement, the template matching algorithm correctly identified the target the majority of the time, while refraining from matching altogether (correctly) when the target was not in view. Image streams were provided in color, though the rest of the program at this point (with the keypoint matching) functions using black and white. I hope to either change the template matching system to work with greyscale images, or Chris will adapt his system to incorporate RGB. There are potential problems in both these changes. If Chris's system works with color, there is more than three times the amount of data that must be review in order to match keypoints; consequently the whole keypoint matching process will take much longer. If I work in greyscale, template matching will likely be less accurate, because it contains less variation, crucial in good matching technique.

 

Today we did several informal group presentations of what AstroBot was doing so far. I presented twice to introduce the concept of stereovision, distance calculation, long term goal of the project, and how template matching work. I used my “geometric principle of proportional lengths within similar triangles' schematic with the equation to explain distance calculation. I created that visual for my journal entry, but it came in handy here. I felt like I was presenting my freshman year science project all over again and it was fun. I used the program Chris and I built for template matching; we finished only a few minutes before presenting. To explain the template matching concept, I used a lot of the wording I'd created to present my 8th grade project.

 

Facts about the system so far:

  • Only one target is matched in an image
  • A target is not neccesarily found in every image
  • It currently works using color images and a color template
  • Template was created from an input image
  • Template always matches the target correctly so far when a match is provided in current system
  • Target is occasionally missed by the algorithm in current system
  • Distance to the target can be calculated using the prementioned

DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.
User-uploaded Content
DRAFT: This module has unpublished changes.