Communication between Applications(Windows) and Hardware(Linux)
This page outlines the exchanging message(commands) between Applications and Hardware via Server Client architecture.
Sending commands as client HTTP request
If Gesture & Speech Windows application wants to send a velocity command, the TCP client part of the application sends the command as an ordinary HTTP request on port 8080 containing linear and angular velocity values. The command is received over TCP/IP connection by the server in Linux, which is parsed to get the corresponding velocities. The values are then passed as a ROS message to the node turtlebot_node and the Turtlebot executes the command. The below figure explains this scenario.
Interactions among Server(Linux), ROS and Robot
The robot is connected to a Linux Virtual Machine running ROS (Robot Operating System)via serial port using USB to serial converter. ROS provides the framework for communication with the Turtlebot Roomba. It exposes the node turtlebot_node on which we can publish velocity commands to. Our server program which runs independently creates another ROS node turtlebot_cmdserver and uses it to publish the received commands from the Gesture & Speech application on Windows. The following diagram illustrates the connection between them.