<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[onecolumn,letterpaper,11pt]{article}

%=================================================================
\input{common_latex/common_latex_packages}
\input{common_latex/common_latex_definitions}
\input{common_latex/common_latex_help_format}
%=================================================================

\begin{document}

\begin{labcover}
\labtitle{The Human Touch with iRemote}
\vspace{0.2in}
\labauth{Paul Newman}
\labauth{University of Oxford}
\labtoc{small}
\end{labcover}

\wikidoc{file=IvPTools.IRemote}
\wikidoc{auth=Paul Newman}

%=================================================================
\section{Overview}
%=================================================================
\label{sec_iremote}

This section will give you a description of how to use and configure
\app{iRemote} to inject commands into a community and also to query
the status of certain commonly used variables from a terminal.
\app{iRemote} was designed to be a control terminal for a deployed
vehicle. It is really nothing more than a long switch statement based
on characters input from the keyboard. One of its many functions is to
allow remote control of the actuators of the vehicle. This is an
invaluable asset for land and sub-sea vehicles alike. 

\pskip

The application is multithreaded. The primary thread blocks on a read
of keyboard input. When a character is pressed some action is taken -
for example publishing a new value for \mvar{DESIRED\_THRUST}. The
fact that \app{iRemote} can take control of a real vehicle presents a
safety problem. What if the human controller walks away or even worse
the vehicle moves out of communication range (eg a submarine dives)
and the console is not available? To prevent the last issued actuator
command being carried out {\em ad-infinitum} a secondary in thread
\app{iRemote} prompts the user to hit an acknowledge key (') at least
every 15 seconds. If the human driver does not respond then all
actuators are set to the zero position.

%=================================================================
\section{Summary of Functionality}
The following (not exhaustive) list describes some of the online
functionality that \app{iRemote} provides:

\vspace{0.1in}

\begin{table}[H]
  \renewcommand{\arraystretch}{1.5}
  \footnotesize
  \centering
  \begin{tabular}{|c|c||p{0.55\textwidth}|} \hline

    {\bf Function} &amp; {\bf Key} &amp; {\bf Comment} \\ \hline

    Restart Logger &amp; \var{G}   &amp; Tells \app{pLogger} to begin recording to a new set of log files \\
    %
    Begin Mission  &amp; \var{O}   &amp; Instructs the helm to go online \\
    %
    Halt Mission &amp; \var{spacebar} &amp; The helm goes offline and
    \app{iRemote} takes control immediately. \\
    %
    Navigation Summary &amp; \var{*} &amp; Prints a summary of salient navigation
    information \\
    %
    Rudder Left/Right   &amp; \var{n},\var{m} &amp; Steer control \\
    Elevator Up/Down    &amp; \var{p},\var{l} &amp; Pitch control \\
    Thrust Up/Down      &amp; \var{a},\var{z} &amp; Throttle control (+ shift gives 100 percent) \\
    Stop                &amp; \var{spacebar} &amp; Immediate zero of all degrees of freedom \\
    Fetch DB            &amp; \var{F} &amp; Prints a summary of the contents of the entire MOOSDB \\
    %
    CustomKey &amp; \var{[0,...,9]} &amp; The numeric keys can be made (via
    \app{iRemote} configuration block) to publish any named variable with
    a specified value. In the example configuration block below (Listing
    \ref{iremote_config}), pressing key "2" will cause \app{iRemote} to
    write the variable \mvar{JANITOR\_SWITCH} with the string value
    \mvar{"ACTUATION::OFF"} \\
    %
    CustomSummary &amp; \var{+} &amp; The configuration block allows a
    custom summary to be built consisting of any variable names used
    within the system. \app{iRemote} subscribes to this data and
    prints its current value when requested.\\
    %
    CustomJournal &amp; \var{[0,...,9]} &amp; Similar to CustomSummary but instead
    of keeping the most recently published variable it keeps a history of
    values. Each Journal can be bound to a numeric key. In the example
    below pressing key "6" will show the past 10 values of
    \mvar{DESIRED\_RUDDER} with every delta captured as the capture time
    is 0.\\ \hline
  \end{tabular}
  \normalsize
\caption{iRemote keyboard mappings.}
\label{tbl_iremote}
\end{table}

\vspace{0.1in}
\begin{listing}{An example onfiguration block for iRemote showing typical usage of the CustomX commands}
\label{iremote_config}
\footnotesize
\begin{verbatim}
 1  //-----------------------------------------------------------------
 2  // iRemote config block
 3   
 4  ProcessConfig = iRemote
 5  {
 6    CustomJournal = Name = DESIRED_RUDDER,Key =6, History = 10,Period = 0
 7    CustomSummary = DESIRED_THRUST
 8    CustomKey = 2 : JANITOR_SWITCH @ "ACTUATION:OFF"
 9  }
\end{verbatim}
\normalsize
\end{listing}

%=================================================================
\section{Informing the Pilot}
%=================================================================

In most missions \app{iRemote} is the only interface the vehicle pilot
has with the vehicle. Clearly then a method is needed by which {\em
  important} information can be sent to the \app{iRemote} console from
any process. The \var{CMOOSApp} member function \func{MOOSDebugWrite}
achieves this by issuing a notification on a variable watched by
\app{iRemote}. Such messages are displayed on the iRemote console at
run time along with the process making the announcement. Note that
this name is somewhat unfortunate as this function should not be used
for debugging - it is a run-time thing. It is frustrating to have a
cornucopia of messages flashing on the screen during a mission the
content of which is meaningless to the pilot. Typical uses of this
functionality would be a very occasional summary of navigation status
and system level warning messages - for example notification of
unexpected mission task termination.



\end{document}

</pre></body></html>