ROS (1) ROS 2をソースコードからビルドする

公式ドキュメントを元にUbuntu上でROS 2をソースコードからビルドしてみます。

docs.ros.org

ターゲットプラットフォーム

Localeの文字セットの確認

現在のLocaleの文字セットがUTF-8か確認します。そうでなければ、UTF-8に設定します。(設定方法は省略)

$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=C.UTF-8
LC_TIME=C.UTF-8
LC_COLLATE="C.UTF-8"
LC_MONETARY=C.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=C.UTF-8
LC_NAME=C.UTF-8
LC_ADDRESS=C.UTF-8
LC_TELEPHONE=C.UTF-8
LC_MEASUREMENT=C.UTF-8
LC_IDENTIFICATION=C.UTF-8
LC_ALL=

ROSパッケージリポジトリ

ROSパッケージリポジトリをAPTのパッケージソースリストに追加します。

sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo 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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

開発ツールのインストール

ビルドに必要なツールをインストールします。

# sudo apt update
# sudo apt install -y build-essential cmake git libbullet-dev python3-colcon-common-extensions python3-flake8 python3-pip python3-pytest-cov python3-rosdep python3-setuptools python3-vcstool wget

次にテストに必要なPythonパッケージをインストールします。flake8はコードスタイルをチェックするツール、pytestはテストフレームワークです。

$ 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

続いて、DDSとRTPSの依存パッケージをインストールします。DDS (Data Distribution Service)は分散システムのPublish-Subscribe型のミドルウェア、RTPS (Real Time Publish Subscibe)はその通信プロトコルです。"--no-install-recommands"オプションを付けることで、必須ではない推奨パッケージのインストールを行いません。

# sudo apt install --no-install-recommends -y libasio-dev libtinyxml2-dev
# sudo apt install --no-install-recommends -y libcunit1-dev

ROS 2ソースコードの取得

ソースコードを取得する前にワークスペースを作成しておきます。

mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy

次にROS 2を構成するソフトウェアのソースコードをすべてクローンします。vcsは複数のリポジトリの操作を一括して行うツールです。

wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos

ROS 2のビルド

準備ができたので、ROSのワークスペースに移動してビルドします。

cd ~/ros2_foxy/
colcon build --symlink-install

動作確認

付属のサンプルを実行してみます。ターミナルを2つ開いて各々のシェルでsourceします。

. ~/ros2_foxy/install/local_setup.bash

一方のターミナルでSubscriberを起動します。

$ ros2 run demo_nodes_py listener

もう一方のターミナルでPublisherを起動すると、メッセージの送信を開始します。

$ ros2 run demo_nodes_cpp talker
[INFO] [1619854165.956554677] [talker]: Publishing: 'Hello World: 1'
[INFO] [1619854166.956357765] [talker]: Publishing: 'Hello World: 2'
[INFO] [1619854167.956328878] [talker]: Publishing: 'Hello World: 3'
[INFO] [1619854168.956349266] [talker]: Publishing: 'Hello World: 4'
[INFO] [1619854169.956349324] [talker]: Publishing: 'Hello World: 5'

Subscriber側で受信できたら成功です。

[INFO] [1619854165.973473612] [listener]: I heard: [Hello World: 1]
[INFO] [1619854166.957708801] [listener]: I heard: [Hello World: 2]
[INFO] [1619854167.957664713] [listener]: I heard: [Hello World: 3]
[INFO] [1619854168.957786642] [listener]: I heard: [Hello World: 4]
[INFO] [1619854169.957685326] [listener]: I heard: [Hello World: 5]