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.
- 1.1 Scenario Description
- 1.2 LRU Skills
- 1.3 Type Hierarchy
- 1.4 Facts File
- 1.5 PDDL Task Plan
- 1.6 Showcase Video
Table of contents generated with markdown-toc
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:
Skill | Description |
---|---|
Analyse Ground | Detects, wether the surface is suitable for placing a remote unit. |
Carry RU | Carries a RU to it's defined deploy location. |
Complete Deployment | A PDDL related helper "skill" for convenience. |
Grasp From Lander | Grasps a remote unit from the lander. |
Ground Impulse | Gives an ground impulse with it's manipulator. |
Level Ground | Uses an attached remote unit to level the ground. |
Locate World Objects | Updates the world model of the rover. |
Navigate to RU on Lander | Navigates to a position nearby the lander, where it can grasp a particual RU from. |
Optimize Contact | Optimizes the contact between a remote unit and the ground. |
Place RU | Attaches it's manipulator to a RU, it carries, and takes it from it's back. |
Release RU | Release a RU, it's manipulator is attached to. |
Retract From RU | Separates 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)
...