3. Robex - Seismic Network Example

This example is a showcase, and demonstrates how the plugin can be used to automatically generate a state machine, that is executable on a ROS-Gazebo stack.
It is based on a Moon analogue mission, conducted at Mt. Etna by the ROBEX Alliance in the years 2016 and 2017. During the Autonomous Passive Seismic Experiment, a rover, called the Lightweight Rover Unit (LRU) had to take four seismometers (RU) from a Lander, and place them as sensor network on the ground.
The network’s purpose was to measure seismic activities, and detect their origin. As discovered during the Apollo missions, such events do not only occur here on earth’s Mt. Etna for example, but also on it’s trabant: The Moon.
The LRU is a mobile robot, built for autonous planetary exploration, and disaster recovery. Therefore, it is equiped with a manipulator, as well as a stereo camera, and other cutting-edge technologies.
In order to take advantage of this high degree of autonom capabilities, the flow control tool RAFCON was used, and a state machine, representing the task, was manually prepared in advance.
This example shows, how to go on step further by also generating the state machine, needed to accomplish the task, automatically. To simulate the environment and the LRU, Gazebo and ROS where used.

Table of contents generated with markdown-toc

Robex Seismic Network Scenario Overview

1.1 Scenario Description

Initially all four Remote Units (RUs), which is a more abstract name for the seismometers, are attached to the lander, and the LRU is located next to it.
LRU’s task is, to arrange the RUs, to form a sensor network. Therefore, it has to grasp each RU individually from the lander, carry it to it’s position in the network, and deploy it.
The LRU deploys a RU, by first grasping the seismometer from it’s back, and use it afterwards to level the ground, before placing the RU, and optimizing it’s ground contact. The last step of deployment is to test the sensors functionyllity. So the LRU uses it’s manipulator, to give a ground impulse.

1.2 LRU Skills

The LRU has some capabilities, which can be used by the plugin to find a plan, and generate the state machine, necessary to fullfill the task. These Skills are listed below:

The LRU

SkillDescription
Analyse GroundDetects, wether the surface is suitable for placing a remote unit.
Carry RUCarries a RU to it's defined deploy location.
Complete DeploymentA PDDL related helper "skill" for convenience.
Grasp From LanderGrasps a remote unit from the lander.
Ground ImpulseGives an ground impulse with it's manipulator.
Level GroundUses an attached remote unit to level the ground.
Locate World ObjectsUpdates the world model of the rover.
Navigate to RU on LanderNavigates to a position nearby the lander, where it can grasp a particual RU from.
Optimize ContactOptimizes the contact between a remote unit and the ground.
Place RUAttaches it's manipulator to a RU, it carries, and takes it from it's back.
Release RURelease a RU, it's manipulator is attached to.
Retract From RUSeparates itself from a remote unit, to gain full navigation capabilities again.

1.3 Type Hierarchy

This is the type hierarchy used, to plan the mission.

{
"Location":"Object",
"PhysObj":"Object",
"Loadable":"PhysObj",
"Robot":"Loadable",
"Lander":"Loadable",
"RemoteUnit":"PhysObj"
}

1.4 Facts File

The following facts file describes the sensor deployment mission. It states, that all seismometers (named ru1 - ru4) are attached to the lander at the beginning of scenario, and that their deployment is the mission goal. The additional goal (not (obstruced lru)) induces the robot to distance itself from the last deployed sensor.

(define (problem seismic_network) (:domain robex)
(:objects 
ru1 ru2 ru3 ru4 - RemoteUnit
lru - Robot
lander - Lander
)
(:init
    (carries lander ru1)
    (carries lander ru2)
    (carries lander ru3)
    (carries lander ru4)
)
(:goal (and
    (deployed ru1)
    (deployed ru2)
    (deployed ru3)
    (deployed ru4)
    (not(obstructed lru))
))
)

1.5 PDDL Task Plan

The resulting state machine was generated based on this plan. It was created by the Fast Downward Planning System during the task planning process (plan shortened, comments where added later on, to increase readability):

;Deploy Remote Unit 1
(move_to_ru_on_lander ru1 lru lander)
(locate_world_objects lru)
(grasp_ru_from_lander ru1 lru lander)
(carry_ru_to_deploy_location ru1 lru)
(locate_world_objects lru)
(place_ru ru1 lru)
(level_ground ru1 lru)
(optimize_ru_contact ru1 lru)
(release_ru ru1 lru)
(give_ground_impulse_for_ru ru1 lru)
(complete_ru_deployment ru1 lru)
(retract_from_remote_unit lru)

;Deploy Remote Unit 2
(move_to_ru_on_lander ru2 lru lander)
(locate_world_objects lru)
(grasp_ru_from_lander ru2 lru lander)
(carry_ru_to_deploy_location ru2 lru)
(locate_world_objects lru)
(place_ru ru2 lru)
(level_ground ru2 lru)
(optimize_ru_contact ru2 lru)
(release_ru ru2 lru)
(give_ground_impulse_for_ru ru2 lru)
(complete_ru_deployment ru2 lru)
(retract_from_remote_unit lru)
...

1.6 Showcase Video