Monday, March 31, 2014

Turtlebot Tele Presence Robot


Introduction:
The goal for my project is to use the Turtlebot Robot that the Computer Science department owns and use it as a tele-presence robot. A tele-presence robot is one that is controlled from a distance and conveys the image and voice of the operator to the area that the robot is in. This way, though the operator could be far away, his or her presence is brought to the area of operation and they can participate to some degree.

A tele-presence robot typically has a mobile base and a screen with a webcam. The screen shows the operators likeness, and the webcam allows the operator to see the robot's surroundings. The robot operator could control the robot from a desktop computer located at any spot. In my case the Turtlebot provides the mobile base and the laptop that comes with the Turtlebot provides the viewing screen and the webcam. Typically when operating the Turtlebot the laptop is closed and placed on one of the low shelves that sit on the Turtlebot's base. For my project the laptop is left open and mounted on top of the top shelf.

Procedure:
The project requires that the robot be attached to another computer via the internet so that video information can be passed from the movable base to the operators computer and also back from the operators computer to the movable base. Instructions to the movable base must also be transmitted. These instructions would originate with the operator and would simply tell the base how to move.

The tool that is used to transmit information to and from the base is the Google Hangout. Google Hangouts can be started by anyone with a Google account. Google provides a framework for enhancing the Google Hangout experience called the Google Hangout Extension. Google encourages developers to write their own Extensions and info on writing Extensions can be found easily on line. Extensions can be programmed in Javascript.

Also, the mobile base must be programmable. The Turtlebot robots come with ROS installed on them. ROS stands for 'Robot Operating System'. ROS has lots of information on line regarding how to program their robots using Python or C++. For the purpose of this project I used Python.

I should mention here that there is a requirement that the Hangout Extension communicate with the mobile base. This would be a difficult thing to program but is handled nicely by a ROS library called 'Rosbridge Server'. This group of programs allows you to send info from a javascript enabled browser, through a web socket, to the ROS robot. This functionality is not supported by the Firefox browser, but is supported currently by the Google Chrome browser. For this reason I use the Chrome browser.

Below is a list of objectives, and following them a description for some and where the project stands on them. After completing the first few goals more were added in an attempt to have the robot navigate an area for itself.

  • Causing the Mobile Base to Move
  • Establishing a Google Hangout Extension
  • Establishing Project Resource Management
  • Directing the Mobile Base from the Hangout Extension
  • Arranging Elements of the Hangout Extension Visually
  • Add ROS Functions for Mapping
  • Add ROS Function for Navigation of a Map
  • Incorporate Mapping and Navigation in the Layout of the Extension
  • Allow for Remote Control of Mapping and Navigation
  • Write Library Type Software for Storing Maps
  • Map Some Areas and Navigate them Autonomously

Description of the items in the list are below.

Causing The Mobile Base to Move:
ROS has a concept called a 'topic' and 'messages' which are passed along topics. It was possible to write messages in Javascript and pass them to the robot along topics. These messages would direct the robot to move. There are two wheels under the base of the Turtlebot, and the Turtlebot is round. To cause the robot to turn 'Angular' messages are passed. To cause the robot to move forward or back, 'Linear' messages are passed. It is possible to direct the robot to turn and move forward at the same time, but the Hangout Extension never does this.

Establishing A Google Hangout Extension:
Google Hangout Extensions are relatively easy to program. You do have to host the extension somewhere, and for this I use Google App Engine. The biggest problem with the Hangout Extension is that it's slower transmitting information than I would like. The Extension is called 'Tele NP' and is set up as a developer extension. This way it is only visible to project members. The App Engine instance is called 'awesometelenp'. This name is obscure, but I needed to find an instance name that was descriptive on the one hand but original on the other hand.

Establishing Project Resource Management:
Google Code is used for the code repository. The name of the project on the Google Code site is 'telenp'.

Directing the Mobile Base From the Hangout Extension:
This was a matter of employing the rosbridge server software with the Hangouts Extension, the Chrome web browser and the ROS operating system on the robot. As I mention above, under good conditions the feedback from the robot to the operator is OK, but under poor conditions the feedback is too slow.

Arranging Elements of the Hangout Extension Visually:
I am not by any stretch of the imagination a visual artist. I have created several screens in the hangout to accommodate different functionality. I have tried to give each function its own separate space.

Add ROS Functions for Mapping and Navigation of a Map:
This is the stage that I'm at now. ROS provides for something called an 'Occupancy Grid' which is a sort of map. ROS also provides mapping software that allows you to make your own maps. ROS also provides navigation software that lets the robot navigate through an already made map. I'm working on making it so that you can use this software all remotely from the operator's computer.

Incorporate Mapping and Navigation in the Layout of the Extension:
This is an ongoing process. One big achievement was to allow the user to see the map when that map was created and stored on the remote computer. The mobile base collects information that goes into a map (when the mapping software is running) but the user really needs to see this map in order to tell the robot where to start and stop when the navigation software is running.

Allow for Remote Control of Mapping and Navigation:
It turns out that mapping software and navigating software does not coexist well. When one is running the other must not be running. A way must be found to start one when it is desired and then stop it when desired, and start the other. This was not easy but has recently been accomplished by employing ROS software for 'RAPP' management. Rapps are 'Robot Applications'. ROS uses these tools to control robots from Android phones, and I reuse that for my application.

Write Library Type Software for Storing Maps:
While some Library type software exists in the ROS system, it is partially incomplete and it is also poorly documented. The ROS system uses 'Mongo' for its map storage in a package called 'map_store'. The on line documentation for 'map_store' is poor, and the software itself is used by only one program that I know of. For this reason it didn't meet my needs very well. I used Python and Mongo to write my own map library software. I felt that the map storage software that I was using was saving improper values, so if I make my own, maybe the values will come out right. That step was successful.

Map Some Areas and Navigate them Autonomously:
So far I have mapped different areas, and recently have navigated them autonomously and from remote control.


Conclusion
The Turtlebot 2 robot is a mobile base type robot that can be used for tele-presence.

The Robot Operating System (R.O.S.) is a good tool for robot development. It can be used for manipulating robots in many ways. It can be used to direct the movements of a mobile base type platform.

Google Hangouts is also a good tool for the transfer of video, audio, and even text. In our example we use it to transfer instructions for the Turtlebot 2 robot.

There were some shortcomings to the project. One was that teleoperation of the robot was slow if the wifi connection was bad or the hangout was slow, which sometimes happens.