Building ROS2 Galactic for QNX
Note: Use the menu at the bottom left corner of the page to select the distribution.
The following instructions go over the steps for building ROS2 Galactic for QNX including FastRTPS and CycloneDDS RMW implementations.
Overview of the build process
Starting with a QNX SDP7.1 installation along with the required cross compiled dependencies, the build process will cross compile ROS 2’s source code against SDP7.1 and the cross compiled dependencies. Binaries will be generated for the two architectures below:
aarch64le
x86_64
The generated files can then be transferred to the required target and used. The following document will go over the steps needed to cross compile the dependencies and ROS 2.
System requirements
HOST:
Ubuntu 20.04
QNX SDP7.1
For instructions to install SDP7.1 please follow the link: http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.qnxsdp.quickstart/topic/about.html
TARGET:
A QNX supported architecture running QNX SDP7.1
System setup
Set locale
Make sure to set a locale that supports UTF-8.
The following is an example for setting locale. However, it should be fine if you’re using a different UTF-8 supported locale.
sudo apt-get update && sudo apt-get install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
Add the ROS 2 apt repository
You will need to add the ROS 2 apt repository to your system. Make sure the Ubuntu Universe repository is enabled first by checking the output of this command.
$ apt-cache policy | grep universe
500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64
If you don’t see output like the above, then enable the Universe repository with these instructions.
sudo apt install software-properties-common
sudo add-apt-repository universe
Now add the ROS 2 apt repository to your system. First authorize our GPG key with apt.
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
Then add the repository to your sources list.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
Install development tools and ROS tools
# Install python 3.11
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt-get install -y python3.11-dev python3.11-venv python3.11-distutils software-properties-common rename
# Create a python 3.11 virtual environment
python3.11 -m venv env
source env/bin/activate
sudo apt update && sudo apt install -y \
build-essential \
git \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
wget
# install some pip packages needed for testing
python3 -m pip install -U \
argcomplete \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest
# Install additional tools needed for building the dependencies for QNX
sudo apt update && sudo apt install -y \
bc \
subversion \
autoconf \
libtool-bin \
libssl-dev \
zlib1g-dev \
rsync \
rename
python3 -m pip install -U \
Cython==0.29.35 \
numpy \
empy==3.3.4 \
lark-parser
# Optional: If CycloneDDS is needed then it has to be build for host first to use dssconf tool required when cross compiling
sudo apt install -y bison
cd ~/
git clone -b iceoryx https://github.com/eclipse-cyclonedds/cyclonedds.git
cd cyclonedds
mkdir build
cd build
cmake ..
cmake --build . --target ddsconf idlc
export DDSCONF_EXE=$(find ~/cyclonedds -type f -name ddsconf)
export IDLC_EXE=$(find ~/cyclonedds -type f -name idlc)
cd /opt && sudo wget https://cmake.org/files/v3.18/cmake-3.18.0-Linux-x86_64.sh
sudo mkdir /opt/cmake-3.18.0-Linux-x86_64
yes | sudo sh cmake-3.18.0-Linux-x86_64.sh --prefix=/opt/cmake-3.18.0-Linux-x86_64 --skip-license
sudo ln -s /opt/cmake-3.18.0-Linux-x86_64/bin/cmake /usr/local/bin/cmake
Building steps
1- From withing the directory ~/ros2_galactic, clone additional files necessary for building ROS 2 and the dependencies then merge them with your ROS 2 directory.
mkdir ~/ros2_galactic
cd ~/ros2_galactic
git clone -b galactic https://gitlab.com/qnx/frameworks/ros2/ros2_qnx.git /tmp/ros2
rsync -haz /tmp/ros2/* .
rm -rf /tmp/ros2
2- Import ROS 2 code.
mkdir -p ~/ros2_galactic/src
cd ~/ros2_galactic
vcs import src < ros2.repos
3- Import the required QNX build files for each dependency by importing QNX dependencies repositories.
mkdir -p src/qnx_deps
vcs import src/qnx_deps < qnx_deps.repos
4- Run a script to automatically embed <build_depend> in the packages that depends on qnx_deps.
./patch-pkgxml.py --path=src
5- Before building ROS 2, some packages will need to be ignored first. Which are as following.
./colcon-ignore.sh
6- Export CPU variable according to your target architecture:
Please note: If no CPU is set all architectures are going to be built.
options for CPU: aarch64, x86_64
export CPU=aarch64
7- Source qnxsdp-env.sh script.
. ~/qnx710/qnxsdp-env.sh
Optional: Add the sourcing command to the end of ~/.bashrc if you would like the environment to be set every time for you.
8- Build ROS 2.
./build-ros2.sh