version: "3.8" services: gui-tools: env_file: - .env build: context: ./guiTools/ environment: # Display settings - DISPLAY=${DISPLAY} - WAYLAND_DISPLAY=${WAYLAND_DISPLAY} # - QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-xcb} # Default to X11 # If running with Wayland - XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} - ROS_MASTER_URI=http://ros-master:11311 # - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility # - NVIDIA_VISIBLE_DEVICES=all volumes: # X11 socket - /tmp/.X11-unix:/tmp/.X11-unix - ${XAUTHORITY:-~/.Xauthority}:/root/.Xauthority # Wayland socket #- ${XDG_RUNTIME_DIR}/wayland-0:${XDG_RUNTIME_DIR}/wayland-0 # Allow access to the host's GPU - /dev/dri:/dev/dri devices: # Provide access to GPU devices - /dev/dri:/dev/dri network_mode: host ipc: host #user: "${UID}:${GID}" privileged: true # Allow privileged access if necessary (e.g., for GPU access) # restart: unless-stopped # command: /bin/bash -c "source /opt/ros/foxy/setup.bash && rvis2" # Replace with the actual command to run Gazebo Ignition profiles: [ui] deploy: resources: reservations: devices: - driver: cdi device_ids: - nvidia.com/gpu=all ardupilot: env_file: - .env image: git.spirirobotics.com/spiri/ardupilot:spiri-master command: - /bin/bash - -c - | ./Tools/autotest/sim_vehicle.py $ARDUPILOT_VEHICLE --no-rebuild \ --no-mavproxy --enable-dds --sysid $DRONE_SYS_ID -I$INSTANCE profiles: - uav-sim stdin_open: true tty: true network_mode: host mavproxy: env_file: - .env image: git.spirirobotics.com/spiri/services-mavproxy:main command: > mavproxy.py --non-interactive --master tcp:127.0.0.1:$SERIAL0_PORT --out udpout:0.0.0.0:$MAVROS2_PORT --out udpout:0.0.0.0:$MAVROS1_PORT --sitl 127.0.0.1:$SITL_PORT --out udp:0.0.0.0:$GCS_PORT profiles: - uav-sim ipc: host network_mode: host restart: always mavros2: env_file: - .env image: git.spirirobotics.com/spiri/services-ros2-mavros:main command: ros2 launch mavros apm.launch fcu_url:="udp://0.0.0.0:$MAVROS2_PORT@:14555" namespace:="spiri$DRONE_SYS_ID" tgt_system:="$DRONE_SYS_ID" profiles: - uav-sim ipc: host network_mode: host restart: always depends_on: ardupilot: condition: service_started mavproxy: condition: service_started deploy: resources: limits: # cpus: '0.01' memory: 200M ulimits: nofile: soft: 1024 hard: 524288 mavros: #This service bridges our mavlink-based robot-coprosessor into ROS #In this example it connects to a simulated coprocessor. env_file: - .env image: git.spirirobotics.com/spiri/services-ros1-mavros:master command: roslaunch mavros apm.launch fcu_url:="udp://0.0.0.0:$MAVROS1_PORT@:14559" namespace:=spiri$DRONE_SYS_ID tgt_system:="$DRONE_SYS_ID" profiles: - uav-sim ipc: host network_mode: host restart: always deploy: resources: limits: # cpus: '0.01' memory: 200M ulimits: nofile: soft: 1024 hard: 524288 ros-master: env_file: - .env image: git.spirirobotics.com/spiri/services-ros1-core:main command: stdbuf -o L roscore profiles: - ros-master ipc: host network_mode: host restart: always deploy: resources: limits: memory: 1G # Madness, setting a low ulimit here fixes memory leaks # https://answers.ros.org/question/336963/rosout-high-memory-usage/ ulimits: nofile: soft: 1024 hard: 524288