2017/08/02:ROS + Snappy Ubuntu Core (2) : SnappyなROSパッケージを作ってみよう

前回はUbuntu Coreについて紹介しましたが,いわゆる”Snappyな”パッケージシステムは,Ubuntu Coreをインストールしなくても試すことができます.Ubuntu CoreはあくまでSnappyをパッケージシステムとして使っているにすぎません.今回は,通常のUbuntuの上で,”Snappyな”ROSパッケージを作ってみようと思います.

Snappy + ROS, https://www.crowdsupply.com/krtkl/snickerdoodle/updates/1890

SnappyなROSパッケージの作り方のチュートリアルは,ここにあります.とりあえずこの通りに従ってみましょう.

ただし,これをやる前に,Snapcraft Tourのチュートリアルを一通り読むことをお勧めします.

以下の手順は,Ubuntu 16.04 + ROS Kineticで試したものです.
まず,SnappyのパッケージングツールであるSnapcraftをインストールします.

$ sudo apt install snapcraft

SnappyパッケージにするためのROSパッケージが必要ですが,自分でコードを打ち込むのはめんどくさいので,githubからros_tutorialのソースコードをcloneします.

$ mkdir -p catkin_ws/src
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros/ros_tutorials.git

snapcraftで初期化します.

$ cd ~/catkin_ws
$ snapcraft init

snapというディレクトリができて,その下にsnapcraft.yamlというファイルができます.このファイルを,roscpp_tutorialsの中のバイナリが含まれるように,書き換えます.書き換え方はチュートリアルに解説があるので参照してみてください.雰囲気でわかると思います.

さて,いよいよパッケージを作成します.

$ cd ~/catkin_ws
$ snapcraft

なにやらネットワークからいろいろとダウンロードし始めました…snapcraftはcatkinワークスペースを理解できるので,package.xmlを見て,rosdepで必要なパッケージをダウンロードしているのです. 「必要なROSのパッケージは全部システム入ってるはずだけど?」と思われるかもしれませんが,Snappyパッケージは,アプリに必要なものを仮想コンテナにすべて含んだ形で持つので,作成の際にいちいちパッケージをダウンロードし,ソースコードならコンパイルして,仮想コンテナ内にインストールします. しばらくすると,処理が終わり,

Snapped talker-listener_0.1_amd64.snap

と,snapファイルが生成されます. これをインストールするには,

$ sudo snap install --dangerous publisher-subscriber_0.1_amd64.snap

とします.インストールされたか確かめて見ましょう.

$ snap list
Name Version Rev Developer Notes
core 16-2.26.9 2381 canonical -
talker-listener 0.1 x1 -

では,ノードを順番に起動してみましょう.

$ talker-listener.roscore
$ talker-listener.talker
$ talker-listener.listener

お馴染みの,talker-listenerのノードが動き始めたと思います.