-
Notifications
You must be signed in to change notification settings - Fork 2
Example STRANDS System
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.
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.
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
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/
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
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.
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.
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`
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.
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.