ogochan
前回、ROSを使うということにしたので、ROSのインストールから行います。
最近のROSは「ディストリビューション」から入れるということになっているようですが、あまり使われていないであろうOrange Pi 5の上であるということと、ソースが手元にあるのが気が楽だということ、もしかしたら自分でいじるかも知れないということから、ソースから入れることにします。
環境について
今回のプロジェクトでは、Orange Pi 5にゲームコントローラを接続して操作のベースとし、Stereo Piにルンバをつないで台車とすることにします。
そこでそれぞれの環境にROSを入れます。今回使うROSはROS2のIron Irwiniです。
Docker等は使いません。
環境の準備
手順はIron Irwiniのソースからのインストール手順に従います。
Orange Pi 5にはUbuntuをインストールしてあります。バージョンは22系です。去年の版ですが、それより後のものは公式には存在していないので、このまま行きます。
まず、universeが使えるようになっているか確認し、なければ使うように設定します。
# apt install software-properties-common
# add-apt-repository universe
ROSリポジトリを使えるようにします。
# apt update && sudo apt install curl -y
# 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
# apt update
この辺はありがちの手順ですね。apt update
をすると、使えるようになります。
次に開発ツールをインストールします。
# sudo apt install -y \
python3-flake8-docstrings \
python3-pip \
python3-pytest-cov \
python3-flake8-blind-except \
python3-flake8-builtins \
python3-flake8-class-newline \
python3-flake8-comprehensions \
python3-flake8-deprecated \
python3-flake8-import-order \
python3-flake8-quotes \
python3-pytest-repeat \
python3-pytest-rerunfailures \
ros-dev-tools
いろいろROS固有のツールがバイナリで入るのですが、これはツールだということで割り切って下さい。この辺のツールの中身を見る必要は、多分ないでしょう。
これで構築環境が出来ました。
ROSの構築
ROSの構築を行います。
ROSは「OS」とはついていますが、いわゆるOSではありません。また、自分でソースからbuildする場合であっても、UbuntuのOS領域である/usr
とかにインストールするわけでもありません。バイナリインストールした場合だと/opt
を作ってそこに置くようです。マイコンのSDKにありがちの、「自分で掘ったディレクトリの下にソースが展開されてそこで何でもやる」というタイプのものです。ROS2はROSと異なりdaemon的なものが動いたりもしませんので、いわゆる「マイコン開発環境」みたいなものが作られるだけと思って良いでしょう。
というわけで、まずはそれ用のディレクトリを作ります。ここからは一般ユーザです(プロンプトに注目)
$ mkdir -p ~/ros2_iron/src
ここの/ros2_iron
とあるのは、別に何でも構いません。以後の説明を読み換えれば良いだけです。ただ、構造として<どこか>/src
というように、そのディレクトリの下には自分でsrc
というディレクトリも作ります。ソースはこの下に置かれます。
ソースを落とします。
$ cd ~/ros2_iron
$ vcs import --input https://raw.githubusercontent.com/ros2/ros2/iron/ros2.repos src
src
の上の階層でsrc
にソースを落とすようにします。
vcs
という見慣れないコマンドがありますね。gitみたいなバージョン管理システムです。リポジトリもみんな大好きGitHubでもGitLabでもありませんね。ここは深くつっこまないで、「まぁそんなもの」と思っておきましょう。
依存関係をインストールします。
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"
buildします。
$ cd ~/ros2_iron/
$ colcon build --symlink-install
特に問題なく終了しました。つまり、Orange Pi 5でも、ROS2が入れられたわけです。
動作確認
あまりにすんなり入ってしまったので、ちゃんと動くかどうか心配になりました。
とりあえずいくつかのサンプルを試してみます。
talker, listner
まずはHello World的なものを動かしてみます。
$ . ~/ros2_iron/install/local_setup.bash
$ ros2 run demo_nodes_cpp talker
起動すると、
$ ros2 run demo_nodes_py talker
[INFO] [1702277195.729647111] [talker]: Publishing: "Hello World: 0"
[INFO] [1702277196.691776264] [talker]: Publishing: "Hello World: 1"
[INFO] [1702277197.690202689] [talker]: Publishing: "Hello World: 2"
[INFO] [1702277198.691791350] [talker]: Publishing: "Hello World: 3"
[INFO] [1702277199.691811414] [talker]: Publishing: "Hello World: 4"
こんな感じにメッセージが出ます。
これをとりあえず殺して(Ctrl-Cで死にます)、
$ ros2 run demo_nodes_py listener
としてやると、
何も表示されません。そこで、他のコンソールで
$ . ~/ros2_iron/install/local_setup.bash
$ ros2 run demo_nodes_cpp talker
としてから起動すると、
$ ros2 run demo_nodes_py listener
[INFO] [1702277559.079434486] [listener]: I heard: [Hello World: 0]
[INFO] [1702277559.979663902] [listener]: I heard: [Hello World: 1]
[INFO] [1702277560.979753632] [listener]: I heard: [Hello World: 2]
[INFO] [1702277561.979762904] [listener]: I heard: [Hello World: 3]
[INFO] [1702277562.979766885] [listener]: I heard: [Hello World: 4]
[INFO] [1702277563.978541971] [listener]: I heard: [Hello World: 5]
[INFO] [1702277564.991179020] [listener]: I heard: [Hello World: 6]
[INFO] [1702277565.990728051] [listener]: I heard: [Hello World: 7]
こんな感じで表示されます。つまり、talkerから送られたメッセージをlistnerが表示してくれているわけですね。これで一番基本的な部分が動いたことがわかりました。
亀
せっかくなので、もっと面白いデモを動かしましょう。
$ . ~/ros2_iron/install/local_setup.bash
$ ros2 run turtlesim turtlesim_node
おなじみの「亀」が出ます。
これを動かしてみましょう。
別のコンソールで、
$ . ~/ros2_iron/install/local_setup.bash
$ ros2 run turtlesim turtle_teleop_key
と入れると、
$ ros2 run turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
'Q' to quit.
と出て来ます。
書いてあるとおりのキーかカーソルキーを入れると亀が動きます。
まとめ
Orange Pi 5にROS2という、多分世の中ではあまり試されていない環境でしたが、特に問題となることもなくサクっと動いてくれました。昔、いろいろ苦労したような記憶もあるんですが何だったのでしょう。
とりあえず動いてくれたので、次回はゲームコントローラで亀を動かすところまでやってみましょう。