Skip to content

Example STRANDS System

Christian Dondrup edited this page Oct 27, 2015 · 5 revisions

This page will get you up and running with an instance of the core STRANDS system running in simulation. If you encounter errors, please report them in the issue tracker.

Software Installation

Follow the software install instructions to get everything you need for the basic system. The command sudo apt-get install ros-indigo-strands-desktop should get you everything you need for the steps on this page. If not, please report it.

Running the System

Database

Many of our packages rely on the mongodb_store database package. You therefore need to start this prior to the rest of the system. The first time you run it, you need to create a directory to hold the data. This can be shared across multiple systems, or you can use one for each system you build.

One time setup, with $DATA_DIR being where you're storing your databases:

mkdir $DATA_DIR/strands_sim_example

Launch the database

roslaunch mongodb_store mongodb_store.launch db_path:=$DATA_DIR/strands_sim_example

Topological Map Creation

The STRANDS navigation system relies on continuous navigation (using movebase) and higher-level topological navigation. We have already created a topological map for the Birmingham simulation environment. You add this to the database as follows (assuming you have already launched mongodb_store as above).

rosrun topological_utils insert_map.py $(rospack find strands_morse)/bham/maps/cs_lg_sim.tplg cs_lg cs_lg

If you wish to create your own topological map, follow the topological navigation README/

Simulation

The following launches a simulation of a SCITOS A5 in the MORSE simulator. The map is based on the lower ground floor of the School of Computer Science, University of Birmingham.

roslaunch strands_morse bham_cs_morse.launch

Visual Docking

The robot docks on its charging station using a visual docking process. This needs to be calibrated the first time you use the system. When you launch the simulation, the robot should already be on the docking station. From this position (and assuming the mongodb_store database is running) do the following in two terminals. Launch the charging nodes:

roslaunch scitos_docking charging.launch

Then calibrate the docking software

rosrun scitos_docking visual_charging_client calibrate 100

After this you can kill the charging.launch file as it will be launched again later as part of the full system.

UI

The STRANDS system relies on a number of UI components to communicate with the world (e.g. asking for help with navigation actions). Therefore once you have the database running, launch the UI nodes:

roslaunch strands_bringup strands_ui.launch

If you want to see what the UI is showing (which will be nothing yet), open a browser at http://localhost:8090.

Navigation

With the simulation, UI and database running, you can launch the strands navigation system. This runs continuous and topological localisation and navigation.

roslaunch strands_bringup strands_navigation.launch map:=$(rospack find strands_morse)/bham/maps/cs_lg.yaml no_go_map:=$(rospack find strands_morse)/bham/maps/cs_lg.yaml topological_map:=cs_lg

If you open

rviz -d `rospack find strands_morse`/bham/cs_lg.rviz

you should see the robot docked at the charging station, the laser, and the topological map.

You can test that this is working by sending the robot to a topological node, e.g.

rosrun topological_navigation nav_client.py `WayPoint3`

Tasks

The STRANDS system allows you to write tasks which the robot executes at nodes in the topological map. For a detailed description of how this works, see the documentation for the strands_executive framework.

Start the executive framework with

roslaunch task_executor task-scheduler.launch

The simplest task is to wait somewhere for some time. The following example script will add the task for the robot to wait at WayPoint7 for 20 seconds:

rosrun task_executor example_add_client.py WayPoint7 20

If you add multiple tasks the scheduler will optimise their order of execution taking into account time windows and travel time.

Routine Behaviours

To create repetitive long-term behaviour, you can use a routine script. One example of this is a patrol routine which visits every waypoint in the environment in regular windows. The execution of the following will start this process and trigger actions when the robot is idle.

rosrun routine_behaviours patroller_routine_node.py

You can still add tasks during routine execution and the scheduler will fit them in as appropriate.