struct Velocity2D
{
/// Velocity along the x axis in metres per second.
double vx;
/// Velocity along the y axis in metres per second.
double vy;
/// Yaw velocity in radians per second.
double va;
};
struct TimedVelocity2D
{
Time tm;
Velocity2D data;
};
はじめに
このページではシミュレーター上の Raspberry Pi マウスを操作するためのコンポーネントの作成手順を説明します。
資料のダウンロード
まずは資料をダウンロードしてください。
インターネットに接続できない環境で講習会を実施している場合がありますので、その場合は配布のUSBメモリーに入れてあります。
作成する RTコンポーネント
RaspberryPiMouseSimulator コンポーネントと接続してシミュレーター上のロボットを操作するためのコンポーネントです。
RobotController コンポーネントの作成
GUI(スライダー)によりシミュレーター上のロボットの操作を行い、センサー値が一定以上の時には自動的に停止するコンポーネントの作成を行います。
作成手順
作成手順は以下の通りです。
動作環境・開発環境
Linux (ここでは Ubuntu 16.04 を仮定) 上に開発環境を構築します。
OpenRTM-aistのインストール
JDKのインストール
Ubuntu 18.04、18.10の場合は以下のコマンドでjava8に切り替えます。
openrtp起動後、RTSystemEditor でネームサーバに接続できない場合があります。その場合、/etc/hosts の localhost の行に自ホスト名を追記してください。
Python用エディタのインストール
Visual Studio Code、PyDev等のエディタをインストールしてください。
gitのインストール
cmakeのインストール
Premake、GLUTのインストール
ODEのビルドに必要です。
RaspberryPiMouseSimulator コンポーネント
シミュレーターコンポーネントについては手動でビルドを行います。 以下のコマンドを入力してください。
インターネットに接続できない環境で講習会を実施している場合がありますので、その場合は配布の USBメモリー内のスクリプトを起動してください。
コンポーネントの仕様
RobotController は目標速度を出力するアウトポート、センサー値を入力するインポート、目標速度や停止するセンサー値を設定するコンフィギュレーションパラメーターを持っています。
TimedVelocity2D 型について
2次元平面上の移動ロボットの移動速度を格納するデータ型である TimedVelocity2D 型を使用します。
このデータ型にはX軸方向の速度vx、Y軸方向の速度vy、Z軸周りの回転速度vaが格納できます。
vx、vy、vaはロボット中心座標系での速度を表しています。
vxはX方向の速度、vyはY方向の速度、vaはZ軸周りの角速度です。
Raspberry Piマウスのように2個の車輪が左右に取り付けられているロボットの場合、横滑りしないと仮定するとvyは0になります。
直進速度vx、回転速度vaを指定することでロボットの操作を行います。
距離センサーのデータについて
Raspberry Pi マウスの距離センサーのデータは物体との距離が近づくほど大きな値を出力するようになっています。
シミュレーターではこの値を再現して出力しています。 RobotController コンポーネントではこの値が一定以上の時に自動的に停止する処理を実装します。
RobotController コンポーネントのひな型コードの生成
RobotController コンポーネントのひな型コードの生成は、RTCBuilder を用いて行います。
RTCBuilder の起動
Eclipse では、各種作業を行うフォルダーを「ワークスペース」(Work Space)とよび、原則としてすべての生成物はこのフォルダーの下に保存されます。 ワークスペースはアクセスできるフォルダーであれば、どこに作っても構いませんが、このチュートリアルでは以下のワークスペースを仮定します。
まずは Eclipse を起動します。 OpenRTP を展開したディレクトリーに移動して以下のコマンドを入力します。
最初にワークスペースの場所を尋ねられますので、上記のワークスペースを指定してください。
すると、以下のような Welcome ページが表示されます。
Welcome ページはいまは必要ないので左上の「×」ボタンをクリックして閉じてください。
右上の [Open Perspective] ボタンをクリックしてください。
「RTC Builder」を選択することで、RTCBuilderが起動します。メニューバーに「カナヅチとRT」の RTCBuilder のアイコンが現れます。
新規プロジェクトの作成
RobotController コンポーネントを作成するために、RTC Builder で新規プロジェクトを作成する必要があります。
左上の [Open New RTCBuilder Editor] のアイコンをクリックしてください。
「プロジェクト名」欄に作成するプロジェクト名 (ここでは RobotController) を入力して [終了] をクリックします。
指定した名称のプロジェクトが生成され、パッケージエクスプローラ内に追加されます。
生成したプロジェクト内には、デフォルト値が設定された RTC プロファイル XML(RTC.xml) が自動的に生成されます。
RTC プロファイルエディタの起動
RTC.xmlが生成された時点で、このプロジェクトに関連付けられているワークスペースとして RTCBuilder のエディタが開くはずです。 もし起動しない場合はパッケージエクスプローラーの RTC.xml をダブルクリックしてください。
プロファイル情報入力とコードの生成
まず、いちばん左の「基本」タブを選択し、基本情報を入力します。先ほど決めた RobotController コンポーネントの仕様(名前)の他に、概要やバージョン等を入力してください。 ラベルが赤字の項目は必須項目です。その他はデフォルトで構いません。
次に、「アクティビティ」タブを選択し、使用するアクションコールバックを指定します。
RobotController コンポーネントでは、onActivated()、onDeactivated()、onExecute() コールバックを使用します。下図のように①の onAtivated をクリック後に②のラジオボタンにて [ON] にチェックを入れます。 onDeactivated、onExecute についても同様の手順を行います。
さらに、「データポート」タブを選択し、データポートの情報を入力します。 先ほど決めた仕様を元に以下のように入力します。なお、変数名や表示位置はオプションで、そのままで結構です。
次に、「コンフィギュレーション」タブを選択し、先ほど決めた仕様を元に、Configuration の情報を入力します。 制約条件および Widget とは、RTSystemEditor でコンポーネントのコンフィギュレーションパラメーターを表示する際に、スライダー、スピンボタン、ラジオボタンなど、GUI で値の変更を行うためのものです。
直進速度 speed_x、回転速度 speed_r はスライダーのより操作できるようにします。
次に、「言語・環境」タブを選択し、プログラミング言語を選択します。 ここでは、C++(言語) を選択します。なお、言語・環境はデフォルト等が設定されておらず、指定し忘れるとコード生成時にエラーになりますので、必ず言語の指定を行うようにしてください。
最後に、「基本」タブにある [コード生成] ボタンをクリックし、コンポーネントのひな型コードを生成します。
※ 生成されるコード群は、eclipse起動時に指定したワークスペースフォルダーの中に生成されます。 現在のワークスペースは、[ファイル] > [ワークスペースの切り替え...] で確認することができます。
ソースコードの編集
<ワークスペースディレクトリー>/RobotController/RobotController.pyをPython用エディタで開いて編集してください。
変数初期化部分の修正
OpenRTM-aist 1.1.2のRTC Builderを使用している場合は、変数初期化部分を修正する必要があります。(OpenRTM-aist 1.2.0では修正される予定です)
まずは、init関数のself._d_in変数初期化部分を修正してください。
次にself._d_out 変数初期化部分を修正してください。
これで完了です。
アクティビティ処理の実装
RobotController コンポーネントでは、コンフィギュレーションパラメーター(speed_x、speed_y)をスライダーで操作しその値を目標速度としてアウトポート(out)から出力します。 インポート(in) から入力された値を変数に格納して、その値が一定以上の場合は停止するようにします。
onActivated()、onExecute()、onDeactivated() での処理内容を下図に示します。
下記のように、onActivated()、onDeactivated()、onExecute() を実装します。
RobotController コンポーネントの動作確認
作成した RobotController をシミュレーターコンポーネントと接続して動作確認を行います。
以下より RaspberryPiMouseSimulator コンポーネントをダウンロードしてください。
インターネットに接続できない環境で講習会を実施している場合がありますので、その場合は配布のUSBメモリーに入れてあります。
NameService の起動
コンポーネントの参照を登録するためのネームサービスを起動します。
RobotController コンポーネントの起動
RobotController コンポーネントを起動します。
RobotController\build\srcフォルダーの RobotControllerComp ファイルを実行してください。
シミュレーターコンポーネントの起動
RaspberryPiMouseSimulator コンポーネントをインストールしたディレクトリーに移動後、下記のコマンドにて起動できます。
コンポーネントの接続
下図のように、RTSystemEditorにて RobotController コンポーネント、RaspberryPiMouseSimulator コンポーネントを接続します。
コンポーネントの Activate
RTSystemEditor の上部にあります [All Activate] というアイコンをクリックし、全てのコンポーネントをアクティブ化します。 正常にアクティベートされた場合、下図のように黄緑色でコンポーネントが表示されます。
動作確認
下図のようにコンフィギュレーションビューの [編集] ボタンからコンフィギュレーションを変更することができます。
スライダーを操作してシミュレーター上の Raspberry Pi マウスの操作ができるかを確認してください。
実機での動作確認
講習会で Raspberry Pi マウス実機を用意している場合は実機での動作確認が可能です。
手順は以下の通りです。
電源を投入する
Raspberry PiマウスにはRaspberry Piの電源スイッチとモーターの電源スイッチの2つがあります。
内側の電源スイッチをオンにするとRaspberry Piが起動します。
電源を切る場合
Raspberry Piの電源を切る場合は、電源スイッチから直接オフにはしないようにしてください。 3つ並んだボタンの中央のボタンを数秒押すとシャットダウンが始まります。 10秒程度でRaspbianのシャットダウンが終了するため、その後に電源スイッチをオフにしてください。
アクセスポイントに接続
SSID、パスワードは Rasoberry Pi マウスに貼り付けたシールに記載してあるので、その SSID に接続してください。
※ネットワークが切り替わった場合にネームサーバーへのコンポーネントの登録やポートの接続が失敗する場合があるのでOpenRTP、ネームサーバ、コンポーネントを一旦全て終了してください。 ネットワーク切り替え後に起動した場合には問題ないので、終了させる必要はありません。
OpenRTPを終了するには右上の×を押して終了してください。システムダイアグラムを保存するかどうか聞かれますが、Don't Saveを選択してください。
openrtpコマンドを実行してOpenRTPを起動してください。
RT System Editor上でネームサーバーを再起動するには「ネームサービスを起動」ボタンを再度クリックします。
Raspberry Pi上のネームサーバー、RTC起動
※この作業は以下のLiDAR付Raspberry Piマウスで必要な作業です。LiDAR無しのRaspberry Piマウスの場合は次の作業へ進んでください。
Edge、Chrome、Firefox等のWEBブラウザで192.168.11.1のアドレスにアクセスしてください。
するとRaspberryPiMouse with OpenRTM-aistの画面が表示されます。
まずはネームサーバーを起動するため、Start NameServerボタンを押してください。
RaspberryPiMouseRTCのStartを押してください。
元の画面に戻らない場合はBack to the top page.をクリックしてください。
これで完了です。
ネームサーバー追加
続いてRTシステムエディタの [ネームサーバー追加] ボタンで 192.168.11.1 を追加してください。
すると以下の2つの RTC が見えるようになります。
RaspberryPiMouseRTC は名城大学のロボットシステムデザイン研究室で開発されているラズパイマウス制御用の RTコンポーネントです。
ポートの接続
RTシステムエディタで RaspberryPiMouseRTC、RobotController コンポーネントを以下のように接続します。
モーターの電源を投入する
動作の前に、モーターの電源スイッチをオンにしてください。 モーターの電源はこまめに切るようにしてください。
アクティブ化
そして RTC をアクティブ化すると Raspberry Pi マウスの操作ができるようになります。