rtshellのインストール

OpenRTM-aistでは、コマンドラインでRTCを操作するためのツールとしてrtshellと呼ぶツールを提供しています。rtshell は、ネームサーバー上に登録されている RTコンポーネントを管理すできるツールで, コンポーネントをactivate/deactivate/resetしたり、ポートの接続を行えます。 RTシステムの管理もできます。ここではそのインストール方法や、動作確認方法などについて説明します。なお、インストール以外の使い方などについてはrtshellを参照してください。

インストール方法

rtshellのインストールにはrtshellがPythonのプログラムであるため、OpenRTM-aist-Pythonのインストールが必要になります。よって、インストールはOpenRTM-aist-Pythonとrtshellのインストール、およびPythonの実行環境のインストールが必要になる場合があります。(Linuxの一括インストールはそのスクリプトの中でPythonのインストールを行いますが、Windowsのmsiのケースは前もってインストールをする必要があります。なお対応しているPythonのバージョンは3.7、3.6、3.5、2.7です。)

Windowsへのインストール

msiインストーラーによるOpenRTM-aistをインストールしてください。手順については下記のページを参照してください。
OpenRTM-aist 1.2系のインストール(Windows、msiインストーラー使用)

rtcwdコマンドの確認

コマンドラインでrtcwdコマンドを実行できるか確認してください。

 > rtcwd
 'rtcwd' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

このメッセージが表示された場合は、rtshell_post_installを実行してください。

 > rtshell_post_install -n
PythonをProgram Files下にインストールされている場合は、管理者でコマンドプロンプトを起動してください。

 > rtcwd
 rtcwd: Invalid CORBA naming service: localhost
このメセージは、動作確認(Windows編)で説明していますName Serverの起動を実行していないためですので問題ありません。

Linux環境へのインストール

一括インストールスクリプトを用いて、"-l c++"と"-l python"と"-l rtshell"オプションでrtshellをインストールをした後にrtshell_post_installを実行してください。

Ubuntu 18.04の場合:

一括インストールスクリプトをダウンロードしたディレクトリに移動し、以下のように入力します。

 $ sudo sh pkg_install_ubuntu.sh -l c++ -l python -l rtshell --yes
 $ sudo rtshell_post_install

実行を修了したら、一度ターミナルを閉じてください。

Raspbianの場合

一括インストールスクリプトをダウンロードしたディレクトリに移動し、以下のように入力します。

 $ sudo sh pkg_install_raspbian.sh -l c++ -l python -l rtshell --yes
 $ sudo rtshell_post_install

なおRaspbianの環境では現状問題が報告されており下記の方法で対処してください。

上記の実行後、sudoをつけないで

 $ rtshell_post_install

と実行し、最初の2つの問い合わせには下記のように’’n’’と答え、最後の問い合わせのみにyと答えてください。

 Link man pages? n
 Link documentation? n
 Add shell support to .bashrc? y

実行を完了したら、一度ターミナルを閉じてください。

動作確認(Windows編)

動作確認環境

以下では、Windows 10にmsiインストーラーでOpenRTM-aistをデフォルトでインストールした環境をもとに説明します。

サンプルコンポーネントセットSimpleIOを使って、rtshellが正しくインストールされているかを確認します。

サンプル(SimpleIO)を使用した動作確認

RTコンポーネントConsoleIn、ConsoleOutからなるサンプルセットを用います。ConsoleInはコンソールから入力された数値をOutPortから出力するコンポーネント、ConsoleOutはInPortに入力された数値をコンソールに表示するコンポーネントです。これらは簡単なI/O(入出力)を例示するためのサンプルです。ConsoleInのOutPortからConsoleOutのInPortへの接続をし、これらの2つのコンポーネントをアクティブ化(Activate)することで動作します。

Name Serverの起動

まずは以下の手順でName Serverを起動します。
  • 画面の左下の[ここに入力して検索]に"start naming service"と入力します。
  • [Start Naming Service]をクリックします。
    rtshell6.png
  • 以下のような画面が表示されます。
    rtshell5.png

サンプルコンポーネントの起動

サンプルコンポーネントを起動します。

Windows 10の場合は右下の「ここに入力して検索」にPython_Examplesと入力してサンプルコンポーネントの起動ファイルのディレクトリでエクスプローラを開きます。

