The goal of this repo is to set up a quick way to immediately start up the server for the EdyMobile. All files in this repo will be sufficient to set up the server.
Ensure docker is already installed
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable dockerYou can confirm installation with
docker --versionNow simply build with (don't forget to give execute access)
./build.shOR we build our base container. Here, all relevant ros2 files and python libraries are installed.
cd docker_base
docker build -t ros2_humble .
cd ..Next, we will set up the permanent volume (src folder), and open usb ports if necessary.
docker-compose buildWe can start the container as:
cd ~/ros2_humble_ws && docker-compose up -dWe can attach the terminal to the container with:
docker-compose exec ros2_humble /bin/bashTyping exit only detaches the terminal from the container. It will still run in the background. To fully end the container, do:
cd ~/ros2_humble_ws && docker-compose downSome nice aliases I use in ~/.bashrc are:
alias docker-compose-up='cd ~/ros2_humble_ws && docker-compose up -d && docker-compose exec ros2_humble /bin/bash'
alias docker-compose-attach='docker-compose exec ros2_humble /bin/bash'
alias docker-compose-down='cd ~/ros2_humble_ws && docker-compose down'Gazebo fortress has been configured in this container as well. However, we must allow docker to access the X-server, which allows GUI on a linux system. This can be done by the following line:
xhost +local:dockerThis can also be added to your local machine's bashrc file for convenience.
Recall that gazebo now starts with the following command:
ign gazeboIf Gazebo is unnecessary, it is recommended to leave out building the ros_gz_bridge as it has a long build time. On my computer it takes roughly 12 minutes to build.
This is the work for someone who uses windows. You may have to remove the following lines in the docker compose, but I have not tested this:
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:rw # Mount X11 socket for display forwarding
- $HOME/.Xauthority:/root/.Xauthority:ro
environment:
- DISPLAY=${DISPLAY} # Forward the DISPLAY environment variable
- QT_X11_NO_MITSHM=1 # Necessary for Qt applications to run in the container
- LIBGL_ALWAYS_SOFTWARE=1 # Force software rendering
- XAUTHORITY=$XAUTHIf you do not need gazebo, remove those lines anyway, and also these in the Dockerfile in the present working directory.
# Install gazebo using a temporary terminal
RUN bash -c "\
apt-get update && \
apt-get install -y lsb-release gnupg && \
curl -fsSL https://packages.osrfoundation.org/gazebo.gpg | tee /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg > /dev/null && \
echo 'deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main' > /etc/apt/sources.list.d/gazebo-stable.list && \
apt-get update && \
apt-get install -y ignition-fortress && \
apt-get clean && rm -rf /var/lib/apt/lists/*"
# Ensure Ignition Gazebo (Fortress) is in the PATH
ENV PATH="/usr/local/bin:/usr/bin:/opt/ros/humble/bin:${PATH}"In the container, the workspace should be fully build. Simply source it before using.
source install/setup.bash