Follow the steps mentioned in this tutorial for the product assembly. This assembly tutorial mainly includes two parts. The first is a tutorial on installing Raspberry Pi 4B/5 for ACCE model products, and the second is a tutorial for installing lithium batteries.Precautions: Verify correct battery polarity before powering on to avoid hardware damage. Refer to this guide to learn more about the precautions.
For first-time use of the UGV, you’ll have to configure the robot as per the instructions detailed out in this setup guide. This guide has detailed instructions to follow every phase mapped out below. Please use this guide to follow the step-by-step instructions for every phase.Here’s a quick work through of all the phases you need to perform for first-time use:
First Time Power On: Insert the pre-configured TF card, connect power, and wait for the OLED screen to display the robot’s IP address.
Connect to the Robot: Join the robot’s default Wi-Fi hotspot (AccessPopup) and open the web control interface in your browser.
Network Configuration: Switch the robot from its default hotspot to your local Wi-Fi network using the JupyterLab terminal.
Enable SSH: Turn on the SSH service via raspi-config so you can remotely access the Raspberry Pi from your terminal or IDE.
SSH into the Raspberry Pi: Once SSH is enabled, connect to the Raspberry Pi from your local terminal:
Copy
ssh ws@<UGV_IP> -p 22
Replace <UGV_IP> with your UGV Beast’s actual IP address, which is displayed on the OLED screen (the W: line). For example: ssh ws@192.168.0.144 -p 22.Credentials:
Username: ws
Password: ws
SSH Troubleshooting: In case you’re unable to enable SSH with the guide instructions, refer to this section to use an alternative way to establish a SSH connection.
When the UGV Beast is powered on, it automatically runs the Raspberry Pi’s default main program, which occupies the serial port and camera. This prevents ROS 2 (and our custom Cyberwave stack) from accessing the hardware. Before proceeding, you need to end and disable the main program.Follow both steps from the official Waveshare preparation guide:
1.1 End the main program — Stop the currently running main program to free the serial port and camera
In the standard Waveshare setup, after disabling the main program you would start their Docker remote service. Skip that step. Instead, you’ll pull and run the custom Cyberwave Docker image, which replaces the default Docker container with one that includes the MQTT Bridge, Cyberwave SDK, and pre-configured ROS 2 stack.
Now that the UGV Beast is set up and the default main program is disabled, you need to install the custom Cyberwave Docker image. This image contains the complete Cyberwave stack — the MQTT Bridge, Cyberwave SDK, ROS 2 drivers, and everything needed to connect the UGV Beast to its Cyberwave digital twin.
In case you haven’t already, from your local terminal, SSH into the UGV Beast’s Raspberry Pi:
Copy
ssh ws@<UGV_IP> -p 22
Replace <UGV_IP> with your UGV Beast’s actual IP address, displayed on the OLED screen (the W: line). For example: ssh ws@192.168.0.144 -p 22.Credentials:
To run the Cyberwave stack, you’ll create a service installer script on the Raspberry Pi. This script sets up a systemd service that automatically manages the Docker container, starting it on boot, restarting on crash, and keeping it running unattended.What the installer does:
Checks for image updates: Compares local and remote image versions, prompts to update if newer is available
Syncs container files: Merges the container’s /home to the Pi’s local /home, adding missing files without overwriting your existing configuration
Creates a systemd service (cyb-ugv-beast.service) that starts the container on boot and restarts it on crash
Once the container is running, SSH into the Docker container to configure Cyberwave credentials. This is a different SSH session from the Raspberry Pi host — it connects directly into the Docker container on port 23:
Copy
ssh root@<UGV_IP> -p 23
Replace <UGV_IP> with the same IP address from the OLED screen (e.g., ssh root@192.168.0.144 -p 23).Docker Container Credentials:
Username: root
Password: ws
The Raspberry Pi host is accessible on port 22 (for system and network tasks), while the Docker container is accessible on port 23 (for ROS 2 and Cyberwave configuration). These are two separate SSH sessions into different environments on the same device.
With the Docker container running and accessible via SSH (port 23), you can now configure the Cyberwave credentials, build the MQTT bridge, and launch the stack.
Inside the Docker container (SSH’d in on port 23), navigate to the ROS workspace:
Copy
cd /home/ws/ugv_ws
This is where the ROS workspace for the UGV Beast lives. You’ll see the build, install, log, and src folders here.Open the parameters file and set your Cyberwave API token:File:src/mqtt_bridge/config/params.yaml
Copy
broker: cyberwave_token: "your-api-token-here"
You can find your API token in the Cyberwave dashboard under Settings → API Keys.
Start the full UGV Beast ROS 2 stack with the MQTT bridge by running the launch script:
Copy
cd /home/ws/ugv_wschmod +x ugv_run.sh./ugv_run.sh
Once launched, the MQTT bridge establishes a connection to Cyberwave and begins streaming telemetry data from the robot to the digital twin.
Connection Established: If successful, you should see the digital twin in your Cyberwave environment updating in real time with the robot’s joint states and sensor data.
Go back to your Cyberwave environment and switch to Live Mode to view updates in real time.Add a UGV Beast controller policy to enable keyboard control. From here, you can:
The UGV Beast has two separate SSH hosts on the same device. Both use the UGV’s IP address (displayed on the OLED screen, the W: line), but they connect to different environments on different ports:
Host
User
Port
Purpose
Raspberry Pi
ws
22
System administration, Docker management, network config
Add the following entries to your local ~/.ssh/config file for quick, repeatable access. Replace the HostName with your UGV’s actual IP from the OLED screen:
Copy
Host ugv-ubuntu HostName <UGV_IP> User ws Port 22Host ugv-ubuntu-docker HostName <UGV_IP> User root Port 23
Once saved, you can connect with a short alias:
Copy
# Into the Raspberry Pi hostssh ugv-ubuntu# Into the Docker containerssh ugv-ubuntu-docker