公式ドキュメントを元にUbuntu上でROS 2をソースコードからビルドしてみます。
ターゲットプラットフォーム
- Ubuntu 20.04 LTS
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]