技術部門のBlog

Code & Daily thoughts.

Vagrant + Hrpsys-base + Watchdogではじめるロボットソフトウェア開発

前回のブログでは弊社が開発したWeb界隈で良く用いられているCI(継続的インテグレーション)をロボットソフトウェア開発でも利用できるシステムを紹介しましたが、今回もWeb開発の便利なツールをロボットソフトウェア開発に導入してみます。

今回導入するツールは、「Vagrant」と「watchdog」です。

ロボットソフトウェア開発をはじめるにあたって、まず大変なのは開発環境作りです。ROSを使う場合にはLinuxがインストールされた実マシンか仮想環境、RTMはWindowsへの対応も行われていますがインストール後の設定が煩雑で安定せずなかなかすぐに開発をはじめることができないのが現状です。「Vagrant(http://www.vagrantup.com)」はそのような開発環境の構築を劇的に楽にしてくれるツールです。

Vagrantには以下の機能があります:

  • Linuxインストール済みの仮想ディスクイメージ(BOX形式)の自動ダウンロード機能

  • 仮想化ソフトウェア(標準ではVirtualBox)を自動で操作してコマンド一つで仮想マシンを立ち上げる機能

  • 立ち上げた仮想マシンに対してソフトウェアのインストールなどを自動で行う(プロビジョニングする)機能

Vagrantは各種OS(Windows, OSX, Linux)に対応しており、どのOS上でも同じ操作で同じ環境を即座に立ち上げることができます。

弊社ではRTM,ROSの両者の開発ができる設定済みVagrant環境を以下のレポジトリで公開しています。

https://github.com/devrt/vagrant-robotics-boilerplate

今回はこの環境を使ってロボットソフトウェア開発をはじめる方法を説明します。Vagrant環境を立ち上げるには以下の手順で作業を進めてください。

Windows, OSX, Linux共通の手順:

  1. Vagrantをダウンロードしてインストールする: http://vagrantup.com/

  2. VirtualBoxをダウンロードしてインストールする: http://virtualbox.org/

オペレーティングシステムごとで異なる手順:

  • Windowsの場合はgitとsshをインストールする必要があります。両者が一度にインストールできるmsysgitパッケージを入れるのがおすすめです。 http://msysgit.github.io/

  • OSXでは追加でgitをインストールする必要があります。Homebrewを導入済みの環境であれば、「brew install git」コマンドでインストールできます。

  • Linuxでは「sudo apt-get install git」などとしてgitをインストールしてください。

次にターミナルを立ち上げて以下のコマンドを入力することでレポジトリをコピーします:

1
$ git clone https://github.com/devrt/vagrant-robotics-boilerplate.git

ターミナルで以下のコマンドを入れてVagrantを立ち上げます:

1
2
$ cd vagrant-robotics-boilderplate
$ vagrant up

「vagrant up」コマンドが入力されると以下の作業が自動で行われます:

  1. Linux仮想イメージのダウンロード

  2. ロボット関連ソフトウェアのインストール(プロビジョニング)

  3. ロボットシミュレーションを高速で行うための3Dアクセラレーションの設定

初回起動時は仮想イメージのダウンロードやプロビジョニングに時間がかかりますが全て自動で行われるのでしばらく放っておいてください、次回以降は高速に起動します。

Vagrantには以下のコマンドがあります:

  • 「vagrant up」仮想マシンの立ち上げ(初回のみプロビジョニングも行う)

  • 「vagrant ssh」仮想マシンへのログイン

  • 「vagrant halt」仮想マシンのシャットダウン

  • 「vagrant destroy」仮想マシンの消去(データが消えるので注意してください)

しばらくおいておくと以下の画像のような環境が立ち上がると思います(立ち上がらない場合はコメント欄からフィードバックください)。

この環境上でロボットソフトウェア開発を行ってみましょう。

今回はRTMを使って開発を行いますが、ソフトウェア開発者から見るとRTMもROSも同じような機能を提供してくれます。両者ともOSはLinuxを使う(RTMはWindowsにも対応している)のですが、ソフトウェア部品同士が通信し合うための通信規格とライブラリを提供してくれます。両者とも多言語(Polyglot)に対応しており開発にC++, Python, Javaが使えますが、パフォーマンスの問題から特にロボットの制御を行う下位レイヤではC++で開発されることが多いです(Pythonなど他の言語で開発された上位レイヤとも自由に接続可能です)。

ただ、コンパイルを必要とするC++を使った開発では開発の高速性が失われることが多いのが問題です。今回、Webの開発で良く使われる「watchdog」というユーティリティを使って開発プロセスを高速化する工夫をしてみました。

レポジトリは以下のURLで公開しています:

https://github.com/yosuke/test-devrtbuild-pa10

このプロジェクトではPA10ロボットにシンプルなPIDコントローラを接続して制御の実験を行っています。以下の手順でプロジェクトを開始することができます。

Vagrantへのログインとレポジトリのチェックアウト:

1
2
3
4
5
$ cd vagrant-robotics-boilderplate
$ vagrant up
$ vagrant ssh
(以下Vagrantログイン後のコマンド)
$ git clone https://github.com/yosuke/test-devrtbuild-pa10.git

watchdogの起動:

1
2
3
(Vagrantログイン後のコマンド)
$ cd test-devrtbuild-pa10
$ ./run.sh

「run.sh」を起動すると小さな窓が現れてプロジェクト内のファイルの監視が始まります。ファイルが変更されると自動でコンパイルとシミュレータの起動が行われます。

ターミナル上でエディタを起動して「PA10Controller.cpp」ファイルを編集してみてください。エディタには「nano」や「vi」を使うのが手軽ですが高機能なemacsをapt-getコマンドを使ってインストールしても良いでしょう。

1
$ nano PA10Controller.cpp

エディタ上でファイルをセーブすると、以下の動画のような状態になるはずです(この動画ではファイルの編集にemacsを使っています)。

ファイル監視機能の設定は、tricks.ymlファイルの中に記述されおり以下のような内容です。

tricks.yml
1
2
3
4
5
6
7
8
tricks:
- watchdog.tricks.ShellCommandTrick:
    patterns: ['*.cpp', '*.h']
    wait_for_process: true
    shell_command: 'make'
- watchdog.tricks.AutoRestartTrick:
    patterns: ['*.so', '*.xml']
    command: ['hrpsys-simulator', 'PA10Sample.xml']

好きな処理を付け加えることができるので、カスタマイズにも挑戦してみてください。

今回は開発の始め方までの内容で、RTMやROS自身の解説はできませんでしたが、また次回以降に解説を書きたいと思います。

Comments