GithubHelp home page GithubHelp logo

virtigex / r2k9_telepresence Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mees/tekniker_telepresence

0.0 2.0 0.0 6.55 MB

The aim of this project is to develop a telepresence and teleoperation application in the robotic field using open source software

Home Page: http://www.youtube.com/watch?v=ObFuc7oyMhU

License: GNU General Public License v3.0

r2k9_telepresence's Introduction

The aim of this project is to develop a telepresence and teleoperation application in the robotic field using open source software
This application has been done by Oier Mees during a summer internship at Tekniker Research Center and is now maintained by Ane Fernandez <[email protected]>

Used tools:
  Hardware
    Segway rpm 200 robot (with following sensors: laser range finder, thermopile, sonar, bumper, encoder, stargazer IR to read tags in indoor navigation)
    Kinect camera on top of the robot
    Webcam for the client
    PS3 Controller

  Software
   ROS http://www.ros.org diamondback (also works with electric)
   Ubuntu  10.04 Lucid
   Opencv2 stack for the image handling
   PS3Joy stack for the PS3 controller 
   Openni stack for the kinect
   audio_capture stack to capture and stream the webcams microphones sound


How to compile and run the application
--------------------------------------
First of all, configure ROS for multiple machines by following the next tutorials:
http://www.ros.org/wiki/ROS/NetworkSetup
http://www.ros.org/wiki/ROS/Tutorials/MultipleMachines
It is important to change the $ROS_MASTER_URI variable and that both machines can resolve the name of the other (check /etc/hosts file).

on the robot:
  1) enable navigation mode, depends on the robot
  2) start kinect topic with 
     $ rosrun openni_camera openni_node
  3) optional: if you are streaming the video over wifi, you may want to resize the image to decrease the latency using the code kindly provided by José María Martínez Otzeta
     $ rosrun tekniker_telepresence image_resizer  50 5 /image:=/camera/rgb/image_color
     in this case, the launcher file of the client has to be changed  to remap the rgb topic by uncommenting the following line
     <remap from="/camera/rgb/image_color" to="/image_resized"/>
  4) start the depth service, which will return the mean depth (x,y) coordinates in the kinect
     $ rosrun tekniker_kinect depth_server
  5) optional: if you don't have an actual robot you can always use a simulator (the following packages are not provided)
      $ roslaunch tekniker_simulation tmm_stage.launch
      $ roslaunch 2dnav_segway_rmp move_base_tmm_simulator.launch
  6) After completing the steps of the client machine, you have to launch audio_play to play the sound that is streamed over the /audio topic
      $ rosmake audio_play
      $ roslaunch audio_play play.launch


on the client machine:
  1) enable ps3 controller, see http://www.ros.org/wiki/ps3joy/Tutorials/PairingJoystickAndBluetoothDongle
     $ sudo bash
     $ rosrun ps3joy ps3joy.py
     press the pairing button. If it doesn't activate, try the methods at http://www.ros.org/wiki/ps3joy/KarmicInstructions
     After pairing the controller, you have to press the button with the rectangle to activate joystick teleoperation and
     press it again to disable it. Then you can enable gyro teleoperation by pressing the button with the triangle.
     Remember always, that the robot can't be navigating to a goal or have the "navigation on" checkbox enabled in order
     to activate the teleoperation via controller mode. This has been decided for safety purposes. 
     So if you think that pressing the buttons on the controller doesn't work, first check the aforementioned condition.
     
   2) compile and run the actual program with the launcher file
     $ rosmake tekniker_telepresence
     $ roslaunch tekniker_telepresence tekniker_telepresence.launch 


Known Issues
------------

OpenCV2 has to be compiled with v4l and ffmp support to enable webcam capture. 
You will have to this if you get the "ERROR: webcam capture is NULL" message and no other camera index works. 
Try enabling the v4l and ffmpg flags in opencv2 Makefile and compiling it again
(rosmake opencv2) you may have to delete the ROS_NOBUILD.

As mentioned earlier, if you can't pair the PS3 controller you may have to disable other bluetooth devices for it to work.
http://www.ros.org/wiki/ps3joy/KarmicInstructions

The battery progress bar doesn't change. Our segway driver had an issue and didn't expose the status information.
The callback is done, normalizing the values to a scale and updating the progressbar should be trivial

Streaming kinect audio over ROS doesn't work currently. Libfreenect unstable branch (https://github.com/OpenKinect/libfreenect/tree/unstable) 
has some working demos for the kinects 4 mics, but a ROS node for it is missing.
The easyest way to bypass this hurdle is to add a external mic and use the audio_capture stack

When exiting the application on the client, only the tekniker_telepresence node is finished, the audio_capture and ps3joy nodes have to be terminated with ctrl-c.
Since they are independent nodes, the behaviour is correct, but it would be nice to sync the exiting.

If move_base_server of the navigation system is not activated, the application freezes when trying to navigate because it gets stuck waiting for the server to come up

The path of the controller icon is an absolute path, so you want to change it (look for it at the beginning of ui.cpp)


Future work
-----------

Solving the known issues

Show a map to locate the robot

Give some kind of feedback of the nearest obstacles distance in order to help navigation

Show video and audio stream quality and feedback on the UI like in skype videoconferences

Migrate from wxWidgets to Qt

Because of acumulated errors during the navigation, the  estimation of the (robots) localization could differ from reality. Added this to the uncertainty of the kinects depth sensor, 
it can happen that the robot thinks that the clicked (x,y) destination is unreachable. In the tests, it sometime happened that if the clicked destination (a person) was near wall, the robot couldn't reach the destination because it calculated that the person was inside the wall due to the acumulated errors. An option could be to analyze the surrounding points of (x,y) in a map from map_server and determine if the point is really unreachable. If yes, a nearby destination could be chosen instead



   
   

r2k9_telepresence's People

Contributors

mees avatar anefg avatar

Watchers

James Cloos avatar Steve Austin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.