rtm8-2.png
サンプルコンポーネント起動ファイル

「ConsoleIn.bat」「ConsoleOut.bat」をそれぞれダブルクリックして2つのコンポーネントを起動します。起動すると、下図のような2つのコンソール画面が開きます。 また、サンプルコンポーネントは通常下記のディレクトリ下にインストールされますので、そこからエクスプローラで直接起動しても構いません。
  • C:\Program Files\OpenRTM-aist\1.2.x\Components\Python
    rtm9-2.png
    ConsoleInコンポーネントとConsoleOutコンポーネント

コンポーネントが起動しない場合

コンポーネントが起動しない場合、いくつかの原因が考えられます。

コンソール画面が開いてすぐに消える

rtc.confの設定に問題があり、起動できないケースがあります。上記のサンプル起動ファイルがあるディレクトリ下Examples\SimpleIO¥rtc.confファイルを開いて設定を確認してください。例えば、corba.endpoint/corba.endpointsなどの設定が現在実行中のPCのホストアドレスとミスマッチを起こしている場合などは、CORBAが異常終了します。

以下のような最低限のrtc.confに設定しなおして試してみてください。

 corba.nameservers: localhost

omniORBpyがインストールされていない。

openrtm.orgが提供するmsiインストーラーにはomniORBpyが含まれていますが、カスタムインストールを選択すると、omniORBpyをインストールせずにOpenRTM-aist-Pythonをインストールできます。また、手動でインストールした場合には、omniORBpyが入っていない場合も考えられますので、omniORBpyがインストールされているか確認してください。

pyファイルの関連付けが違っている

ConsoleIn、ConsoleOutを起動するファイルは、

C:\Program Files\OpenRTM-aist\1.2.x\Components\Python\Examples\SimpleIO\ConsoleIn.py
C:\Program Files\OpenRTM-aist\1.2.x\Components\Python\Examples\SimpleIO\ConsoleOut.py

ですので、これらのファイルをダブルクリックしてみてください。うまく起動しないようでしたらファイルの関連付けが間違っています。

その他

ホスト名やアドレスの設定の問題で、起動がうまくいかないケースがあります。その場合、利用しているPCのIPアドレスをomniNames.exeに教えてあげるとうまくいくケースがあります。 環境変数OMNIORB_USEHOSTNAMEを以下のように設定します(以下は自ホストのIPアドレスが192.168.0.11の場合の例)。

 変数名(N): OMNIORB_USEHOSTNAME
 変数値(V): 192.168.0.11

rtshell操作

  • コマンドラインコンソールを開きます。
  • コマンドラインから以下のようにコマンドrtlsを実行し、以下のように表示されることを確認します。
     C:\Users\openrtm>rtls -R 127.0.0.1
     .:
     ConsoleIn0.rtc  ConsoleOut0.rtc
  • ConsoleInコンポーネントとConsoleOutコンポーネントを接続します。
     rtcon /localhost/ConsoleIn0.rtc:out /localhost/ConsoleOut0.rtc:in
  • ConsoleInコンポーネントとConsoleOutコンポーネントをActivateします。
     rtact /localhost/ConsoleIn0.rtc /localhost/ConsoleOut0.rtc
  • するとConsoleInとConsoleOutのコンソールが以下のように変わり、ConsoleIn側コンソールに"Please Input number:"と表示されます。
    rtm9-3.png
  • ConsoleInのコンソールから数値を(16bit整数の範囲で)入力しEnterキーを押します。
  • ConsoleOutのコンソールにConsoleInのコンソールで入力した数値が表示されるのを確認します。 同じ数値が表示されていれば動作は確認できました。
  • 以下のように入力しDeactivateします。
     rtdeact /localhost/ConsoleIn0.rtc /localhost/ConsoleOut0.rtc
    この時ConsoleIn.py側のコンソールに数値を入力しEnterキーを押すことにより、入力待ち状態を解消してください。 その後
     rtexit /localhost/ConsoleIn0.rtc
     rtexit /localhost/ConsoleOut0.rtc
    と入力し、コンソールが閉じることを確認してください。

動作確認(Linux編)

インストールが正常に終了したら、付属のサンプルで動作テストをします。サンプルは、通常は以下の場所にあります。
  • /usr/share/openrtm-1.2/components/python/<サンプルコンポーネントセット名>

