Robot Management Cloud Server
For more details, please look into the GitHub repository.
About the project
This software solution enables you to control, manage and supervise ROS-based robots. It allows you secure remote access, and is compatible with any third party application protocol, as it offers routing and port mapping independent on the payload or type of packet.
The possible usage of this software is very wide, ranging from home use, while making a single robot accessible from network, to remote lab management, where you can control robots in the lab, deploy software on them, connect through SSH and all of that from the comfort of your home.
The protocol, which is used for configuration of the routing tables in the reverse proxy server is simple enough to be used in any other application that you might have developed, or might want to, as it is completely independent of the RMS system, which was simply chosen as a tested and rich UI with user authentication.
So how does it work?
To ensure secure access to the robot, the server acts as a middle man in the connection. There is a reverse proxy running on it (Dispatcher), which can be configured locally on the server via any third party program, that would be able to use it's simple protocol, or using the RMS web UI's extension. The Dispatcher is told by the UI (after a user clicks on a button or makes a reservation) to bind his address to the selected robot's address. A link is then made, routing all network traffic from the user to the robot via the server.
Only way to create this link is to be authenticated by RMS, or any third party program, should you choose to make your own.
The VPN network ensures both secure connection, even if the user decided to use non-encrypted communication (normal websocket, jpeg streams) and a unique IP address, which is useful to the Dispatcher and makes routing easier.
The whole system consists of several parts:
- OpenVPN network;
- RMS (Robot Management System) and it's extension;
Note: all file/folder references refer to those contained in GitHub repository.
The VPN network should be set up first, you can either make your own configuration, or use the one supplied in openvpn_config folder, in user_client, robot_client and server subfolders respectively.
If you are to use your own configuration, keep in mind that client isolation is strongly advised, as well as no routing being set. Since the robots and user clients need to communicate only with the server, adding these options would only cause security risk.
One VPN network should be sufficient, given the client isolation, but two is strongly recommended, so a user cannot create a fake robot connection, which would not cause any security issues, but could cause conflicts in robot identification.
There are tools for OpenVPN configuration and key generation available in the openvpn_config folder. More information is also available in the readme file in that folder.
RMS setup is to be done exactly as described on the RMS webpage, with the addition of copying and overwriting the files in app folder by the ones supplied from this repository (rms_extension/app), after the installation is complete.
Once you complete the installation and copy the required files, you need to navigate to the installation folder and modify file located in RMS_FOLDER/app/config/bootstrap.php You will find a line containing "VPN_SERVER_IP" and change the IP address there to the address of the VPN server, to which user clients will connect.
Also, RMS requires rosbridge to be installed and running on the side of the robots. How to install and run rosbridge on the robots running ROS is described on the official website.
Once the VPN and RMS with the extension are set up, you need to configure and run launch_server.py on the server side, and launch_client.py on the side of the robot.
On the client, all you need to do is to edit the address of the server, you will find at the end of the script, simply change the "cloudServerIP" to the IP address of the VPN server for robots.
On the server side, you may want to again navigate to the bottom lines of the script, and modify the listening ports or addresses for server threads, or add another network service by adding another line with the "addTunnel" method.
Details of both server and client configurations for Dispatcher can be found in corresponding launch files.
The server part of the application is also available as a Docker image, information on running it is available in it's Docker repository - mjezersky/robotcloudserver.