Software Management
AutomatePro software is managed with Debian packages, systemd services, Docker Compose stacks, and ROS 2 configuration files under /opt/automatepro.
Install or Update AutomatePro
AutomatePro systems are normally installed from the Lemvos AutomatePro package registry.
Registry access may require a Cloudsmith API key provided by Lemvos.
-
Add the AutomatePro package repository:
curl -1sLf 'https://dl.cloudsmith.io/API_KEY/lemvos/automatepro/setup.deb.sh' | sudo -E bash -
Install or update the base package:
sudo apt update
sudo apt install automatepro-installer
The base automatepro-installer package depends on automatepro-installer-wwan, which installs the Quectel 5G connection manager.
Installation Prompts
During installation, the package may ask configuration questions.
| Prompt | Select or enter | Result |
|---|---|---|
automatepro-installer/override_cfg | true only when you intentionally want packaged defaults. | Replaces this package's files in /opt/automatepro/config with files from /opt/automatepro/defconfig and keeps the previous versions in /opt/automatepro/config.dpkg-old. When false, only missing config files are copied into the existing config directory. |
Do not override configuration on a tuned field system unless you have backed up /opt/automatepro/config.
Service Overview
The main services are:
| Service | Purpose |
|---|---|
automatepro-gmsl2.service | Initializes GMSL2 camera kernel modules and camera hardware. |
automatepro-gmsl2-ipc.path | Watches the camera recovery IPC path for restart requests. |
automatepro-gmsl2-reactor.service | Restarts GMSL2 hardware after the IPC path is triggered. |
automatepro-gmsl2-reload.service | Reloads the GMSL2 sensor module so connected cameras are detected. Runs once at boot, on a camera recovery request, or when you restart it; skipped while a camera is streaming. |
automatepro-io-agent.service | Starts the micro-ROS Agent container for the IO controller MCU. Each start resets the MCU and releases the E-STOP. |
automatepro-core-driver.service | Starts the core ROS 2 driver container for GNSS, IMU, cameras, RTK correction clients, and the driver manager. |
automatepro-foxglove-bridge.service | Starts the host-side Foxglove Bridge on the configured bridge port. |
automatepro-viz.service | Runs the AutomatePro model and IMU transform publishers on the host for visualization. The base package enables and starts it. |
automatepro-start-can0.service | Brings the can0 interface up at boot at 500 kbps. Stopping it takes can0 down. |
automatepro-wwan.service | Runs the Quectel connection manager for the optional 5G modem. The automatepro-installer-wwan package enables and starts it; see 5G. |
For IO controller diagnostic topics and message fields, see IO Controller.
Check the current status of all AutomatePro services:
systemctl list-units --all 'automatepro-*'
Healthy services show active and running. The one-shot setup services automatepro-gmsl2, automatepro-gmsl2-reload, and automatepro-start-can0 show exited, automatepro-gmsl2-ipc.path shows waiting, and automatepro-gmsl2-reactor stays inactive until a camera recovery request.
Logs
The services and their containers log to the system journal. Read a service's log with sudo journalctl -u <service>, for example sudo journalctl -u automatepro-core-driver.
Configuration Files
Runtime configuration lives under /opt/automatepro/config. Packaged defaults live under /opt/automatepro/defconfig.
| Path | Purpose |
|---|---|
/opt/automatepro/.env | Enables or disables drivers and sets ROS 2 environment values. |
/opt/automatepro/config/ros/camera_params.yaml | Camera driver parameters. |
/opt/automatepro/config/ros/gnss_position_params.yaml | GNSS position receiver parameters. |
/opt/automatepro/config/ros/gnss_heading_params.yaml | GNSS heading receiver parameters. |
/opt/automatepro/config/ros/imu_params.yaml | IMU driver parameters. |
/opt/automatepro/config/ros/ntrip_params.yaml | NTRIP correction client parameters. |
/opt/automatepro/config/ros/spartn_params.yaml | SPARTN correction client parameters. |
/opt/automatepro/config/ros/driver_manager_params.yaml | Driver manager parameters, including camera recovery. |
/opt/automatepro/config/ros/foxglove_bridge_launch.xml | Foxglove Bridge launch configuration used by automatepro-foxglove-bridge.service. |
/opt/automatepro/defconfig/ros/ | Default copies installed by the package. |
After changing files in /opt/automatepro/config/ros, restart the service that uses them. For sensor driver changes, restart automatepro-core-driver.
Enable or Disable Drivers
Edit /opt/automatepro/.env to control which core drivers start:
sudo nano /opt/automatepro/.env
Common flags:
| Variable | Packaged default | Set to 1 to enable |
|---|---|---|
ROS_DRIVER_GNSS_POSITION | 1 | GNSS position driver |
ROS_DRIVER_GNSS_HEADING | 1 | GNSS heading driver |
ROS_DRIVER_GNSS_RTK_CORRECTION_SPARTN | 0 | SPARTN correction client |
ROS_DRIVER_GNSS_RTK_CORRECTION_NTRIP | 0 | NTRIP correction client |
ROS_DRIVER_IMU | 1 | IMU driver |
ROS_DRIVER_CAM_1 | 1 | Camera 1 driver |
ROS_DRIVER_CAM_2 | 1 | Camera 2 driver |
ROS_DRIVER_MANAGER | 1 | Driver manager and camera recovery monitor |
Apply changes:
sudo systemctl restart automatepro-core-driver
Other values in /opt/automatepro/.env:
| Variable | Packaged default | Purpose |
|---|---|---|
ROS_DOMAIN_ID | 0 | ROS 2 domain ID of the AutomatePro services. |
XRCE_DOMAIN_ID_OVERRIDE | 0 | ROS 2 domain ID the IO Agent uses for the IO controller topics. Keep it equal to ROS_DOMAIN_ID. |
GMSL2_CAM_TYPE | SG3S-ISX031C-GMSL2F | GMSL2 camera type. SG3S-ISX031C-GMSL2F uses the 3 Gbps link rate; SG3S-ISX031C-GMSL2 does not. |
NTRIP_USERNAME, NTRIP_PASSWORD | not set | Credentials for the NTRIP correction client. |
Change the ROS Domain ID
Set the same domain ID for ROS_DOMAIN_ID and XRCE_DOMAIN_ID_OVERRIDE. Nothing derives one from the other, so changing only ROS_DOMAIN_ID leaves the IO Agent on the old domain and the IO controller topics do not appear. This example sets domain 7:
sudo sed -i -e "s/^ROS_DOMAIN_ID=.*/ROS_DOMAIN_ID=7/" \
-e "s/^XRCE_DOMAIN_ID_OVERRIDE=.*/XRCE_DOMAIN_ID_OVERRIDE=7/" \
/opt/automatepro/.env
Restart the services that read the value:
sudo systemctl restart automatepro-io-agent automatepro-core-driver automatepro-foxglove-bridge automatepro-viz
The services read the domain ID from /opt/automatepro/.env, but ros2 commands in your terminal use ROS_DOMAIN_ID from your shell, which AutomatePro sets in ~/.bashrc. Change it there to the same value, or those commands do not see the AutomatePro topics:
sed -i "s/^export ROS_DOMAIN_ID=.*/export ROS_DOMAIN_ID=7/" ~/.bashrc
source ~/.bashrc
Check the new value:
grep ROS_DOMAIN_ID ~/.bashrc
Other open terminals keep the old value until you run source ~/.bashrc in them or open a new one.
/opt/automatepro/.env keeps your edits across package upgrades.
Verify ROS 2 After Changes
To check the drivers after a change, follow Verify the System in the Quick Start Guide.