NODE cluedo_armor_interface.cpp

Dedicated RobotCLuedo-aRMOR client.

ROS Node Name

  • cluedo_armor_interface

Description:
Authors

Francesco Ganci (S4143910)

Version

v1.0

This node implements an inferface which simplifies and abstracts the communication with the aRMOR service, with particular attention to the most common operations performed by RCL during the search of a solution.

UML components (See robocluedo_arch the overal architecture, for further informations)_build/xml/UML_components_cluedo_armor_interface.png

Services:

  • /cluedo_armor/add_hint

    : AddHint.srv

    register a hint in the ontology

  • /cluedo_armor/find_consistent_h

    : FindConsistentHypotheses.srv

    find all the consistent hypotheses

  • /cluedo_armor/wrong_hypothesis

    : DiscardHypothesis.srv

    discard an hypothesis, due to a negative response from the oracle

  • /cluedo_armor/backup : std_srvs::Trigger export the ontology to file

Hidden services and topics

Parameters:

Defines

SERVICE_INTERFACE_ADD_HINT
SERVICE_INTERFACE_FIND_CONSISTENT_HYP
SERVICE_INTERFACE_WRONG_HYPOTHESIS
SERVICE_INTERFACE_SAVE_ONTOLOGY
ONTOLOGY_PARAM
PARAM_ONTOLOGY_BACKUP_PATH
OUTLABEL
OUTLOG(msg)
LOGSQUARE(str)
SS(this_string)
SSS(this_thing)

Functions

bool fileExist(std::string path)

check if a given file exists

std::vector<std::string> PerformDifferenceBetween(std::vector<std::string> list1, std::vector<std::string> list2)

delete all the occurrences of list2 inside list1

The function is employed in order to find the truly COMPLETE hypotheses, excluding the INCONSISTENT ones.

Parameters
  • list1 – the array to be reduced

  • list2 – the occurrences to delete from list1

Returns

a copy of list1 without the elements of list2.

bool ServiceAddHint(robocluedo_armor_msgs::AddHint::Request &hint, robocluedo_armor_msgs::AddHint::Response &success)

implementation of service SERVICE_INTERFACE_ADD_HINT

The service registers a property with a value referred to a hypothesis given its numeric ID. Here is the followed procedure:

  1. check if the hypothesis ID exists

  2. if it doesn’t exist, create it

  3. check if the value exists

  4. if the value doesn’t exist, create it

  5. set the property

  6. update the ontology

See also

AddHint.srv

Note

the DISJOINT on hypotheses is not performed; see ArmorCluedo::AddIndiv about the parameter ‘makeDisjoint’

Parameters
  • hint – the hint to add to the ontology

  • success – request accomplished or not

bool ServiceFindConsistentHypotheses(robocluedo_armor_msgs::FindConsistentHypotheses::Request &empty, robocluedo_armor_msgs::FindConsistentHypotheses::Response &hyplist)

implementation of service SERVICE_INTERFACE_FIND_CONSISTENT_HYP

The service returns a vector of hypotheses belonging to the class COMPLETE and not to the class INCONSISTENT with an operation of difference.

See also

FindConsistentHypotheses.srv

See also

Hypothesis.msg one element of the output vector from the service

Parameters
  • empty – empty request

  • hyplist – a vector of COMPLETE hypotheses

bool DiscardHypothesis(robocluedo_armor_msgs::DiscardHypothesis::Request &tag, robocluedo_armor_msgs::DiscardHypothesis::Response &success)

implementation of service SERVICE_INTERFACE_WRONG_HYPOTHESIS

Simple call of the methos ArmorCluedo::RemoveHypothesis. It is called after a negative answer from the oracle related to a charge.

See also

DiscardHypothesis.srv

Parameters
  • tag – of the hypothesis to discard

  • success – if the request has been accomplished or not

bool ServiceBackupOntology(std_srvs::Trigger::Request &emptyrequest, std_srvs::Trigger::Response &success)

implementation of service SERVICE_INTERFACE_SAVE_ONTOLOGY

The service exports the actual ontology to file. If the parameter PARAM_ONTOLOGY_BACKUP_PATH is defined in the parameter server, the ontology is exported in that path, otherwise the service returns with error.

Parameters
  • emptyrequest – empty request

  • success – if the request has been accomplished or not

int main(int argc, char *argv[])

ROS node main.

Retrieving of the parameters from the parameter server, connection with aRMOR through C++ interface, opening of the service, and spin.

Variables

ArmorCluedo *armor

global connection to aRMOR interface