前回はUbuntu Coreについて紹介しましたが,いわゆる”Snappyな”パッケージシステムは,Ubuntu Coreをインストールしなくても試すことができます.Ubuntu CoreはあくまでSnappyをパッケージシステムとして使っているにすぎません.今回は,通常のUbuntuの上で,”Snappyな”ROSパッケージを作ってみようと思います.
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の中のバイナリが含まれるように,書き換えます.書き換え方はチュートリアルに解説があるので参照してみてください.雰囲気でわかると思います.
name: talker-listener | |
version: '0.1' | |
summary: ros_tutorial talker and listener | |
description: | | |
The ROS talker / listener example from ros_tutorials | |
grade: stable | |
confinement: strict | |
parts: | |
workspace: | |
plugin: catkin | |
rosdistro: kinetic | |
catkin-packages: [roscpp_tutorials] | |
apps: | |
roscore: | |
command: roscore | |
plugs: [network, network-bind] | |
talker: | |
command: rosrun roscpp_tutorials talker | |
plugs: [network, network-bind] | |
listener: | |
command: rosrun roscpp_tutorials listener | |
plugs: [network, network-bind] |
$ 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のノードが動き始めたと思います.
著者について