ROS/ROS2のパッケージ管理のためにバージョン管理について調べていると、vcstools
, wstool
, rosinstall
, vcstool
など様々なバージョン管理ツールやバージョン管理のためのライブラリが出てきます。
それぞれの違いや使い分けが気になって調べたので、その違いと使い方についてまとめました。
この記事はROS Advent Calendar 2019の7日目の記事として12/21に公開しました。
2020年6月からここで紹介しているツールは概ね
vcstool
に一本化される流れになったようです。少し追記しています。
ツール/ライブラリ
vcstools
vcstools
は複数のバージョン管理システム(Subversion, Mercurial, Git, Bazaar)をPythonで使えるようにするためのAPIを提供するPythonライブラリです。
vcstools
vcstool
が推奨されています。
https://github.com/ros/rosdistro/issues/25432
wstool
, rosinstall
, rosws
vcstools
に依存しているのがコマンドラインツールのwstool
とrosinstall
です [1]wstools
というWSDLをパースするためのバージョン管理とは別のPythonライブラリもあります。 [2] wstool – ROS Wiki
https://wiki.ros.org/wstool。
wstool
rosintall
rosws
というコマンドも存在するようです [3] 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] rosws – ROS Wiki
https://wiki.ros.org/rosws。catkin workspacesを管理するためのツールがwstools
とのことですが、相互互換性があるようです [5] 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-115やREP-126にて定められています。
以下のように.rosinstall
ファイルを作成すれば、Gitで管理されているROSパッケージをまとめて使用することができます。
vcstool
が推奨されています。
https://github.com/ros/rosdistro/issues/25432
ROS wikiも更新されています。
http://wiki.ros.org/action/info/wstool?action=diff&rev2=16&rev1=15
vcstool
さらにこれらとは独立したコマンドラインツールとしてvcs
コマンドを提供するvcstool
があります。
vcstool
vcstool
はREP-115やREP-126の.rosinstall
形式とvcstool
のYAML形式どちらにも対応しているようです。
1ユーザがバージョン管理をする上で知っておきたいツール
2019年12月現在知っておきたいのはおそらく以下の2つだと思います。2つともできることはそれほど大きく変わらなそうです。「もっと違う情報があるよ!」という方は是非コメントやTwitterで教えてください。
wstool
- catkin workspaceを管理するためのツールとしてROS(ROS1)のチュートリアル等でよく
見かけます見かけましたが2020年6月に非推奨となりました。vcstool
に移行していくようです。
- catkin workspaceを管理するためのツールとしてROS(ROS1)のチュートリアル等でよく
vcstool
- ROS2から公式のドキュメントでも採用され始めた@drik-thomasさんのバージョン管理ツールです。
今から使い始めるならこちらをインストールするのがよいような気がします(個人の見解です)2020年6月からはwstool
ではなくこちらを使うように公式で案内されています[6]recommend / use vcstool instead of wstool · Issue #25432 · ros/rosdistro
https://github.com/ros/rosdistro/issues/25432。
- 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のパッケージ管理はかなり便利になります。
参考
コメント