As robotic systems become more functional, the need to get an overall vision of the operations, control the system and acquire and handle the data becomes more necessary. To solve these and other needs we employ HMI’s (Human-Machine-Interface) as a mean of interaction between final users and systems.

HMI’s design has to be focused on the user and it has to be an open and simple environment that makes interaction and system tasks easier. Its main purpose is to hide the system complexity to the user, providing a tool to improve usability. We can find them of many types and in many places, from a simple LED that shows the status of a device to the machine interface that we use to get cash.

HMIs in robotics can be as important as the robotic system itself. It is useless to have a complex system in where the user or operator doesn’t know how to work. Usability is one of the main features that makes ROS[1] one of the first candidates for this field of robotics and embedded control.

By using this framework we can find a couple of tools that greatly facilitate the interaction through a comfortable and editable graphic interface: Rviz[2] and ROS-GUI[3]. Both interfaces, consist of a 3D environment visualizer that allows the viewing, measurement and interaction with the environment. Based on a plugin architecture, this software not only provides the possibility of developing custom packages but also reusing third party tools.

Although these two interfaces could not supply the requirements for certain robotic systems by default, the simplicity employed by ROS to read component’s information or interact with them, makes much easier the development of customizables HMI’s that can fulfill any requirement. Moreover, thanks to the ROS architecture based on topics/services, we can interact with all the system’s components without low level programming knowledge, just basic knowledge of ROS. For example, we can get sensors’ values, robot’s current state, etc. reading from topics[4], or we can perform actions on components (i.e setting the speed of a mobile robot) publishing on another topic or calling a service[5] that starts certain actions (i.e the GoTo command of a robot).

Without knowing details about the used hardware, the programmer can develop a HMI that is able to satisfy the requirements of any system. On the other hand, thanks to programming frameworks like wxWidgets[6] or Qt[7], developers can go beyond the basic HMI, creating complex and attractive GUIs that make the human-machine interaction more enjoyable. The possibilities, which are many and diverse, range from basic HMIs that show certain component’s values, to more sophisticated GUIs that allow the robot teleoperation or control the state of its components.

We can find many examples of these interfaces in multiple packages that are in the ROS repositories, like the PR2 dashboard[8] which provides detailed information about the ‘health’ of the PR2 robot[9]. Whenever the PR2 is not behaving exactly as expected, the dashboard must be checked. There are more robots with dashboards, for example the Care-O-Bot3[10] dashboard[11], which consists of a control panel to move and interact with the robot. You can perform some basic actions for every robot’s component. Another kind of interface is the srs_ui_pro[12] developed by Robotnik for the SRS project[13]. This interface has been developed to be the intermediary between the robot Care-o-Bot3 and the teleoperator. On the other hand, in the last ROS distro (called Groovy[14]) we can find the rqt[15] tool, which is a framework for plugin development. It’s possible to run all the existing GUI tools as dockable windows within rqt (even rviz). Moreover, the tools  still can run in a traditional standalone method, but rqt makes it easier to manage all the diverse windows in a unique application.

Srs_ui_pro user interface developed using wxWidgets

The cited interfaces are just a small part of many options that we can find for all the robots and components supported by ROS.

ROS intends (and is achieving) to be a serious and reliable standardization for Robotic Systems Development, and one important part is the HMI. ROS developers have employed a lot of time and resources improving its usability, and as we have seen, we have many possibilities for HMIs development, from using the standard interfaces that ROS provides to developing our own interfaces from scratch.

[1] http://www.ros.org

[2] http://ros.org/wiki/rviz

[3] http://www.willowgarage.com/blog/2012/10/21/ros-gui

[4] http://www.ros.org/wiki/Topics

[5] http://www.ros.org/wiki/Services

[6] http://www.wxwidgets.org/

[7] http://qt-project.org/

[8] http://pr2support.willowgarage.com/wiki/Tutorials/Dashboard

[9] http://www.willowgarage.com/pages/pr2/overview

[10] http://www.ros.org/wiki/Robots/Care-O-bot/Tutorials/Dashboard

[11] http://www.care-o-bot.de/english/

[12] http://www.ros.org/wiki/srs_ui_pro

[13] http://srs-project.eu/

[14] http://www.ros.org/wiki/groovy

[15] http://ros.org/wiki/rqt