Dockerfile.Simulation 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. # Copyright (c) Contributors to the Open 3D Engine Project.
  2. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  3. #
  4. # SPDX-License-Identifier: Apache-2.0 OR MIT
  5. #
  6. ARG ROS_VERSION=humble
  7. ARG UBUNTU_VERSION=jammy
  8. FROM ros:${ROS_VERSION}-ros-base-${UBUNTU_VERSION}
  9. ENV WORKSPACE=/data/workspace
  10. WORKDIR $WORKSPACE
  11. # O3DE Variables
  12. ARG O3DE_REPO=https://github.com/o3de/o3de.git
  13. ARG O3DE_BRANCH=main
  14. ARG O3DE_COMMIT=2310.1
  15. ENV O3DE_ROOT=$WORKSPACE/o3de
  16. # O3DE Extras Variables
  17. ARG O3DE_EXTRAS_REPO=https://github.com/o3de/o3de-extras.git
  18. ARG O3DE_EXTRAS_BRANCH=main
  19. ARG O3DE_EXTRAS_COMMIT=2310.1
  20. ENV O3DE_EXTRAS_ROOT=$WORKSPACE/o3de-extras
  21. # ROSConDemo Variables
  22. ARG ROSCON_DEMO_REPO=https://github.com/o3de/ROSConDemo.git
  23. ARG ROSCON_DEMO_BRANCH=main
  24. ARG ROSCON_DEMO_COMMIT=HEAD
  25. ENV ROSCON_DEMO_ROOT=$WORKSPACE/ROSConDemo
  26. ENV ROSCON_DEMO_PROJECT=$ROSCON_DEMO_ROOT/Project
  27. ENV ROSCON_DEMO_NAV_ROOT=$WORKSPACE/kraken_nav
  28. ENV ROSCON_DEMO_SEEDLIST=$ROSCON_DEMO_ROOT/Project/AssetBundling/SeedLists/ROSCon2022.seed
  29. # Copy the release-patch in case its needed
  30. COPY o3de_2.1.0.patch $WORKSPACE/
  31. ENV LANG=en_US.UTF-8
  32. # Setup time zone and locale data (necessary for SSL and HTTPS packages)
  33. RUN apt-get update \
  34. && DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata locales keyboard-configuration curl \
  35. && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
  36. && dpkg-reconfigure --frontend=noninteractive locales \
  37. && update-locale LANG=en_US.UTF-8 \
  38. && sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list' \
  39. && curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - \
  40. && rm -rf /var/lib/apt/lists/*
  41. # Install the required ubuntu packages
  42. RUN apt-get update \
  43. && apt-get install -y \
  44. binutils \
  45. clang \
  46. cmake \
  47. git \
  48. git-lfs \
  49. libglu1-mesa-dev \
  50. libxcb-xinerama0 \
  51. libfontconfig1-dev \
  52. libnvidia-gl-470 \
  53. libxcb-xkb-dev \
  54. libxkbcommon-x11-dev \
  55. libxkbcommon-dev \
  56. libxcb-xfixes0-dev \
  57. libxcb-xinput-dev \
  58. libxcb-xinput0 \
  59. libpcre2-16-0 \
  60. ninja-build \
  61. python3-pip \
  62. software-properties-common \
  63. ros-${ROS_DISTRO}-ackermann-msgs \
  64. ros-${ROS_DISTRO}-control-toolbox \
  65. ros-${ROS_DISTRO}-gazebo-msgs \
  66. ros-${ROS_DISTRO}-joy \
  67. ros-${ROS_DISTRO}-navigation2 \
  68. ros-${ROS_DISTRO}-rviz2 \
  69. ros-${ROS_DISTRO}-tf2-ros \
  70. ros-${ROS_DISTRO}-urdfdom \
  71. ros-${ROS_DISTRO}-vision-msgs \
  72. ros-${ROS_DISTRO}-cyclonedds \
  73. ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
  74. ros-${ROS_DISTRO}-slam-toolbox \
  75. ros-${ROS_DISTRO}-nav2-bringup \
  76. ros-${ROS_DISTRO}-pointcloud-to-laserscan \
  77. ros-${ROS_DISTRO}-teleop-twist-keyboard \
  78. ros-${ROS_DISTRO}-topic-tools \
  79. python3-colcon-common-extensions \
  80. && rm -rf /var/lib/apt/lists/* \
  81. && pip install python-statemachine
  82. ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
  83. # Clone, register, and build the projects
  84. RUN . /opt/ros/${ROS_DISTRO}/setup.sh \
  85. \
  86. # Clone o3de \
  87. \
  88. && git clone --single-branch -b $O3DE_BRANCH $O3DE_REPO $O3DE_ROOT \
  89. && git -C $O3DE_ROOT lfs install \
  90. && git -C $O3DE_ROOT lfs pull \
  91. && git -C $O3DE_ROOT reset --hard $O3DE_COMMIT \
  92. \
  93. ############################################################### \
  94. # Apply a patch to fix a release compile issue if needed \
  95. ############################################################### \
  96. && if [ "$(md5sum $O3DE_ROOT/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp | awk '{print $1}')" = "07389c00378a13f31f1d6faf097a026b" ];then git -C $O3DE_ROOT apply $WORKSPACE/o3de_2.1.0.patch; fi \
  97. \
  98. ############################################################### \
  99. # Clone o3de-extras \
  100. ############################################################### \
  101. && git clone --single-branch -b $O3DE_EXTRAS_BRANCH $O3DE_EXTRAS_REPO $O3DE_EXTRAS_ROOT \
  102. && git -C $O3DE_EXTRAS_ROOT lfs install \
  103. && git -C $O3DE_EXTRAS_ROOT lfs pull \
  104. && git -C $O3DE_EXTRAS_ROOT reset --hard $O3DE_EXTRAS_COMMIT \
  105. \
  106. ############################################################### \
  107. # Clone the ROSConDemo \
  108. ############################################################### \
  109. && git clone --single-branch -b $ROSCON_DEMO_BRANCH $ROSCON_DEMO_REPO $ROSCON_DEMO_ROOT \
  110. && git -C $ROSCON_DEMO_ROOT lfs install \
  111. && git -C $ROSCON_DEMO_ROOT lfs pull \
  112. && git -C $ROSCON_DEMO_ROOT reset --hard $ROSCON_DEMO_COMMIT \
  113. && cp -r $ROSCON_DEMO_ROOT/kraken_nav $ROSCON_DEMO_NAV_ROOT \
  114. \
  115. ############################################################### \
  116. # Get the O3DE python and register the gem paths and projects \
  117. ############################################################### \
  118. && $WORKSPACE/o3de/python/get_python.sh \
  119. && $WORKSPACE/o3de/scripts/o3de.sh register -ep $O3DE_ROOT \
  120. && $WORKSPACE/o3de/scripts/o3de.sh register -gp $O3DE_EXTRAS_ROOT/Gems/ROS2 \
  121. && $WORKSPACE/o3de/scripts/o3de.sh register -pp $ROSCON_DEMO_PROJECT \
  122. \
  123. # Run the project exporter to generate the ROSConDemo release package \
  124. \
  125. && $O3DE_ROOT/scripts/o3de.sh export-project -es ExportScripts/export_source_built_project.py \
  126. --project-path $ROSCON_DEMO_PROJECT \
  127. --log-level INFO \
  128. -assets \
  129. --build-tools \
  130. --config release \
  131. --archive-output none \
  132. --seedlist $ROSCON_DEMO_SEEDLIST \
  133. -noserver \
  134. -nounified \
  135. -out $WORKSPACE \
  136. && rm -rf $ROSCON_DEMO_ROOT \
  137. && rm -rf $O3DE_EXTRAS_ROOT \
  138. && rm -rf $WORKSPACE/o3de-extras \
  139. && rm -rf /root/.o3de \
  140. && rm -rf /root/O3DE
  141. # Build the navigation stack
  142. RUN . /opt/ros/${ROS_DISTRO}/setup.sh \
  143. && cd $ROSCON_DEMO_NAV_ROOT \
  144. && colcon build --symlink-install
  145. # Add the appropriate ros2 environment setup script to the system startup
  146. RUN echo "[Unit]" > /etc/systemd/system/setup_ros.service \
  147. && echo "After=network.target" >> /etc/systemd/system/setup_ros.service \
  148. && echo "" >> /etc/systemd/system/setup_ros.service \
  149. && echo "[Service]" >> /etc/systemd/system/setup_ros.service \
  150. && if [ "${ROS_DISTRO}" = "iron" ]; then \
  151. echo "ExecStart=/opt/ros/iron/setup.bash" >> /etc/systemd/system/setup_ros.service; \
  152. elif [ "${ROS_DISTRO}" = "humble" ]; then \
  153. echo "ExecStart=/opt/ros/humble/setup.bash" >> /etc/systemd/system/setup_ros.service; \
  154. elif [ "${ROS_DISTRO}" = "galactic" ]; then \
  155. echo "ExecStart=/opt/ros/galactic/setup.bash" >> /etc/systemd/system/setup_ros.service; \
  156. fi \
  157. && echo "" >> /etc/systemd/system/setup_ros.service \
  158. && echo "[Install]" >> /etc/systemd/system/setup_ros.service \
  159. && echo "WantedBy=default.target" >> /etc/systemd/system/setup_ros.service \
  160. && echo "" >> /etc/systemd/system/setup_ros.service
  161. ENV NVIDIA_VISIBLE_DEVICES all
  162. ENV NVIDIA_DRIVER_CAPABILITIES all