Journal

Week One (May 22-May 26)

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:

  1. Create a new function in playernav, called move_robot().
  2. Copy and paste the lines of the original code in playernav that moved the robot with a mouse click.
  3. 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.