Robot Operating System (ROS)

This section will treat the installation of the Robot Operating System (ROS) in the AutoDock-AI container.

Note

All the solutions presented here have been already tested and are known to work. However, it is important to note that the user should always check the official documentation of the software to be installed for the most up-to-date information.

Classic ROS

By adding the following lines to the bottom of your Dockerfile, you can install ROS Noetic in the AutoDock-AI container. Installing different versions of ROS require small changes to the commands below.

# --- ROS NOETIC (you must use Ubuntu 20.04) ---
RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
RUN apt-get update
RUN apt-get install -y -q ros-noetic-desktop-full
RUN apt-get install -y -q \
    python3-rosdep \
    python3-rosinstall \
    python3-rosinstall-generator \
    python3-wstool \
    build-essential \
    python3-yaml \
    python3-catkin-tools \
    ros-noetic-tf \
    ros-noetic-usb-cam \
    ros-noetic-sensor-msgs \
    ros-noetic-geometry-msgs \
    ros-noetic-desktop

RUN rosdep init
RUN rosdep update

RUN echo '#!/bin/bash\nsource /opt/ros/noetic/setup.bash\nexec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh

To properly enable catkin build of catkin_make in the container, add the following line before the CMD line in your Dockerfile:

ENTRYPOINT ["/entrypoint.sh"] # Always for ROS

These lines will install ROS Noetic and the necessary packages to run it in the AutoDock-AI container. The rosdep init and rosdep update commands will initialize and update the ROS dependency manager. The entrypoint.sh script will source the ROS setup file before executing any commands in the container.

ROS 2

ROS 2 is the next generation of ROS, and it is designed to be more modular and scalable than ROS 1. To install ROS 2 in the AutoDock-AI container, add the following lines to the bottom of your Dockerfile:

Note

ROS 2 Jazzy requires Ubuntu 24.04. You can start from FROM ubuntu:24.04 in your Dockerfile.

# --- ROS 2 Jazzy ---
RUN locale  # check for UTF-8

RUN apt update && apt install -y -q locales
RUN locale-gen en_US en_US.UTF-8
RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.UTF-8

RUN apt install -y -q software-properties-common
RUN add-apt-repository universe
RUN apt update && sudo apt install curl -y -q
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | \
    tee /etc/apt/sources.list.d/ros2.list > /dev/null

RUN apt update && apt upgrade -y -q && \
    apt install -y -q \
    ros-dev-tools \
    ros-jazzy-desktop

RUN echo '#!/bin/bash\nsource /opt/ros/jazzy/setup.bash\nexec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh

To properly enable colcon build in the container, add the following line before the CMD line in your Dockerfile:

ENTRYPOINT ["/entrypoint.sh"] # Always for ROS

Important

Newer Debian/Ubuntu versions require python packages to be installed only within virtual environments. To bypass this check, add --break-system-packages when installing python packages.