サンプルコンポーネントセットSimpleIOを使って、OpenRTM-aistが正しくビルド・インストールされているかを確認します。

サンプルコンポーネントセットSimpleIO

RTコンポーネントConsoleIn、ConsoleOutからなるサンプルセットです。ConsoleInはコンソールから入力された数値をOutPortから出力するコンポーネント、ConsoleOutはInPortに入力された数値をコンソールに表示するコンポーネントです。これらは、単純なI/O(入出力)を例示するためのサンプルです。ConsoleInのOutPortからConsoleOutのInPortへ接続を構成し、これらの2つのコンポーネントをアクティブ化(Activate)することで動作します。

以降、サンプルは/usr/share/openrtm-1.2/components/python/SimpleIO下にあり、Python本体の実行ファイルにはサーチパスが設定されているものとして説明を記述します。

サンプルを使用した動作確認

ネームサーバーの起動

  • ネームサーバーを起動します。以下のコマンドで起動ができます。
     $ rtm-naming
  • OpenRTM-aist(C++)をインストールしていない環境では、下記スクリプトで起動できるように用意しています。
     $ python /usr/lib/python2.7/dist-packages/OpenRTM_aist/utils/rtm-naming/rtm-naming.py
           or
     $ python3 /usr/lib/python3/dist-packages/OpenRTM_aist/utils/rtm-naming/rtm-naming.py
    ここで{Python2.7|python3}は、Python版のOpenRTM-aistをインストールした時のLinux環境でインストールしてあったPythonのバージョンによって変わり、Python 2.7がインストールされていた場合は"Python2.7"です。(Ubuntu18.04のデフォルトはPython2.7です。)

以下のような画面が表示されます。

startnameservice002.png
ネームサーバー画面

サンプルコンポーネントの起動

  • ターミナルを開きます。
  • ターミナルでカレントディレクトリを/usr/share/openrtm-1.2/components/python/SimpleIOにします。
     $ cd /usr/share/openrtm-1.2/components/python/SimpleIO
  • ConsoleInコンポーネントを以下のコマンド起動します。
     $ python ConsoleIn.py
  • 別ターミナルを開きます。
  • カレントディレクトリを上記と同じところに設定します。
  • ConsoleOutコンポーネントを以下のコマンドで起動します。
     $ python ConsoleOut.py

ネームサービス上の名前の確認

  • 別ターミナルを開きます 以下のようにして名前を確認してください。
     $ rtls -R localhost
     .:
     ConsoleIn0.rtc  ConsoleOut0.rtc

    サンプルコンポーネントの接続

  • ConsoleIn0コンポネントとConsoleOut0を以下のコマンド接続します。 上記で開いたターミナルで
     rtcon /localhost/ConsoleIn0.rtc:out /localhost/ConsoleOut0.rtc:in
    と入力します。

サンプルコンポーネントのアクティブ化

  • 上記のターミナルで
     rtact /localhost/ConsoleIn0.rtc /localhost/ConsoleOut0.rtc
    と入力します。すると、Consolein.pyとConsoleOut.pyを起動したターミナルの以下の画面がとなり、ConsoleIn.pyを起動したターミナルではPlease input number:というプロンプト表示に変わります。
    simpleio_ubuntu.png
    アクティブ化後のConsoleInコンポーネントとConsoleOutコンポーネントのターミナル画面
  • 適当な数値(short intの範囲内:32767以下)をConsoleInを起動したターミナルで入力しEnterキーを押します。
  • ConsoleOut.pyターミナル画面に入力した数値と同じものが表示されます。これでConsoleInコンポーネントからConsoleOutコンポーネントへデータが転送されたことがわかります。

サンプルコンポーネントの非アクティブ化と終了

  • 以下のコマンドで非アクティブ化します。
     rtdeact /localhost/ConsoleIn0.rtc /localhost/ConsoleOut0.rtc
  • ConsoleIn.pyのターミナルは入力待ちになっているので、適当な数値: 32767以下を入力してEnterキーを押します。
  • 以下のコマンドを入力し、ConsoleIn.pyとConsoleOut.pyの実行が終了するのを、それぞれのターミナルで確認してください。
     rtexit /localhost/ConsoleIn0.rtc
     rtexit /localhost/ConsoleOut0.rtc

以上で、コマンドラインを用いたコンポーネントの基本動作の確認は終了です。