ROS/ROS2のパッケージ管理のためにバージョン管理について調べていると、vcstools
, wstool
, rosinstall
, vcstool
など様々なバージョン管理ツールやバージョン管理のためのライブラリが出てきます。
それぞれの違いや使い分けが気になって調べたので、その違いと使い方についてまとめました。
この記事はROS Advent Calendar 2019の7日目の記事として12/21に公開しました。
Contents
ツール/ライブラリ
vcstools
vcstools
は複数のバージョン管理システム(Subversion, Mercurial, Git, Bazaar)をPythonで使えるようにするためのAPIを提供するPythonライブラリです。
vcstools
wstool
, rosinstall
, rosws
vcstools
に依存しているのがコマンドラインツールのwstool
とrosinstall
です[1]wstools
というWSDLをパースするためのバージョン管理とは別のPythonライブラリもあります。[2]https://wiki.ros.org/wstool (opens in a new tab)" href="https://wiki.ros.org/wstool" target="_blank">wstool – ROS Wiki
https://wiki.ros.org/wstool。
wstool
rosintall
rosws
というコマンドも存在するようです[3]https://docs.ros.org/independent/api/rosinstall/html/rosws.html (opens in a new tab)" href="https://docs.ros.org/independent/api/rosinstall/html/rosws.html" target="_blank">rosws: A tool for managing source code workspaces — rosinstall 0.7.8 documentation
https://docs.ros.org/independent/api/rosinstall/html/rosws.html。こちらはrosbuild workspacesを管理するためのツールで、rosinstall
の機能だそうです[4]https://wiki.ros.org/rosws (opens in a new tab)" href="https://wiki.ros.org/rosws" target="_blank">rosws – ROS Wiki
https://wiki.ros.org/rosws。catkin workspacesを管理するためのツールがwstools
とのことですが、相互互換性があるようです[5]https://www.ros.org/reps/rep-0133.html#c-mutual-compatibility-between-rosws-and-wstool (opens in a new tab)" href="https://www.ros.org/reps/rep-0133.html#c-mutual-compatibility-between-rosws-and-wstool" target="_blank">REP 133 — Separation of build environment and source tree tools (ROS.org)
https://www.ros.org/reps/rep-0133.html#c-mutual-compatibility-between-rosws-and-wstool。
wstool
とrosinstall
で使用する.rosinstall
ファイルはREP-126にて定められています。
以下のように.rosinstall
ファイルを作成すれば、Gitで管理されているROSパッケージをまとめて使用することができます。
vcstool
さらにこれらとは独立したコマンドラインツールとしてvcs
コマンドを提供するvcstool
があります。
vcstool
vcstool
はREP-126の.rosinstall
形式とvcstool
のYAML形式どちらにも対応しているようです。
1ユーザがバージョン管理をする上で知っておきたいツール
2019年12月現在知っておきたいのはおそらく以下の2つだと思います。2つともできることはそれほど大きく変わらなそうです。「もっと違う情報があるよ!」という方は是非コメントやTwitterで教えてください。
wstool
- catkin workspaceを管理するためのツールとしてROS(ROS1)のチュートリアル等でよく見かけます。
vcstool
- ROS2から公式のドキュメントでも採用され始めた@drik-thomasさんのバージョン管理ツールです。今から使い始めるならこちらをインストールするのがよいような気がします(個人の見解です)。
使用例
wstool
とvcstool
の使用例をそれぞれ同じリポジトリで試してみます。
rt-net/raspicat_slamをダウンロードして、追加で必要なパッケージをGitHubからダウンロードしてきます。ここで紹介するコマンドを実行すると以下のパッケージを追加でダウンロードします。
vcstool
rt-net/raspicat_slamをダウンロードします。
cd ~/catkin_ws/src git clone https://github.com/rt-net/raspicat_slam
vcs
コマンドを使って追加でraspicat_slam/.kinetic_depends.rosinstall
に定義されているパッケージをGitHubからダウンロードします。すでに~/catkin_ws/src
にパッケージがある場合にはダウンロードされません。
vcs import < raspicat_slam/.kinetic_depends.rosinstall
以上でvcstool
を利用した追加パッケージのダウンロードは完了です。
rosdep
コマンドを使ってそれぞれのパッケージで追加で必要としているパッケージをapt-get
でインストールします。このステップはvcstool
を試すだけであれば不要です。
rosdep install -r -y -i --from-paths .
vcs status
と実行することでパッケージのリストと各パッケージの状態を確認できます。
$ vcs status .... === ./raspicat_gamepad_controller (git) === On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean === ./raspicat_ros (git) === On branch kinetic-devel Your branch is up to date with 'origin/kinetic-devel'. nothing to commit, working tree clean === ./raspicat_slam (git) === On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean === ./rt_usb_9axis_sensor (git) === On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean
vcs pull
と実行することでパッケージをまとめてアップデート(Gitで管理されているパッケージであればgit pull
)することができます。もちろんパッケージを指定して実行することも可能です。
$ vcs pull raspicat_ros raspicat_slam .. === raspicat_ros (git) === Already up to date. === raspicat_slam (git) === Already up to date. $ vcs pull .... === ./raspicat_gamepad_controller (git) === Already up to date. === ./raspicat_ros (git) === Already up to date. === ./raspicat_slam (git) === Already up to date. === ./rt_usb_9axis_sensor (git) === Already up to date.
wstool
wstool
を使ってrt-net/raspicat_slamをダウンロードします。
cd ~/catkin_ws/src/ [ ! -e .rosinstall ] && wstool init . wstool set --git raspicat_slam https://github.com/rt-net/raspicat_slam
wstool
コマンドを使って追加でraspicat_slam/.kinetic_depends.rosinstall
に定義されているパッケージをGitHubからダウンロードします。すでに~/catkin_ws/src
にパッケージがある場合にはダウンロードされません。
wstool merge raspicat_slam/.kinetic_depends.rosinstall wstool update
以上でwstool
を利用した追加パッケージのダウンロードは完了です。
rosdep
コマンドを使ってそれぞれのパッケージで追加で必要としているパッケージをapt-get
でインストールします。このステップはwstool
を試すだけであれば不要です。
rosdep install -r -y -i --from-paths .
wstool info
と実行することでパッケージのリストと各パッケージの状態を確認できます。
$ wstool info workspace: /home/ubuntu/catkin_ws/src Localname S SCM Version (Spec) UID (Spec) URI (Spec) [http(s)://...] --------- - --- -------------- ----------- --------------------------- rt_usb_9axis_sensor git master 904df140b473 github.com/AtsushiSaito/rt_usb_9axis_sensor.git raspicat_slam git master (-) 3df83747bf2c github.com/rt-net/raspicat_slam raspicat_ros git kinetic-devel 15fc7dd8a9b4 github.com/rt-net/raspicat_ros.git raspicat_gamepad_controller git master 45c20073c896 github.com/rt-net/raspicat_gamepad_controller.git
wstool update
と実行することでパッケージをまとめてアップデート(Gitで管理されているパッケージであればgit pull
)することができます。もちろんパッケージを指定して実行することも可能です。
$ wstool update raspicat_ros raspicat_slam [raspicat_ros] Updating /home/ubuntu/catkin_ws/src/raspicat_ros [raspicat_ros] Done. [raspicat_slam] Updating /home/ubuntu/catkin_ws/src/raspicat_slam [raspicat_slam] Done. $ wstool update [raspicat_gamepad_controller] Updating /home/ubuntu/catkin_ws/src/raspicat_gamepad_controller [raspicat_gamepad_controller] Done. [raspicat_ros] Updating /home/ubuntu/catkin_ws/src/raspicat_ros [raspicat_ros] Done. [raspicat_slam] Updating /home/ubuntu/catkin_ws/src/raspicat_slam [raspicat_slam] Done. [rt_usb_9axis_sensor] Updating /home/ubuntu/catkin_ws/src/rt_usb_9axis_sensor [rt_usb_9axis_sensor] Done.
まとめ
ROS/ROS2のパッケージ管理のためのバージョン管理ツール/ライブラリは複数あります。よく使われるツールであるwstool
とvcstool
は似ていますが、それぞれ使い方に違いがあります。
ROS(ROS1)ではwstool
を前提にして各種ドキュメントが作成されており、ROS2ではvcstool
を前提にして各種ドキュメントが作成されています。
定義ファイルをきちんと用意すればROS1でvcstool
を、ROS2でwstool
を使っても問題なく使用できます。 個人的には今から使い始めるならvcstool
をインストールするのがよいような気がします。
@strvさんがROS Advent Calendar 2019の2日目の記事でrosdep
の紹介をしているのであわせて読んでみてください。rosdep
+ vcstool
/wstool
でROSのパッケージ管理はかなり便利になります。

参考

コメント