Simulation won't start
Simulation won't start
Substrate uses Docker to run PX4 and Gazebo SITL simulations. If a simulation fails to launch:
-
Verify Docker is running. Open a terminal and run
docker ps. If the command fails, start Docker Desktop (macOS/Windows) or the Docker daemon (Linux). - Check available disk space. Simulation images are 2—4 GB each. If your disk is full, Docker cannot pull or run containers.
- First launch is slow. If this is the first time launching a particular simulation configuration, Substrate needs to pull the Docker image. This can take several minutes depending on your internet connection. Progress is displayed in the output panel.
- Port conflicts. If another application is using MAVLink ports (14540, 14550) or the Gazebo transport ports, the simulation container may fail to start. Stop any conflicting processes and try again.
3D Viewer shows a black screen
3D Viewer shows a black screen
The 3D Viewer requires a GPU that supports Vulkan (Windows/Linux) or Metal (macOS).On Linux:
- Install the Vulkan runtime and tools:
sudo apt install vulkan-tools mesa-vulkan-drivers - Verify Vulkan support: run
vulkaninfoand confirm at least one GPU is listed. - Update your GPU drivers to the latest version from your vendor (NVIDIA, AMD, or Intel).
- Metal is supported on all Macs from 2012 and later. If you see a black screen, ensure macOS is updated to at least version 12 (Monterey).
- Update your GPU drivers from the manufacturer’s website. Vulkan support is included in modern NVIDIA, AMD, and Intel drivers.
- If Vulkan is unavailable, Substrate falls back to DirectX 12.
~/.local/share/substrate/log (Linux), ~/Library/Logs/substrate/ (macOS), or %APPDATA%\substrate\log (Windows).AI Assistant not responding
AI Assistant not responding
The AI Assistant requires an active internet connection and an authenticated Substrate account.
- Check sign-in status. Click the avatar in the top-right corner of the window. If you are not signed in, click “Sign In” and complete the authentication flow.
- Check the connection indicator. A red indicator next to the AI panel header means the WebSocket connection to the AI backend is down. Verify your internet connection and try again.
- Free plan includes AI access. No upgrade is required to use the AI Assistant. If you are signed in and connected but still not receiving responses, the backend may be experiencing temporary load. Wait a moment and retry.
-
Firewall or proxy issues. If you are behind a corporate firewall, ensure that outbound WebSocket connections to
*.bedrockdynamics.studioon port 443 are allowed.
Docker images are large
Docker images are large
This is expected. PX4 + Gazebo simulation stacks include:Substrate will re-pull any required images automatically on the next simulation launch.
- A full physics simulator (Gazebo Harmonic)
- Sensor models (IMU, GPS, magnetometer, barometer, camera)
- Autopilot firmware (PX4 or ArduPilot)
- The simulation bridge (
substrate-sim-bridge) - Runtime dependencies (ROS 2 libraries, Protobuf, system packages)
Readiness indicators stay yellow
Readiness indicators stay yellow
After launching a PX4 SITL simulation, the readiness indicators (GPS, compass, EKF, gyroscope) transition from red to yellow to green as each subsystem initializes. It is normal for this process to take 10—15 seconds.If indicators remain yellow after 30 seconds:
- EKF convergence. The Extended Kalman Filter needs consistent sensor data to converge. If GPS or compass indicators are still yellow, the EKF cannot complete initialization. Check the simulation output panel for EKF-related warnings.
-
Sensor spawning. Ensure the simulation is using PX4 spawn mode (
PX4_MODEL=x500), not attach mode. Attach mode skips sensor spawning, which means the EKF never receives data and cannot converge. - World file issues. Some custom Gazebo worlds may not include the required sensor plugins (GPS, magnetometer). Verify that your world file includes the necessary sensor system plugins.
MAVLink messages not appearing
MAVLink messages not appearing
PX4 only auto-streams heartbeat messages by default. Substrate automatically sends
REQUEST_DATA_STREAM commands to enable additional message types (GPS, estimator status, attitude, etc.) when a simulation starts.If MAVLink messages are missing:- Verify the MAVLink port. PX4 SITL sends GCS telemetry on port 14550 by default. If you are using a custom MAVLink endpoint, confirm the port matches what Substrate expects.
- Check the MAVLink inspector. Open the Command Palette and search for “MAVLink Inspector” to see raw message traffic. If only heartbeat messages appear, the data stream request may have failed.
- Firewall rules. MAVLink uses UDP. Ensure that UDP traffic on the configured ports is not blocked.
-
GCS heartbeat filtering. PX4 echoes back ground control station heartbeats. These echoed messages have
mav_type=6(GCS) and are filtered out automatically by Substrate. Only messages from the autopilot are displayed.
Cannot connect to a remote robot
Cannot connect to a remote robot
Substrate connects to robots and external systems via Foxglove WebSocket.
-
Verify the bridge is running on the robot. SSH into the robot and confirm the Foxglove WebSocket bridge process is active:
- Check the port. The default Foxglove Bridge port is 8765. Confirm this in the bridge’s launch configuration and in the Substrate connection dialog.
-
Network connectivity. Ensure the robot is reachable from your development machine. Test with:
-
Firewall rules. Both the robot and your development machine must allow traffic on the bridge port. On Linux robots, check
ufworiptablesrules. -
VPN or SSH tunnel. If the robot is on a different network, you may need a VPN or SSH tunnel:
Then connect to
ws://localhost:8765in Substrate.
Diagnostic Information
If you need to file a bug report, include the following:- Substrate version: Found in Help > About.
- Operating system and version.
- GPU model and driver version: Run
vulkaninfo --summary(Linux/Windows) or check About This Mac > More Info (macOS). - Log file: Located at the paths listed in the “3D Viewer shows a black screen” section above.
- Docker version: Run
docker --version.