Overview

Pouco2000 is a C++-based project providing a modular physical control panel for interacting with ROS-based robots.

The system includes:

  • An Arduino library for defining hardware inputs and outputs
  • ROS packages for serial communication, message extraction, and parameter introspection
  • Utilities for visual monitoring and debugging in real-time
Video 1 - Video demo, hardware and software test.

Motivation

Using only terminal commands or software interfaces to control and debug robots can be slow, especially in field environments.

Pouco2000 enables the integration of physical components such as buttons, knobs, switches, and displays to control and debug robots efficiently.

With this hardware-software setup, developers can:

  • Trigger actions with switches or buttons
  • Adjust parameters with knobs or sliders
  • Monitor system feedback using LEDs or console tools
  • Deploy in local or remote ROS configurations
Fig. 1 - Pouco2000 Desk

The Fig. 1 shows a control desk made for the project. The wooden parts were laser-cut and assembled to form the enclosure.

Fig. 2 - Electronic boards test

The Fig. 2 shows early electronic board prototypes. Two Arduino boards were used initially, allowing multiple microcontrollers to handle various inputs without limitations.

System Architecture

High-Level Diagram

Fig. 3 - General system architecture of Pouco2000

Structure

The ROS side consists of two meta-packages:

  • pouco2000_src
    • pouco2000_ros: main communication layer
    • pouco2000_msgs: custom message definitions
    • pouco2000_tools: utilities for data extraction and filtering
  • pouco2000_examples
    • pouco2000_popup, pouco2000_demo, pouco2000_gazebo: usage examples

ROS Side

pouco2000_ros

The main communication package gathers data from the microcontroller and republishes it in structured ROS messages.

Core libraries:

  • pouco2000: Controller class definition
  • pouco2000_debug: logging and visualization tools
  • pouco2000_introspection: publishes filtered message subsets
  • pouco2000_monitor: terminal-based live monitoring

Nodes:

  • controller_node – Subscribes to microcontroller inputs and publishes pouco2000::Controller messages
  • monitor_node – Displays parsed message data in the terminal

pouco2000_ros_tools

Provides reusable C++ extractors to access parts of the controller message:

FieldMethodPurpose
Buttonsis_push()Check if a button is pressed
SwitchOnOffis_on()Check if switch is ON
SwitchModeis_mode(mode)Check active mode of a switch

Arduino Side

The pouco2000_ard library abstracts hardware elements and communicates with ROS using rosserial.

Typical workflow:

  • Define pin arrays
  • Create handle objects for each input/output type
  • Initialize in setup() and update in loop()

Typedefs simplify code:

typedef Handle<Button, Buttons::_data_type, Buttons> HandleButtons;

Arduino examples are available in the IDE (File > Examples > pouco2000_ard).

Message Format

The main message type is pouco2000::Controller:

Header header
bool[] buttons
bool[] switchs_on_off
uint8[] switchs_mode
float32[] potentiometers_circle
float32[] potentiometers_slider

Example Configurations

Remote Setup (multi-machine)

Fig. 4 - Remote configuration using a Raspberry Pi as ROS slave

Local Setup (direct USB, serial)

Fig. 5 - Local configuration connected directly to a ROS master

Monitor Tool

Launch controller:

roslaunch pouco2000_ros release.launch

Optional: launch monitor:

roslaunch pouco2000_ros monitor.launch

Documentation

Doxygen documentation can be generated with:

catkin build

The documentation will be available in each package’s doc/ directory.