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.
No comments:
Post a Comment