Skip to content

Simple, yet stable bearing-only navigation

Notifications You must be signed in to change notification settings

QVPR/stroll_bearnav

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STRoLL BearNav

Simple and Robust Visual Teach-and-replay Navigation System

Authors: Filip Majer, Lucie Halodová, Tomáš Vintr and Tomáš Krajník

Bearnav is a simple teach-and-repeat visual navigation system robust to appearance changes induced by varying illumination and naturally-occurring environment changes. It's core method is computationally efficient, it does not require camera calibration and it can learn and autonomously traverse arbitrarily-shaped paths. During the teaching phase, where the robot is driven by a human operator, the robot stores its velocities and image features visible from its on-board camera. During autonomous navigation, the method does not perform explicit robot localisation in the 2d/3d space but it simply replays the velocities that it learned during a teaching phase, while correcting its heading relatively to the path based on its camera data. The experiments performed indicate that the proposed navigation system corrects position errors of the robot as it moves along the path. Therefore, the robot can repeatedly drive along the desired path, which was previously taught by the human operator. Early versions of the system proved their ability to reliably traverse polygonal trajectories indoors and outdoors during adverse illumination conditions [1,2], in environments undergoing drastic appearance changes [2,3] and on flying robots[4]. The version presented here is described in [5,6] and it allows to learn arbitrary, smooth paths, is fully integrated in the ROS operating system and is available on-line in this repository.

Actual instructions

  1. Unsure if opencv needs to be installed as below on Ubuntu 18 (I tested with Ubuntu 16).
  2. Teach
    1. Start the core mapping node: roslaunch stroll_bearnav mapping-core-miro.launch
    2. Start the mapping gui node: roslaunch stroll_bearnav mapping-gui-miro.launch
    3. Enter a map name between the quotation marks after prefix. Eg. prefix: 'map-test'
    4. Click SEND GOAL (should be "start mapping")
    5. Drive the robot around on the teach run, then click CANCEL GOAL (should be "finish mapping")
  3. Repeat
    1. Start the core navigation node: roslaunch stroll_bearnav navigation-core-miro.launch
    2. Start the navigation gui node: roslaunch stroll_bearnav navigation-gui-miro.launch
    3. Load the map: in the window stroll_bearnav/loadMap GUI Client, enter the map name after prefix. Eg. prefix: 'map-test'
    4. Click SEND GOAL in that window (should be "load map")
    5. In the window stroll_bearnav/navigator GUI Client, click SEND GOAL (should be "start repeat")
    6. The repeat run will start. Best to reload the map if you want to run it again, else it seems to get confused when repeating control commands

Prerequisities - before the seminar

  1. You should install Ubuntu 16 with ROS kinetic or Ubuntu 18 with ROS melodic.
  2. Also, you should install other prerequisities: sudo apt install git.

Ubuntu 16

Nothing special needs to be done here. You can continue with installation.

Ubuntu 18

If you are using Ubuntu 18, you will need to compile opencv with opencv-contrib:

  1. Create a folder to perform the compilation and switch to it: mkdir ~/opencv;cd ~/opencv
  2. Download opencv: git clone -b 3.4 --single-branch https://github.com/opencv/opencv.git
  3. Download opencv-contrib: git clone -b 3.4 --single-branch https://github.com/opencv/opencv_contrib.git
  4. Go to opencv folder, create a build folder and switch to it: mkdir opencv/build;cd opencv/build
  5. Tell opencv to compile with the contrib (the following lines are ONE command, do not copy/paste it in separate): cmake -DOPENCV_ENABLE_NONFREE:BOOL=ON -DOPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules ~/opencv/opencv
  6. Compile it: make -j5.
  7. Install it: sudo make install

Installation - before or during the seminar

Prepare your environment in the home folder:

  1. cd , mkdir -p ~/robotika_ws/src, cd ~/robotika_ws/src, catkin_init_workspace

Make your usb camera work:

  1. Clone the usb_cam ROS driver: git clone https://github.com/gestom/usb_cam.git
  2. Compile it: cd .., catkin_make
  3. Source your environment: source devel/setup.bash
  4. Make your camera easy to access: sudo chmod 777 /dev/video0
  5. Run the camera node: roslaunch usb_cam usb_cam-test.launch
  6. Keep the camera running and open a new terminal to continue.

Make the stroll_bearnav package work:

  1. cd ~/robotika_ws/src
  2. Clone the stroll_bearnav package: git clone --branch robotika_sk_19 https://github.com/gestom/stroll_bearnav.git
  3. Compile it: cd .., catkin_make
  4. Source your environment: source devel/setup.bash
  5. Run it: roslaunch stroll_bearnav stroll-core.launch
  6. Open a new terminal, source your environment and check the image features: rosrun rqt_image_view rqt_image_view /image_with_features
  7. Open a new terminal, source your environment and check the system structure rosrun rqt_graph rqt_graph
  8. Run the operator GUIs: roslaunch stroll_bearnav stroll-gui.launch
  9. Now find the mapper client gui and create a map by entering its name, e.g. A behind the fileNameclick Send goal, wait for feedback and then click Cancel goal.
  10. Now find the loadMap gui, enter the map name in the prefix and click Send goal
  11. Start the navigation by clicking Send goal in the navigator gui.

Test how the image features' matches from the map to the current view reflect the pan of the camera.

A detailed system description is provided in [5].

References

  1. T.Krajnik, L.Preucil: A simple visual navigation system with convergence property.In European Robotics Symposium, 2008. [bibtex]
  2. T.Krajnik, J.Faigl et al.: Simple yet stable bearing-only navigation. Journal of Field Robotics, 2010. [bibtex]
  3. T.Krajnik, S.Pedre, L.Preucil: Monocular navigation for long-term autonomy.In 16th International Conference on Advanced Robotics (ICAR), 2013. [bibtex]
  4. T.Krajnik, M.Nitsche et al: A simple visual navigation system for an UAV.In 9th International Multi-Conference on Systems, Signals and Devices (SSD), 2012. [bibtex]
  5. F.Majer, L.Halodova, T.Krajnik: A precise teach and repeat visual navigation system based on the convergence theorem. In Student Conference on Planning in Artificial Intelligence and Robotics (PAIR), 2017 (in review). [bibtex]
  6. T.Krajnik, F.Majer, L.Halodova, T.Vintr: Navigation without localisation: reliable teach and repeat based on the convergence theorem. 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)[bibtex]

About

Simple, yet stable bearing-only navigation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 83.5%
  • CMake 12.6%
  • Python 3.9%