Originally, I wanted to learn .NET, so I decided to build a robot management system, LGDXRobot Cloud, since I already had some experience with ROS. The system is designed for Automated Guided Vehicles (AGVs) to run automated tasks for transportation and logistics.
It has a real-time web portal that manages robot statuses and task processes. It also includes an interactive map that displays the location of every robot and its planned path.
The system also allows users to generate maps directly from the web portal, meaning the robot does not require GUI access for remote control.
LGDXRobot Cloud is a complete web service that includes user management with customisable permissions, email notifications for alerts, and security features such as two-factor authentication (2FA). It can also be integrated with third-party systems using a REST API.
LGDXRobot Cloud supports integration with any ROS 2-based robot using the LGDXRobot Cloud Adapter. Integration is straightforward: simply map the required topics to your robot’s configuration and it will be ready to operate.
This project is fully open-source and released under the MIT License.
Installing LGDXRobot CloudThis instruction is designed for users who want to experience the system only.
The computer hosting LGDXRobot Cloud requires Docker and Docker Compose to be installed.
Download the bootstrap files here. We need to create certificates to allow the system to operate. Unzip the bootstrap files, then in the certs folder run:
chmod +x ./generate-certs.sh
./generate-certs.shThe script generates all the necessary certificates. If you want to run LGDXRobot Cloud on a remote server, you can update app.conf and grpc.conf. Change the settings to the IP address or domain name of the server under [alt_names], then run ./generate-certs.sh again.
After running the script, the console will display the serial number (thumbprint) of the certificate. Copy the value (after the =symbol) and paste it into the relevant appsettings.json.
For example, for the first line, open appsettings.api.json and update the InternalCertificateThumbprint key as shown in the screenshot below.
Then start the environment:
cd ..
docker-compose upWait for the console to display the message:
data-1 exited with code 0This indicates that the database has been initialised and the API is ready. Alternatively, you can check whether the docker-compose-data-1 container has terminated.
To access the frontend, open: http://localhost:5102/. The default username and password are: admin / 123456
LGDXRobot Cloud can be operate with a physical robot or running in the simulation (Support both Webots and Gazeboo, but Webots is recommended). To begin with, create a folder to store the certificates. For the simulation, create an additional folder to share the Webots files.
Physical Robot
docker run -d \
--name lgdxrobot2 \
-v <path to certificates folder>:/config/keys \
-v /dev:/dev \
--device-cgroup-rule='c 188:* rwm' \
--device-cgroup-rule='c 166:* rwm' \
--device-cgroup-rule='c 13:* rwm' \
-e PUID=1000 \
-e PGID=1000 \
-p 3000:3000 \
-p 3001:3001 \
yukaitung/lgdxrobot2-desktop:latestSimulation Robot
1. Install Webots
2. Save the local simulation server script on the host computer.
3. Define WEBOTS_HOME environment variable.
4. Run the simulation server.
python3 <path>/local_simulation_server.py5. Run the LGDXRobot2 ROS 2 Docker image.
docker run --rm -it \
-e PUID=1000 \
-e PGID=1000 \
-v <path to certificates folder>:/config/keys \
-v <path to Webots share folder>:/config/share \
-p 3000:3000 \
-p 3001:3001 yukaitung/lgdxrobot2.desktop:latest6. Access the web interface at http://localhost:3000/
7. On the terminal in the container, set the environment variable:
export WEBOTS_SHARED_FOLDER=<path to Webots share folder>:/config/shareRobot CreationWe need to register a robot before continuing.
Step 1: Navigate to the Robots Creation Page
Expand the Navigation, select Robots and click Create Robot button in the top-right corner.
Step 2: Configure the Robot Name
Enter a robot name and press Next.
Step 3: Enter Chassis Information
Select LGDXRobot2 as the robot type. Enter 0 for the remaining fields, then press Next.
The chassis information does not affect system behaviour.
Step 4: Download Certificates
Download all the certificates and press Next, then press Done.
Step 5: Install Certificates
Move all certificates to the folder created for storing the keys, or send them to the robot computer.
Setting Up the MapAfter creating a robot, the next step is setting up the map on LGDXRobot Cloud using SLAM mode. The system will then receive map data from the robot running the Nav2 stack. SLAM mode is supported on only one robot. If a second robot tries to connect, it will be disconnected.
Step 1: Enter SLAM Mode on LGDXRobot Cloud
Expand the Navigation, select Realms and click View link for First Realm.
Then press Start SLAM button on the top right. The system will display Awaiting Robot…
Step 2: Launch Nav2 Stack and Connect to Cloud
Physical Robot
ros2 launch lgdxrobot2_bringup nav.launch.py \
slam:=True \
profile:='slam' \
use_cloud:=True \
cloud_address:=<Address of the cloud with port> \
cloud_root_cert:="/config/keys/root.crt" \
cloud_client_key:="/config/keys/My Robot.key" \
cloud_client_cert:="/config/keys/My Robot.crt"Simulation Robot
ros2 launch lgdxrobot2_bringup webots_nav.launch.py \
slam:=True \
profile:='slam-sim' \
use_cloud:=True \
cloud_address:=<Address of the cloud with port or 'host.docker.internal:port'> \
cloud_root_cert:="/config/keys/root.crt" \
cloud_client_key:="/config/keys/My Robot.key" \
cloud_client_cert:="/config/keys/My Robot.crt"Port number is 5162
If there is any errors, it is likely that the [alt_names] section in the certificate configuration does not include the IP address of the computer hosting the LGDXRobot Cloud.
Step 3: Complete the Exploration
If the connection is working, the map will appear in the middle. If it does not, click the Refresh button at the top middle.
To start exploration, press the Set Goal button at the top. Then set the goal by clicking on the gray area of the map and dragging the mouse to the desired position.
After finishing the exploration, press the Update Realm button in the top-right corner, then press Update to save the map. This will update the map on the cloud and save the map file on the robot. The robot will also stop navigating at the same time.
Step 4: Setup Waypoints
Waypoints are required for the robot to navigate through. Expand the Navigation, select Waypoints and select Create Waypoint in the top-right corner.
Create two waypoints using the data below. After entering the position for waypoint PT A, press Create, then press Create Waypoint again to create waypoint PT B.
The position of PT B can be any reachable location on the map. All coordinates are measured in metres.
A flow is a sequence of steps for completing tasks. Each flow can be customised to suit specific operational requirements.
Step 1: Navigate to The Flows Creation Page
Expand the Automation, select Flows and press Create Flow in the top-right corner.
Step 2: Create a Flow
In the Flow Detail section, specify the flow name and details. Search for Moving under Progress Name, then press Create.
Before running the first automation task, connect a robot to the system so that it can receive the task.
Step 1: Connect a Robot
Ensure that the PATH is set up correctly and the terminal running SLAM mode is closed. The map file should be found in the current directory.
Physical Robot
ros2 launch lgdxrobot2_bringup nav.launch.py \
use_cloud:=True \
map:=<Absolute path to the map yaml file> \
cloud_address:=<Address of the cloud with port> \
cloud_root_cert:="/config/keys/root.crt" \
cloud_client_key:="/config/keys/My Robot.key" \
cloud_client_cert:="/config/keys/My Robot.crt"Simulation Robot
ros2 launch lgdxrobot2_bringup webots_nav.launch.py \
use_cloud:=True \
profile:='loc-sim' \
cloud_address:=<Address of the cloud with port or 'host.docker.internal:5162'> \
cloud_root_cert:="/config/keys/root.crt" \
cloud_client_key:="/config/keys/My Robot.key" \
cloud_client_cert:="/config/keys/My Robot.crt"Step 2: Check the Connection
Click Home then click Robots on the top menu bar. If the connection is successful, the robot status will be displayed as Idle.
Step 1: Create A Task
Expand the Automation, select Tasks and press Create Task in the top-right corner.
Enter the name of the flow just created. Then, select waypoint PT A and press Add Waypoint. Next, select waypoint PT B. Press Create.
Step 2: View The Task
The system will redirect to the task list page, which may appear empty initially. Select Running at the top right to filter active tasks.
Click Home then click Map on the top menu bar to view the real-time progress of the task. Press the robot pin to expand its information and planned path.






Comments