I arrived at USC on Saturday, May 20th
and stayed with Helena Wotring, another CRA-W DMP participant, for two
days. On Monday the 22nd, I took care of administrative issues, such as
paying and moving into my apartment, and obtaining a USC ID card.
Despite getting lost around campus several times, I was able to take
care of these issues successfully. The campus itself is quite big, but
beautiful - it is much bigger than what I am used to at Bucknell.
After I moved into my apartment and ate
lunch, I reported to the USC Interaction Lab for my first day of work.
At the lab, I met Dave Feil-Seifer, my student mentor, and he explained
my project for this summer. He also introduced me to the other graduate
students in the lab. I met Professor Maja Mataric, my professor mentor,
the next day. Everyone seems nice and friendly, and I am sure that I
will be able to get assistance if I am confused or stuck on something.
For the rest of the week, I downloaded
Player/Stage, the two programs I will be using for my project, into my
directory. All of the programs are in C, a language I am not familiar
with. However, I know C++ very well, so I should be able to adapt to C.
After I downloaded Player/Stage, I
created a sample file that contains (x, y) coordinates and theta
(orientation in degrees). For this week and the beginning of next week,
I need to modify the Player program such that it will read the sample
file and display the waypoints on the screen.
Week Two (May 29-June 2)
Week two consisted of getting playernav, a client server in
Player, to read waypoints from a sample file and to display those
waypoints on the screen. I accomplished the first task (getting
playernav to read waypoints from a sample file) very easily.
Displaying the waypoints on the screen,
on the other hand, was a totally different matter. I had to use
GnomeCanvasItem and GnomeCanvasPoint in the GDK library to display the
waypoints, but I was totally unfamiliar with the functions in these two
classes. Fortunately, with a little help from Dave, I was able to
display the waypoints on the screen, but it took me several days to do
it.
On a side note, I was able to spend a day
with my cousin, P'Ae. We spent the afternoon in Thai town eating and
shopping at several stores. The food was fantastic; I ate chicken satay
(chicken on a stick), yum woon sen (spicy vermicelli noodles with
chicken and other assorted herbs and spices), and rad nah (rice noodles
stirred with gravy and vegetables). The great part about Thai town is
that everything is cheaper than the stores in New York/New Jersey. I
had a great time with my cousin, and I hope to explore more hidden gems
in beautiful California.
My goal for next week is to write code
that moves the robot from one waypoint to the next waypoint. In other
words, I am at the heart of my project. Judging from the past two
weeks, I can conclude that I am making very good progress on my project.
Week Three (June 5-June 9)
As I explained in last week's journal, my
objective for this week is to navigate the robot from one waypoint to
the next waypoint. I needed to do three things:
Create a new function in playernav, called move_robot().
Copy and paste the lines of the
original code in playernav that moved the robot
with a mouse click.
Modify the copied code such that the
robot will move from one waypoint that was read in the file to the next
waypoint.
I was able to accomplish the first and
second tasks fairly easily. However, I had trouble completing the third
task - I was able to get the robot to move from point A to point B, but
the robot could not move past point B. Dave looked at my code very
carefully and verified that my code was correct, but he wondered why
the function would not work the way I wanted it to.
After looking at my code for over an
hour, Dave simply threw his hands in the air and created a new gameplan
for me. He wanted me to keep the original C file, which only displays
the waypoints on the screen. This time, however, we added a C++ file
which will move the robot from point to point. We did this for two
reasons: A) I will need to add Helena's and Donovan's code, which are
written in C++, to my program, and B) Dave has more experience with
writing code to move the robot in C++ than C. After several days, I
finally got the robot to move from point to point. It took me the whole
week to do it, but all of the hard work (and stress!) paid off.
Outside of the lab, several of us at the
lab went to Santa Monica to play sand volleyball. I used to be a
varsity volleyball player at my high school, but it has been three
years since I played. My rustiness showed when I misjudged the ball
several times. As a matter of fact, I was hit in the face not once, but
twice! Although I did not have my 'A' game that day, I still had a lot
of fun. It also allowed me to bond more with the people in the lab.
Week Four (June 12-June 16)
For the past several weeks, I have
questioned when I will actually work with the robot. Finally, after all
these weeks of getting familiar with the robot simulation program, I
got to conduct tests on the Pioneer robot. Dave wanted me to collect
data on how the robot avoids obstacles (such as chairs and recycling
bins), how well it turns around corners, and how accurate the robot
moves from point to point. Before we conducted all the testing,
however, Dave showed me how to operate and move the robot using playerv. After the demo, I simply
played with the robot to become familiar with it and playerv.
For the rest of the week, I collected
data on the robot. Surprisingly, the robot is much smarter than I
thought. It uses sonor to navigate around, and it can avoid most
obstacles if it is at least 0.60 meters away from the object. However,
it cannot detect chair legs and metal objects very well, so I concluded
that Dave needs to put cardboard over metal objects (the robot avoids
cardboard) before a tour starts. The robot is also fairly accurate when
it moves from point to point; it stops only about 20-30 centimeters
away from a designated point. With a little fine-tuning of the robot's
speed and turn rates in the configuration files, I should be able to
improve the robot's performance.
I am leaving this Saturday, the 17th, to
see my sister's graduation. I will be gone for a week, but I will keep
in contact with Dave to check on the status of the tourguide project. I
am confident that I will be able to finish my part of this project on
time.
Week Five (June 26-June 30)
I came back from New Jersey this past Saturday,
and I was exhausted from the long flight back to California. I spent
my vacation with family and friends, and went to see my sister
graduate from high school. I had a great time at home, but time
definitely flies when you are having fun. Although I wish I could
spend more time at home, it feels great to be back in California,
especially in the sunny weather (it rained most of the time while I
was in New Jersey).
As far as work is concerned, I started to work on
the occupancy map of the lab. Specifically, I measured the lengths
and widths of the desks in the lab, and measured the distances
between each workstation. The lab is quite big, so it took me about
three to four days to complete this task. I did not have enough time
to finish the actual map this week, but I should have all of the
necessary data to complete it by next week.
Maja suggested that our team, the Jeeves team,
should come up with a timeline of due dates. We agreed that we
should be able to run a simulated tour on Stage by
next Friday at the latest. We also decided to get a working
demo of the project in two weeks. Hopefully, I will be able to
finish the map on time so that our team can run a simulated tour.
The next couple of weeks will require a lot of hard work and effort
from each of us, but I am confident that we will accomplish our
ultimate goal in the end.
Week Six (July 3-June 7)
This week was definitely interesting. I
finished creating a map of the lab that I started on last week,
but for some odd reason, playernav could not load the map
correctly. I tried fixing some things on the map, but
nothing seemed to be the magic charm. Eventually, Dave created
a functional map of the lab for me, which worked with playernav.
Now that I got my map finished, I started to
run simulated tours with the programs I wrote in order to finetune
things. The good part is that the robot moves from point to point.
However, the bad part is that the robot sometimes drifts off course or does random spins
at times. So, for the rest of the week, I will work on fixing the
bad part. Also, I will integrate Helena's speaking functions into
my simulated tour for further testing. I am a little behind
schedule, but I should be able to catch up with my work in the next
couple of days.
Update on my social life in California: On Friday,
the entire lab decided to eat lunch at the Cheesecake Factory and
watch Pirates of the Caribbean afterwards. I have never been to
the Cheesecake Factory before, but I have heard lots of positive
reviews about it. And, just as everyone says, the food was very
delicious. I did not eat cheesecake (which the restaurant is known
for, obviously), but their pasta was fabulous. I guarantee that
you won't leave the restaurant disappointed.
After we got our stomachs full, we went to watch the movie. The
movie was very good, especially with the special effects. I won't
give any details away about the movie, but all I have to say is that
there are a lot of surprises.
Week Seven (July 10-July 14)
This week I finetuned the robot's movement in
a simulated program. Finally, after hours and hours of adding and
deleting waypoints from the input file, I got the robot to move from
point to point without doing any strange spins. It is not entirely
perfect, but the robot should at least be able move around
the lab efficiently.
During the middle of the week, I integrated
Helena's code into my navigation program. Specifically, I tested
her code to make sure that the robot can talk after it gets to each
destination. It turns out that the robot can talk, but it talks while
it is moving to the next waypoint. So, my task for next week is to
figure out a solution to this problem. Also, Dave wants me to code
the buttons on the phidget board that users can press to learn
more information about each grad student in the lab or to quit the
tour.
Social life: I took a day off on Friday to walk
around Pasaadena with my friend, Mariko. We ate a Japanese
restaurant for lunch and shopped at various stores along Colorado
Avenue. It was very hot outside, but it was definitely worth it.
The great part about Los Angeles is that there are different modes
of public transportation. Mariko and I were able to get to Pasadena
in just 20 minutes by bus and train, which is not too bad
considering that Los Angeles has tons of traffic.
Week Eight (July 17-July 21)
For this week, I continued testing the robot
navigation in a simulated environment. As I said from last week's
journal, I had to figure out why the robot is talking while it is
moving. Well, I figured out the source of the problem: the
PlannerProxy in Player takes a very long time to update itself
after the robot is finished talking. The robot moves to the next
destination as planned, but PlannerProxy tells the robot that it is
at its previous waypoint (which it visited already). Nate, another
grad student at the lab who is familiar with robot navigation,
looked at my code and tried adding a couple of lines of code into
my program. However, nothing worked, so he sent me a copy of a
robot navigation program that he worked on for another project.
I couldn't fix the PlannerProxy problem this week, but hopefully
I will get it resolved as soon as possible.
While I was trying to fix PlannerProxy, Helena
was nice enough to work on the phidget board button panel for me.
After she was done coding the buttons, I tested the buttons out in
the simulated tour on my computer and it worked (good job Helena!).
Once Donovan gets the localization stuff up and running, I should be
able to test the tour in real life. Our whole project is finally
being put together...yay!
In other news, I am going on a camping trip to
Yosemite National Park with several members of the lab. We are
staying there until Sunday. Hopefully the weather will cooperate.
Week Nine (July 24-July 28)
So, it turns out that Nate's sample code did not
solve my problems from last week. He had some lines of code that
I didn't have in my program, but those extra lines of code did not
work in my program. When Dave came into the lab, I told him about
my problem, and he looked at it. He couldn't explain why my
program was behaving weirdly, but he came up with a solution:
use threads. So, I used threads and the program worked. Kudos to
Dave!
In other news, localization appears to be working
on the robot. Nate is finetuning the camera on the robot to detect
shapes on the ceiling. Also, the robot's speaking mechanism appears
to work fine. Hopefully we'll get a working tour before
I leave for NJ.
Social life: Last weekend, I went camping with
several members of the lab at Yosemite National Park for two nights.
We went hiking (for 12 miles in the scorching sun), rafting, and
sight-seeing. The best part about the trip was seeing all the
amazing waterfalls and mountains. The scenery was a drastic change
from the tall buildings and polluted air in Los Angeles.
All in all, I had a good time despite the heat and mosquito bites.
Week Ten (July 31-August 4)
I can't believe it's my last full week here. It
looks like we won't have a fully operational tourguide before
I leave. Although I finished my portion of the project, I did not
have the chance to put my code into the robot because we needed to
get the localization finetuned. At least I was able to produce
an operational tour in Stage, a simulated program.
Since I was finished with my part of the
project, I decided to start my final report for the DMP. I have
read several papers about path planning and navigation, and I
plan to include these sources in my document. I should have a
finished product by early next week if possible.
Maja was nice enough to treat the entire lab for
lunch at the University Cafe. The food was delicious, especially
the fruit desserts. We talked about many things going on in the
lab, including our tourguide project. Donovan will remain at the lab
for the rest of the summer, so he will continue working on our
group project.
Well, this concludes my journal for this summer.
Although I am leaving for New Jersey next week, my internship
officially ends this week. I want to thank Maja and the rest of the
people at the Interaction Lab for letting me work here. I also
want to thank the CRA for giving me this opportunity in the
first place. And last, but not least, I would like to thank you,
the reader, for following my experiences here at USC. I hope you
had fun reading my journal.