\LARGE A ROS Multi-Ontology References Service:\\OWL Reasoners and Application Prototyping Issues
Luca Buoncompagni$^{1
In this extended abstract, we introduce the ARMOR service, a general-purpose and scalable interface between robot architectures and OWL2 reasoners. ARMOR addresses synchronisation and communication issues among heterogeneous and distributed software components. As a guiding scenario, we consider a prototyping approach for the use of symbolic reasoning in human-robot interaction applications.
arMORscheme.tex
% Graphic for TeX using PGF
% Title: /home/bubx/pubblication/[arow-ROMAN-2017]/arMORscheme.dia
% Creator: Dia v0.97.3
% CreationDate: Sun Jun 18 17:43:50 2017
% For: bubx
% \usepackage{tikz}
% The following commands are not supported in PSTricks at present
% We define them conditionally, so when they are implemented,
% this pgf file will use them.
\ifx\du\undefined
  \newlength{\du}
\fi
\setlength{\du}{15\unitlength}
\begin{tikzpicture}
\pgftransformxscale{1.000000}
\pgftransformyscale{-1.000000}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\pgfsetlinewidth{0.050000\du}
\pgfsetdash{{1.000000\du}{0.200000\du}{0.200000\du}{0.200000\du}{0.200000\du}{0.200000\du}}{0cm}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetfillcolor{dialinecolor}
\fill (6.604625\du,5.361620\du)--(6.604625\du,15.311644\du)--(22.425570\du,15.311644\du)--(22.425570\du,5.361620\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (6.604625\du,5.361620\du)--(6.604625\du,15.311644\du)--(22.425570\du,15.311644\du)--(22.425570\du,5.361620\du)--cycle;
\pgfsetlinewidth{0.050000\du}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.545098, 0.780392, 0.878431}
\pgfsetfillcolor{dialinecolor}
\fill (8.435889\du,5.510120\du)--(8.435889\du,14.122462\du)--(22.284162\du,14.122462\du)--(22.284162\du,5.510120\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (8.435889\du,5.510120\du)--(8.435889\du,14.122462\du)--(22.284162\du,14.122462\du)--(22.284162\du,5.510120\du)--cycle;
\pgfsetlinewidth{0.050000\du}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.627451, 0.721569, 0.764706}
\pgfsetfillcolor{dialinecolor}
\fill (9.495517\du,5.648030\du)--(9.495517\du,13.029018\du)--(22.076648\du,13.029018\du)--(22.076648\du,5.648030\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (9.495517\du,5.648030\du)--(9.495517\du,13.029018\du)--(22.076648\du,13.029018\du)--(22.076648\du,5.648030\du)--cycle;
\pgfsetlinewidth{0.050000\du}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetdash{{0.300000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}{0.060000\du}}{0cm}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.768627, 0.870588, 0.917647}
\pgfsetfillcolor{dialinecolor}
\fill (11.019275\du,5.816208\du)--(11.019275\du,11.699781\du)--(21.942683\du,11.699781\du)--(21.942683\du,5.816208\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (11.019275\du,5.816208\du)--(11.019275\du,11.699781\du)--(21.942683\du,11.699781\du)--(21.942683\du,5.816208\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node[anchor=east] at (21.423253\du,12.591004\du){\textbf{OWL API}};
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (17.533187\du,5.834767\du)--(17.533187\du,7.841754\du)--(21.678783\du,7.841754\du)--(21.678783\du,5.834767\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (17.533187\du,5.834767\du)--(17.533187\du,7.841754\du)--(21.678783\du,7.841754\du)--(21.678783\du,5.834767\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (19.605985\du,6.6\du){AMOR};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\node at (19.605985\du,7.3\du){Enquirer};
\pgfsetfillcolor{dialinecolor}
\fill (17.521743\du,8.118173\du)--(17.521743\du,10.087234\du)--(21.756011\du,10.087234\du)--(21.756011\du,8.118173\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (17.521743\du,8.118173\du)--(17.521743\du,10.087234\du)--(21.756011\du,10.087234\du)--(21.756011\du,8.118173\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (19.638877\du,8.8\du){AMOR};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (19.638877\du,9.5\du){Manipulator};
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (12.609354\du,5.672627\du)--(12.609354\du,10.242750\du)--(16.054354\du,10.242750\du)--(16.054354\du,5.672627\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.609354\du,5.672627\du)--(12.609354\du,10.242750\du)--(16.054354\du,10.242750\du)--(16.054354\du,5.672627\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (14.331854\du,7.6\du){AMOR};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (14.331854\du,8.5\du){References};
\pgfsetlinewidth{0.110000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsstart{stealth}
\pgfsetarrowsend{stealth}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (16.054354\du,6.815158\du)--(17.533187\du,6.838260\du);
}
\pgfsetlinewidth{0.110000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsstart{stealth}
\pgfsetarrowsend{stealth}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (16.054354\du,9.100220\du)--(17.521743\du,9.102703\du);
}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (9.186197\du,8.513782\du)--(9.186197\du,11.909511\du)--(12.253590\du,11.909511\du)--(12.253590\du,8.513782\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (9.186197\du,8.513782\du)--(9.186197\du,11.909511\du)--(12.253590\du,11.909511\du)--(12.253590\du,8.513782\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.719894\du,9.7\du){ROS};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.719894\du,10.3\du){Java};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.719894\du,10.9\du){Service};
\pgfsetlinewidth{0.110000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsstart{stealth}
\pgfsetarrowsend{stealth}
{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.253590\du,11.060579\du)--(14.331854\du,11.060579\du)--(14.331854\du,10.242750\du);
}}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (9.218019\du,12.086285\du)--(9.218019\du,15.139702\du)--(12.300519\du,15.139702\du)--(12.300519\du,12.086285\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (9.218019\du,12.086285\du)--(9.218019\du,15.139702\du)--(12.300519\du,15.139702\du)--(12.300519\du,12.086285\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.759269\du,13.1\du){ROS};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.759269\du,13.7\du){Injected};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (10.759269\du,14.28\du){Semantic};
\pgfsetlinewidth{0.110000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsstart{stealth}
\pgfsetarrowsend{stealth}
{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.300519\du,12.849639\du)--(15.193104\du,12.849639\du)--(15.193104\du,10.242750\du);
}}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (6.804201\du,5.928298\du)--(6.804201\du,7.345798\du)--(11.963004\du,7.345798\du)--(11.963004\du,5.928298\du)--cycle;
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (6.804201\du,5.928298\du)--(6.804201\du,7.345798\du)--(11.963004\du,7.345798\du)--(11.963004\du,5.928298\du)--cycle;
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (9.383603\du,6.715798\du){ROS Parameters};
\pgfsetlinewidth{0.070000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (10.673304\du,7.345798\du)--(10.719894\du,8.513782\du);
}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (10.673304\du,7.345798\du)--(10.709929\du,8.263980\du);
\pgfsetlinewidth{0.070000\du}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (10.843399\du,8.473827\du)--(10.593598\du,8.483792\du)--(10.583634\du,8.233990\du)--(10.833435\du,8.224026\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (10.843399\du,8.473827\du)--(10.593598\du,8.483792\du)--(10.583634\du,8.233990\du)--(10.833435\du,8.224026\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (10.963318\du,8.343944\du)--(10.463715\du,8.363873\du);
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsend{to}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (9.186197\du,8.513782\du)--(7.048000\du,8.512471\du);
}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsend{to}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (7.182941\du,9.341391\du)--(9.186197\du,9.362714\du);
}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsend{to}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (9.186197\du,11.060579\du)--(6.990169\du,11.037785\du);
}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsend{to}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (7.202218\du,11.905260\du)--(9.186197\du,11.909511\du);
}
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node[anchor=east] at (21.275519\du,14.869364\du){\textbf{ROS}};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node[anchor=east] at (21.388096\du,13.779337\du){\textbf{ARMOR}};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node[anchor=east] at (21.409072\du,11.216293\du){\textbf{Knowledge Base}};
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (7.201581\du,13.620932\du)--(9.218019\du,13.612993\du);
}
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetfillcolor{dialinecolor}
\pgfpathellipse{\pgfpoint{6.951614\du}{13.620932\du}}{\pgfpoint{0.249967\du}{0\du}}{\pgfpoint{0\du}{0.262506\du}}
\pgfusepath{fill}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\pgfpathellipse{\pgfpoint{6.951614\du}{13.620932\du}}{\pgfpoint{0.249967\du}{0\du}}{\pgfpoint{0\du}{0.262506\du}}
\pgfusepath{stroke}
\pgfsetlinewidth{0.110000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\pgfsetarrowsstart{stealth}
\pgfsetarrowsend{stealth}
{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.300519\du,14.376348\du)--(17.354756\du,14.376348\du)--(17.354756\du,12.888685\du);
}}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (7.505275\du,14.349140\du)--(9.218019\du,14.376348\du);
}
\pgfsetlinewidth{0.100000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetfillcolor{dialinecolor}
% was here!!!
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetstrokecolor{dialinecolor}
\draw (7.051525\du,14.409629\du)--(7.231286\du,14.349140\du);
}
\pgfsetlinewidth{0.070000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
{
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetfillcolor{dialinecolor}
% was here!!!
{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (11.963004\du,6.282673\du)--(11.963004\du,6.328390\du)--(12.609354\du,6.328390\du);
}}
{\pgfsetcornersarced{\pgfpoint{0.000000\du}{0.000000\du}}\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (11.963004\du,6.282673\du)--(11.963004\du,6.328390\du)--(12.359354\du,6.328390\du);
}\pgfsetlinewidth{0.070000\du}
\pgfsetdash{}{0pt}
\pgfsetmiterjoin
\pgfsetbuttcap
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
\fill (12.574354\du,6.203390\du)--(12.574354\du,6.453390\du)--(12.324354\du,6.453390\du)--(12.324354\du,6.203390\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.574354\du,6.203390\du)--(12.574354\du,6.453390\du)--(12.324354\du,6.453390\du)--(12.324354\du,6.203390\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\draw (12.449354\du,6.078390\du)--(12.449354\du,6.578390\du);
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetfillcolor{dialinecolor}
\pgfpathellipse{\pgfpoint{7.231286\du}{14.349140\du}}{\pgfpoint{0.273988\du}{0\du}}{\pgfpoint{0\du}{0.329678\du}}
\pgfusepath{fill}
\pgfsetlinewidth{0.140000\du}
\pgfsetdash{}{0pt}
\pgfsetdash{}{0pt}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\pgfpathellipse{\pgfpoint{7.231286\du}{14.349140\du}}{\pgfpoint{0.273988\du}{0\du}}{\pgfpoint{0\du}{0.329678\du}}
\pgfusepath{stroke}
\pgfsetlinewidth{0.000000\du}
\pgfsetdash{{\pgflinewidth}{0.200000\du}}{0cm}
\pgfsetdash{{\pgflinewidth}{0.100000\du}}{0cm}
\pgfsetmiterjoin
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetfillcolor{dialinecolor}
\fill (6.853879\du,13.948790\du)--(6.853879\du,14.870468\du)--(7.249172\du,14.870468\du)--(7.249172\du,13.948790\du)--cycle;
\definecolor{dialinecolor}{rgb}{0.501961, 0.482353, 0.482353}
\pgfsetstrokecolor{dialinecolor}
\draw (6.853879\du,13.948790\du)--(6.853879\du,14.870468\du)--(7.249172\du,14.870468\du)--(7.249172\du,13.948790\du)--cycle;
\end{tikzpicture}

root.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2345678901234567890123456789012345678901234567890123456789012345678901234567890
%        1         2         3         4         5         6         7         8

\documentclass[letterpaper, 10 pt, conference]{ieeeconf}  		% Comment this line out if you need a4paper

%\documentclass[a4paper, 10pt, conference]{ieeeconf}      	% Use this line for a4 paper

\IEEEoverridecommandlockouts                              			% This command is only needed if 
                                                          						% you want to use the \thanks command

\overrideIEEEmargins                                      				% Needed to meet printer requirements.

% See the \addtolength command later in the file to balance the column lengths
% on the last page of the document

% The following packages can be found on http:\\www.ctan.org
%\usepackage{graphics} % for pdf, bitmapped graphics files
%\usepackage{epsfig} % for postscript graphics files
%\usepackage{mathptmx} % assumes new font selection scheme installed
%\usepackage{times} % assumes new font selection scheme installed
%\usepackage{amsmath} % assumes amsmath package installed
%\usepackage{amssymb}  % assumes amsmath package installed

%\usepackage{textcomp}
\usepackage{paralist}
\usepackage[T1]{fontenc}
\usepackage[hidelinks]{hyperref}

\usepackage{floatrow}
\captionsetup[figure]{slc=off}

\usepackage{tikz}
\newcommand{\inputTikZ}[2]{%  
    \scalebox{#1}{\input{#2}}
}

\title{\LARGE \bf
A ROS Multi-Ontology References Service:\\OWL Reasoners and Application Prototyping Issues
}

\author{Luca Buoncompagni$^{1}$, Alessio Capitanelli and Fulvio Mastrogiovanni% <-this % stops a space
\thanks{$^{1}$All the authors are with the Department of Informatics, Bioengineering, Robotics and Systems and Engineering, University of Genoa. 
Corresponding author's email: { luca.buoncompagni@edu.unige.it}.}%
}

\begin{document}

\maketitle
\thispagestyle{empty}
\pagestyle{empty}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{abstract}
In this extended abstract, we introduce the ARMOR service, a general-purpose and scalable interface between robot architectures and OWL2 reasoners.
ARMOR addresses synchronisation and communication issues among heterogeneous and distributed software components.
As a guiding scenario, we consider a prototyping approach for the use of symbolic reasoning in human-robot interaction applications.
\end{abstract}

\section{Introduction}
%- ontology in robotics, architecture issues
The challenge of sharing and communicating information is crucial in complex human-robot interaction (HRI) scenarios.
Ontologies and symbolic reasoning are the state of the art approach for a natural representation of knowledge, especially within the Semantic Web domain.
In such a context, scripted paradigms have been adopted to achieve high expressiveness \cite{DL}.
Nevertheless, since symbolic reasoning is a high complexity problem, optimising its performance requires a careful design of the knowledge \emph{resolution}.
Specifically, a robot architecture requires the integration of several components implementing different behaviors and generating a series of beliefs.
Most of the components are expected to access, manipulate, and reason upon a run-time generated semantic representation of knowledge grounding robot behaviors and perceptions through formal axioms, with soft real-time requirements.
     
%- ROS standard MONGODB, knowRob
The Robot Operating System (ROS) is a \textit{de facto} standard for robot software development, which allows for modular and scalable robot architecture designs\footnote{\url{http://www.ros.org/}}.
Currently, a number of approaches exist to integrate a semantic representation in ROS, such as the KnowRob\footnote{\url{http://www.knowrob.org/doc}} support for Allen's Algebra \cite{allen} through a complete framework of useful ontologies, or the native ROS support of MongoDB\footnote{\url{https://www.mongodb.com/}}, which can be also used to provide a suitable representation for semantic querying.
Unfortunately, none of these support the study of advanced reasoning paradigms, and they heavily rely on \textit{ad hoc} reasoning solutions, significantly limiting their scope.
We argue that this fact affects the study of different approaches to semantics in Robotics. For instance, it limits our capability to explore novel semantic representations of perceptions, which offers similar but \textit{not equivalent} beliefs. We lack a standardized general framework to work with ontologies, natively supporting symbolic logic and advanced reasoning paradigms.

%- OWL standard
The Ontology Web Language (OWL) is a standard representation supporting several reasoning interfaces, e.g., Pellet \cite{pellet}, and logics approaches \cite{W3R:language}. Thus, it can be a solid foundation to a framework for symbolic reasoning in Robotics.
OWL is based on the separation between terminological and assertional knowledge, referred to as different \emph{boxes}.
Typically, in Robotics scenarios, we design a \emph{static} semantics for the beliefs to be represented in the TBox.
Then, we populate the ABox through \emph{individuals} defined using \emph{types} and \emph{properties} and, at run-time, we classify knowledge using \emph{instance checking}.
We argue that, due to the high complexity of HRI scenarios, the possibility of a dynamic semantics in the TBox is desirable as well.
For instance, it could be used to \emph{learn} new types for classification.
This lead us to a study requiring reasoning heuristics to be compared, components to be shared and different semantics to be adapted. 
     
%- Contribution
For this purpose, we propose the ROS Multi Ontology References\footnote{\url{https://github.com/EmaroLab/ARMOR}} (ARMOR in short).
ARMOR is an open source \emph{service} which manipulates and queries OWL2 ontologies.
It provides a simple access to a set of dynamic ontologies, handling also the synchronizations among different components in the architecture.
Last but not the least, it is a convenient tool to directly assess semantics supported by advanced reasoners.

\section{System's Architecture}

\subsection{Basic ARMOR Concepts}
     
%- Overwiew 
Figure \ref{fig:arch} shows a schematic representation of ARMOR.
It interfaces the OWL API\footnote{\url{http://owlapi.sourceforge.net/}} through the Java-based Multi Ontology References library (AMOR). Then, ARMOR exposes AMOR functionalities as a service to ROS-based architectures, relying on the support for Java in ROS (ROSJava\footnote{\url{https://github.com/rosjava}}).
%- Usage hints
ARMOR messages have been designed to accommodate all OWL2 functionalities.
Nevertheless, we have implemented only an exhaustive subset of those features so far (i.e., only common \textit{run-time} operations).
Indeed, 
ontology managers are not distributed across satellite components of a ROS architecture.
Instead, dedicated components are in charge of management, while others only provide knowledge axioms, possibly at run-time.
With ARMOR, it is possible to \emph{inject} in the service other symbolic procedures, extending the semantics already provided by AMOR. Static descriptions can be defined with dedicated software, e.g., Prot\'eg\'e\footnote{\url{http://protege.stanford.edu/}}. 

%- Diagram
\begin{figure}
     \centering
     \floatbox[{\capbeside\thisfloatsetup{capbesideposition={left,center},capbesidewidth=2cm}}]{figure}[\FBwidth]
          {\caption{\newline The ARMOR\newline components (white boxes),\newline interfaces (external arrows) and their \newline dependencies (bidirectional arrows) drawn \newline within their \newline respective domains (coloured boxes).}\label{fig:arch}}
          {\hspace*{-.6cm}\inputTikZ{.79}{arMORscheme.tex}}
\end{figure}

\subsection{AMOR}
%- OWL references and reasoner
The core library, referred to as AMOR, contains a \emph{map} of instantiated ontologies, where the \emph{key} is a unique name identifier used to access the corresponding ontology in a thread-safe manner.
AMOR provides several common operations, such as those to create individuals, assign their properties, make them disjointed and classify them, just to name a few.
Furthermore, AMOR ensures complete accessibility to the OWL API features for compatibility and extendability purposes.
For example, AMOR allows for invoking reasoning tasks by specifying its \texttt{OWLReasoner} \emph{factory}, i.e., the unique package of its Java implementation, which assures compatibility with all OWL reasoners.

%- Parameters buffering, debugging
In the current implementation, we interface several properties that are useful to tune the AMOR behavior, e.g., the buffering of the manipulations or a continuous reasoner update, using the standard ROS Parameter Server, as well as parameters for debugging purposes such as toggling a Graphical User Interface (GUI) for visualising ontology states.

\subsection{ARMOR}
%- Directive messaging and calls
The ARMOR service is based on a ROS message structure (i.e., a triple) for the use of the AMOR functionalities from any node in the architecture, even when the development language is different from Java (e.g., Python\footnote{A simple set of OWL functions can be find at \url{https://github.com/EmaroLab/ARMOR_py_api}.} and C++ are the most common languages in Robotics development).
Such a message is composed of: 
\begin{inparaenum}
     \item the \emph{client name}, which is used by the service to identify different callers,
     \item the \emph{reference name}, indicating the operation's target reference, and
     \item the \emph{command} to execute, i.e., \texttt{add}, \texttt{remove}, \texttt{replace}, \texttt{query}, \texttt{load}, \texttt{mount}, etc.\footnote{A complete list is available at \url{https://github.com/EmaroLab/ARMOR/blob/master/commands.md}.}
Each of those commands may be further refined by:
\begin{inparaenum}
\item the \emph{primary} and \emph{secondary specifiers}, which augment command labels, e.g., \texttt{add(\emph{individual}, \emph{class})} or \texttt{remove(\emph{individual}, \emph{property})}, and
\item the \emph{arguments}, a list of entities in the reference parameterizing the command, e.g., $\langle$\texttt{add(\emph{class}) \textquotedbl Sphere\textquotedbl}$\rangle$, or even $\langle$\texttt{add(\emph{property},\emph{individual}) \textquotedbl hasNorth\textquotedbl} \texttt{\textquotedbl LivingRoom\textquotedbl} \texttt{\textquotedbl Corridor\textquotedbl}$\rangle$. 
\end{inparaenum}
\end{inparaenum}
An ARMOR call is based on one or more messages with the same structure.
When such a request is sent, the service manipulates or queries the ontology with the given directives.
Then, it returns whether the ontology is consistent, eventual error codes with their description, and the names of the queried entities, if requested. 

%- un/mount
One advanced feature of ARMOR is the possibility of flexibly synchronizing all operations.
This follows a \emph{mounting}/\emph{unmounting} paradigm, where one or more nodes identified by the same \textit{client name} can prevent other nodes from manipulating a given ontology, in order to ensure manipulation consistency. On the contrary, queries are always allowed.
Calls to busy ontologies will report the issue. The user can choose how to handle this situation.

\section{Applications}
%- Alessio's planner. rosplan
We are currently using ARMOR in different applications.
Here we mention only two of them.

The first is aimed at implementing a dynamic PDDL problem generator.
This approach uses descriptions of the \emph{predicates} and \emph{objects} within a tabletop scenario to infer unsatisfied norms and consequently generate goals \cite{alessioTh}.
The system has been integrated with ROSPlan\footnote{\url{https://github.com/KCL-Planning/ROSPlan}} by substituing the internal semantic data structure with ARMOR and a suitable OWL ontology. 
Currently, we are investigating the performance of semantic feedback for re-planning. 

%- SIT
The second is a system to learn by experience the arrangement of objects in the robot's workspace by mapping their properties into the TBox.
In this case, we \emph{inject} a centralised service that scans semantic spatial relations and shapes ontologies, populated by different components in the architecture.
Through them, such a service generates a new semantic \emph{scene class} that the reasoner interprets as soon as it performs hierarchical classification.
In this study, we are currently comparing different multi-modal perception modules to generate beliefs indicating relevant properties of a scene as perceived by a robot. 

\section{Conclusions}
%- lack of tools -> we introduced... features
We introduced the ARMOR service to manipulate OWL ontologies and fully query their reasoners within a ROS architecture.
ARMOR is based on a flexible set of messages allowing for the direct access of several OWL features from any component of the architecture.
It ensures synchronization between client calls, and flexibility through procedure \emph{injection}.
It also provides an easy interface to OWL2 representations.

\bibliographystyle{./IEEEtran} % use IEEEtran.bst style
\bibliography{./IEEEabrv,./BIB}

\end{document}

root.bbl
\begin{thebibliography}{1}
\providecommand{\url}[1]{#1}
\csname url@rmstyle\endcsname
\providecommand{\newblock}{\relax}
\providecommand{\bibinfo}[2]{#2}
\providecommand\BIBentrySTDinterwordspacing{\spaceskip=0pt\relax}
\providecommand\BIBentryALTinterwordstretchfactor{4}
\providecommand\BIBentryALTinterwordspacing{\spaceskip=\fontdimen2\font plus
\BIBentryALTinterwordstretchfactor\fontdimen3\font minus
  \fontdimen4\font\relax}
\providecommand\BIBforeignlanguage[2]{{%
\expandafter\ifx\csname l@#1\endcsname\relax
\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%
\typeout{** loaded for the language `#1'. Using the pattern for}%
\typeout{** the default language instead.}%
\else
\language=\csname l@#1\endcsname
\fi
#2}}

\bibitem{DL}
M.~Kr{\"o}tzsch, F.~Simancik, and I.~Horrocks, ``A description logic primer,''
  \emph{arXiv preprint arXiv:1201.4089}, 2012.

\bibitem{allen}
J.~F. Allen, ``Maintaining knowledge about temporal intervals,''
  \emph{Communications of the ACM}, vol.~26, no.~11, pp. 832--843, 1983.

\bibitem{pellet}
E.~Sirin, B.~Parsia, B.~C. Grau, A.~Kalyanpur, and Y.~Katz, ``Pellet: A
  practical owl-dl reasoner,'' \emph{Web Semantics: science, services and
  agents on the World Wide Web}, vol.~5, no.~2, pp. 51--53, 2007.

\bibitem{W3R:language}
\BIBentryALTinterwordspacing
(2004) Owl web ontology language guide. [Online]. Available:
  \url{https://www.w3.org/TR/owl-guide/}
\BIBentrySTDinterwordspacing

\bibitem{alessioTh}
\BIBentryALTinterwordspacing
A.~Capitanelli and F.~Mastrogiovanni, ``An ontology-based hybrid architecture
  for planning and robust execution in tabletop scenarios,'' pp. 31--35, 2016.
  [Online]. Available: \url{http://ceur-ws.org/Vol-1834/}
\BIBentrySTDinterwordspacing

\end{thebibliography}
