ROS4HRI Standard Skills
Overview
Skills are capabilities built into your robot. In practice, they are regular ROS nodes, exposing standard ROS interfaces (actions, services or topics).
What make them special, however, is that they follow a well-defined interface, exposed in a manifest file: the skill definition. You can find here the schema of a valid skill definition.
Important
To facilitate interoperability, ROS4HRI provides definitions for a set of standard skills, listed below. If you plan to implement one of these capabilities, please ensure your implementation is compliant with the corresponding skill definition.
Skills are organised in domains, as shown below:
flowchart TB
subgraph subGraph0["Domains & skill definitions"]
communication["<b>Communication</b><br><tt>ros4hri/communication_skills</tt>"]
navigation["<b>Navigation</b><br><tt>ros4hri/navigation_skills</tt>"]
motions["<b>Motions</b><br><tt>ros4hri/motions_skills</tt>"]
manipulation["<b>Manipulation</b><br><tt>ros4hri/manipulation_skills</tt>"]
interaction["<b>Interaction</b><br><tt>ros4hri/interaction_skills</tt>"]
other["..."]
ask(["skill <tt>Ask</tt>"])
chat(["skill <tt>Chat</tt>"])
anon0(["..."])
anon1(["..."])
anon2(["..."])
place(["..."])
anon3(["..."])
end
communication --> ask & chat & anon0
navigation --> anon1
motions --> anon2
manipulation --> place
interaction --> anon3
A["<b>Skills</b>"] --> motions & interaction & manipulation & navigation & communication & other
ask --> impl1("skill implementation...")
chat --> n1("skill implementation...")
style communication stroke:#AA00FF
style navigation stroke:#AA00FF
style motions stroke:#AA00FF
style manipulation stroke:#AA00FF
style interaction stroke:#AA00FF
style other stroke:#AA00FF
style ask fill:#E1BEE7
style chat fill:#E1BEE7
style anon0 fill:#E1BEE7
style anon1 fill:#E1BEE7
style anon2 fill:#E1BEE7
style place fill:#E1BEE7
style anon3 fill:#E1BEE7
style A fill:#FFD600
style impl1 stroke-width:4px,stroke-dasharray: 5
style n1 stroke-width:4px,stroke-dasharray: 5
style subGraph0 fill:#FFFFFF,stroke:#757575
click communication "#communication"
click navigation "#navigation"
click motions "#motions"
click manipulation "#manipulation"
click interaction "#interaction"
Working with skills
Implementing a skill
Skills are regular ROS nodes, exposing ROS interfaces (actions, services or topics). To implement a skill, you need to:
Implement the ROS interfaces (actions, services or topics) of the skill (see the definitions below).
Implement the skill logic.
Declare that your package implements the skill by adding the following line in your
package.xmlfile:<export> <!-- .... --> <!-- adapt the following line to your skill --> <implements type="skill" package="communication_skills" id="ask" /> </export>
You can use the rpk tool to generate ROS4HRI-compliant skill skeletons.
Making an existing node compliant with ROS4HRI skills
Since ROS4HRI skills are regular ROS nodes, you can make an existing node compliant with ROS4HRI skills by:
Adapting the ROS interfaces (actions, services or topics) of the existing node to the ROS interfaces of the skill (see the definitions below).
Declaring that your package implements the skill by adding the following line in your
package.xmlfile:<export> <!-- .... --> <!-- adapt the following line to your skill --> <implements type="skill" package="communication_skills" id="ask" /> </export>
Creating a new skill and submitting it to ROS4HRI
If you want to create a new skill and submit it to ROS4HRI, you need to:
Create a new skill definition.
Create a new ROS package implementing the skill.
Submit the skill to the right ROS4HRI repository.
Steps 1 and 2 can easily be done using the rpk tool: it will quickly generate a skeleton for your skill definition and skill implementation based on ROS4HRI-compliant templates.
Step 3 can be done by submitting your skill to the right ROS4HRI repository. Each domain has its own repository. Find below the domain that best matches your skill, and submit your new skill proposal using the provided link.
Your proposal will be openly discussed by the ROS4HRI community, and if accepted, your skill will be added to the corresponding ROS4HRI repository.
The main criteria for accepting a skill proposal are:
The skill is novel and different from existing ones;
The skill would be beneficial to a broad range of robots and applications;
The skill is not tightly coupled to closed-source or proprietary technologies;
The skill is well-documented.
Proposing a change/extension to a skill
If you want to propose a change/extension to an existing skill, follow the link in the corresponding section below.
Proposing a new domain
To propose a new domain, please open a discussion on the ROS4HRI GitHub organization.
List of skills
This is the list of all skill definitions available in ROS4HRI, organised by domain (note that some skills can be found in multiple domains).
Note
You can download the complete list of ROS4HRI skills in JSON format from https://ros4hri.github.io/skills.json.
Communication
Skill ask: A specialization of the Skill chat where the role
Skill ask_human_for_help: Ask a human for help
Skill chat: Start a dialogue with a defined purpose.
Skill say: Speak out the provided input text (also executing any
Note
You would like to suggest a new communication skill? Follow this link.
You want to suggest a change to an existing communication skill? (like additional parameters, etc) Follow this link.
Interaction
Skill ask_human_for_help: Ask a human for help
Skill do_led_effect: Perform light effects using the robot’s LEDs.
Skill look_at: Defines the gazing direction of the robot. This skill can be used to either look at a specific point
Skill look_for_human: Search and localize specific humans
Skill look_for_object: Search and localize specific objects
Skill set_expression: Sets the expression of the robot. This might include changing the robot’s face, body posture, or other expressive features.
Note
You would like to suggest a new interaction skill? Follow this link.
You want to suggest a change to an existing interaction skill? (like additional parameters, etc) Follow this link.
Manipulation
Skill grasp: Commands the robot to grasp a specified object.
Skill hand_grasp: Controls a robotic hand or gripper to either close (grasp) or open
Skill place: Commands the robot to place an object at a specified location.
Note
You would like to suggest a new manipulation skill? Follow this link.
You want to suggest a change to an existing manipulation skill? (like additional parameters, etc) Follow this link.
Motions
Skill execute_cartesian_trajectory: Execute a trajectory on the robot by specifying
Skill execute_joint_trajectory: Execute a joint trajectory on the robot by specifying
Skill grasp: Commands the robot to grasp a specified object.
Skill hand_grasp: Controls a robotic hand or gripper to either close (grasp) or open
Skill place: Commands the robot to place an object at a specified location.
Note
You would like to suggest a new motions skill? Follow this link.
You want to suggest a change to an existing motions skill? (like additional parameters, etc) Follow this link.