このページではRaspberry PiマウスとLEGO Mindstorms EV3を連携したRTシステムの構築を行います。
Raspberry Piマウスをアクセスポイントとして、ノートPCとEV3をアクセスポイントに接続します。
※Raspberry Piマウスと同じ番号のEV3を使用するようにしてください。
EV3 には以下のデバイスが付属しています。
まず、EV3本体を土台に装着します。
他のデバイスを取り付ける場合は、チュートリアル(EV3)を参考にしてください。
第二部の、実機での動作確認まで完了してください。 この時点でノートPCとアクセスポイントのRaspberry Piが接続されているはずです。
中央のボタンを押せば電源が投入されます。
EV3 の電源を切る場合は最初の画面で EV3 本体の左上の戻るボタンを押して「Power Off」を選択してください。
再起動する場合は最初の画面で EV3 本体の左上の戻るボタンを押して「Reboot」を選択してください。
ev3dev の起動が途中で停止する場合には、中央ボタン、戻るボタン(左上)、左ボタンを同時押ししてください。画面が消えたら戻るボタンを離すと再起動します。
EV3の電源を投入してください。
起動後にRaspberry Piに自動接続します。 自動接続できた場合は、EV3の画面左上にIPアドレスが表示されます。 IPアドレスは192.168.11.yyyが表示されます。
EV3の画面上の操作でネームサーバーとRTCを起動します。
EV3 の操作画面から「File Browser」→「scripts」を選択してください。
ネームサーバー、RTCはstart_rtcs.shのスクリプトを実行することで起動します。
------------------------------ 192.168.11.yyy ------------------------------ File Browser ------------------------------ /home/robot/scripts ------------------------------ ../ Component/ ・・ [start_rtcs.sh ] ------------------------------
RTシステムエディタから、192.168.11.yyyのネームサーバーに接続してください。
この時点でRTシステムエディタのネームサービスビューにはlocalhost、192.168.11.1、192.168.11.yyyのネームサーバーが登録されています。 192.168.11.yyyのネームサーバーに登録されているRTCの名前はEducatorVehicle1となります。
RaspberryPiMouseRTC0(192.168.11.1)とEducatorVehicle1(192.168.11.yyy)をシステムダイアグラム上で接続してください。 EducatorVehicle0の現在の速度出力をRaspberryPiMouseRTC0の目標速度入力に接続することで、EV3の動きにRaspberry Piマウスが追従するようになります。
これで実習は一通り終了ですが、時間が余っている場合は以下のような課題に挑戦してみてください。
EV3のタッチセンサーのオンオフでRaspberry Piマウスを前進後退させるRTシステムを作成します。
EV3とタッチセンサーを35cmケーブルで接続してください。
以下のような仕様のRTCを作成します。
アクティビティでonExecuteを有効にしてください。
SampleTouchSensorのonExecute関数に以下のように記述します。
RTC::ReturnCode_t SampleTouchSensor::onExecute(RTC::UniqueId ec_id) { //新規データの確認 if (m_touchIn.isNew()) { //データの読み込み m_touchIn.read(); //配列の要素数が1以上かを確認 if (m_touch.data.length() == 2) { //0番目のデータがオンの場合は直進する指令を出力 //0番目のデータは右側のタッチセンサに対応 if (m_touch.data[0]) { //目標速度を格納 m_target_velocity.data.vx = m_speed; m_target_velocity.data.vy = 0; m_target_velocity.data.va = 0; setTimestamp(m_target_velocity); //データ出力 m_target_velocityOut.write(); } //1番目のデータがオンの場合は後退する指令を出力 //1番目のデータは左側のタッチセンサに対応 else if (m_touch.data[1]) { //目標速度を格納 m_target_velocity.data.vx = -m_speed; m_target_velocity.data.vy = 0; m_target_velocity.data.va = 0; setTimestamp(m_target_velocity); //データ出力 m_target_velocityOut.write(); } //オフの場合は停止する else { //目標速度を格納 m_target_velocity.data.vx = 0; m_target_velocity.data.vy = 0; m_target_velocity.data.va = 0; setTimestamp(m_target_velocity); //データ出力 m_target_velocityOut.write(); } } } return RTC::RTC_OK; }
データポートを以下のように接続後、タッチセンサをオンオフするとRaspberry Piが前進後退します。
以下GUIジョイスティックでRaspberry Piマウス、EV3を操作するRTシステムを作成します。
ジョイスティックコンポーネントはOpenRTM-aist Python版のサンプルにあります(TkJoyStickComp.py)。 ジョイスティックコンポーネントは、Windows 8.1の場合は「スタート」>「アプリビュー(右下矢印)」>「OpenRTM-aist 1.2.0」>「Python_Examples」をクリックして、エクスプローラーで「TkJoyStickComp.bat」をダブルクリックして起動してください。
TkJoyStickComp.pyのアウトポートのデータ型はTimedFloatSeq型であるため、TimedVelocity2D型に変換するRTCを作成する必要があります。
以下のような仕様のRTCを作成してください。
アクティビティはonExecuteをオンにしてください。
onExecute関数を以下のように編集してください。
RTC::ReturnCode_t FloatSeqToVelocity::onExecute(RTC::UniqueId ec_id) { //新規データの確認 if (m_inIn.isNew()) { //データの読み込み m_inIn.read(); //配列のデータ数確認 if (m_in.data.length() >= 2) { //目標速度格納 m_out.data.vx = m_in.data[1] * m_velocity_by_position; m_out.data.vy = 0; m_out.data.va = m_in.data[0] * m_rotation_by_position; setTimestamp(m_out); //目標速度出力 m_outOut.write(); } } return RTC::RTC_OK; }
以下のようにデータポートを接続してください。
EducatorVehicleRTCのsoundという名前のインポートに文字列(TimedString型)を入力すると、EV3が発声します。
RTC::ReturnCode_t SpeechSample::onExecute(RTC::UniqueId ec_id) { std::cout << "Please input: "; std::string ret; //文字入力 std::cin >> ret; //データに格納 m_out.data = CORBA::string_dup(ret.c_str()); setTimestamp(m_out); //データ出力 m_outOut.write(); return RTC::RTC_OK; }
文字列(const char*)をデータポートで出力する際はCORBA::string_dup関数で文字列をコピーする必要があります。
m_out.data= CORBA::string_dup("abc");
Raspberry Piマウスを起動すると、OpenCVCameraコンポーネントとarptコンポーネントが起動します。 OpenCVCameraコンポーネントは画像を取得するコンポーネント、artpコンポーネントは画像データからマーカの位置姿勢を計算して出力するコンポーネントです。
まずはカメラをRaspberry Piマウスに装着します。
以下の土台部品をRaspberry Piマウスに取り付けていきます。
以下の仕様でRTCを作成してください。
アクティビティはonExecuteをONにしてください。
onExecuteを以下のように編集してください。
RTC::ReturnCode_t testARToolKit::onExecute(RTC::UniqueId ec_id) { //新規データの確認 if (m_marker_posIn.isNew()) { m_target_vel.data.vx = 0; m_target_vel.data.vy = 0; m_target_vel.data.va = 0; //データの読み込み m_marker_posIn.read(); //マーカーの位置(X軸)が目標距離(X軸)よりも大きい場合 if (m_marker_pos.data.position.x > m_x_distance + m_error_range_x/2.0) { m_target_vel.data.vx = m_x_speed; } //マーカーの位置(X軸)が目標距離(X軸)よりも小さい場合 else if (m_marker_pos.data.position.x < m_x_distance - m_error_range_x/2.0) { m_target_vel.data.vx = -m_x_speed; } //マーカーの位置(Y軸)が目標距離(Y軸)よりも大きい場合 else if (m_marker_pos.data.position.y > m_y_distance + m_error_range_y/2.0) { m_target_vel.data.va = m_r_speed; } //マーカーの位置(Y軸)が目標距離(Y軸)よりも小さい場合 else if (m_marker_pos.data.position.y < m_y_distance - m_error_range_y/2.0) { m_target_vel.data.va = -m_r_speed; } setTimestamp(m_target_vel); //データ書き込み m_target_velOut.write(); } return RTC::RTC_OK; }
データポートを以下のように接続してください。
モーションエディタ/シミュレータ
動力学シミュレータ
統合開発プラットフォーム
産総研が提供するRTC集
東京オープンソースロボティクス協会
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
このページではRaspberry PiマウスとLEGO Mindstorms EV3を連携したRTシステムの構築を行います。
Raspberry Piマウスをアクセスポイントとして、ノートPCとEV3をアクセスポイントに接続します。
※Raspberry Piマウスと同じ番号のEV3を使用するようにしてください。
EV3のデバイス
EV3 には以下のデバイスが付属しています。
角速度モード: 最大 440 deg/sec
サンプリングレート 1,000 Hz
検出カラー数: 8色 (無色、黒、青、緑、黄、赤、白、茶)
サンプリングレート 1,000 Hz
距離 約1mm~18mm(アフレル調査値)
スイッチ可動域: 約4mm
距離計測精度: +/- 1 cm
前面電飾: 点灯:超音波発信中、 点滅:超音波観測中
回転数: 160から170RPM
定格トルク: 0.21 N・m (30oz*in)
停動トルク: 0.42 N・m (60oz*in)
重さ: 76 g
回転数: 240から250RPM
定格トルク: 0.08 N・m (11oz*in)
停動トルク: 0.12 N・m (17oz*in)
重さ: 36 g
EV3の組立て
まず、EV3本体を土台に装着します。
次に25cmケーブルでEV3と左右のLモーターを接続します。
ケーブルに接続するポート、デバイス名は記載してあります。
他のデバイスを取り付ける場合は、チュートリアル(EV3)を参考にしてください。
EV3との接続
ノートPCとRaspberry Piの接続
第二部の、実機での動作確認まで完了してください。 この時点でノートPCとアクセスポイントのRaspberry Piが接続されているはずです。
EV3の電源の入れ方/切り方
電源の入れ方
中央のボタンを押せば電源が投入されます。
電源の切り方
EV3 の電源を切る場合は最初の画面で EV3 本体の左上の戻るボタンを押して「Power Off」を選択してください。
再起動
再起動する場合は最初の画面で EV3 本体の左上の戻るボタンを押して「Reboot」を選択してください。
リセット
ev3dev の起動が途中で停止する場合には、中央ボタン、戻るボタン(左上)、左ボタンを同時押ししてください。画面が消えたら戻るボタンを離すと再起動します。
Raspberry PiとEV3の接続
EV3の電源を投入してください。
起動後にRaspberry Piに自動接続します。 自動接続できた場合は、EV3の画面左上にIPアドレスが表示されます。 IPアドレスは192.168.11.yyyが表示されます。
ネームサーバー、RTCの起動
EV3の画面上の操作でネームサーバーとRTCを起動します。
EV3 の操作画面から「File Browser」→「scripts」を選択してください。
ネームサーバー、RTCはstart_rtcs.shのスクリプトを実行することで起動します。
ネームサーバー追加
RTシステムエディタから、192.168.11.yyyのネームサーバーに接続してください。
この時点でRTシステムエディタのネームサービスビューにはlocalhost、192.168.11.1、192.168.11.yyyのネームサーバーが登録されています。 192.168.11.yyyのネームサーバーに登録されているRTCの名前はEducatorVehicle1となります。
動作確認
RaspberryPiMouseRTC0(192.168.11.1)とEducatorVehicle1(192.168.11.yyy)をシステムダイアグラム上で接続してください。 EducatorVehicle0の現在の速度出力をRaspberryPiMouseRTC0の目標速度入力に接続することで、EV3の動きにRaspberry Piマウスが追従するようになります。
RTCをアクティベートしてEducator Vehicleの車輪を転がすと、Raspberry Piマウスがそれに合わせて動作します。
自由課題
これで実習は一通り終了ですが、時間が余っている場合は以下のような課題に挑戦してみてください。
EV3のタッチセンサのオンオフでRaspberry Piマウスを操作
EV3のタッチセンサーのオンオフでRaspberry Piマウスを前進後退させるRTシステムを作成します。
タッチセンサー接続
EV3とタッチセンサーを35cmケーブルで接続してください。
RTCの作成
以下のような仕様のRTCを作成します。
アクティビティでonExecuteを有効にしてください。
SampleTouchSensorのonExecute関数に以下のように記述します。
RTシステム作成
データポートを以下のように接続後、タッチセンサをオンオフするとRaspberry Piが前進後退します。
ジョイスティックコンポーネントで2台同時に操作
以下GUIジョイスティックでRaspberry Piマウス、EV3を操作するRTシステムを作成します。
ジョイスティックコンポーネント起動
ジョイスティックコンポーネントはOpenRTM-aist Python版のサンプルにあります(TkJoyStickComp.py)。 ジョイスティックコンポーネントは、Windows 8.1の場合は「スタート」>「アプリビュー(右下矢印)」>「OpenRTM-aist 1.2.0」>「Python_Examples」をクリックして、エクスプローラーで「TkJoyStickComp.bat」をダブルクリックして起動してください。
RTC作成
TkJoyStickComp.pyのアウトポートのデータ型はTimedFloatSeq型であるため、TimedVelocity2D型に変換するRTCを作成する必要があります。
以下のような仕様のRTCを作成してください。
アクティビティはonExecuteをオンにしてください。
onExecute関数を以下のように編集してください。
RTシステム作成
以下のようにデータポートを接続してください。
EV3をしゃべらせる
EducatorVehicleRTCのsoundという名前のインポートに文字列(TimedString型)を入力すると、EV3が発声します。
RTC作成
以下のような仕様のRTCを作成してください。
アクティビティはonExecuteをオンにしてください。
onExecute関数を以下のように編集してください。
文字列(const char*)をデータポートで出力する際はCORBA::string_dup関数で文字列をコピーする必要があります。
RTシステム作成
以下のようにデータポートを接続してください。
マーカーの追従
Raspberry Piマウスを起動すると、OpenCVCameraコンポーネントとarptコンポーネントが起動します。 OpenCVCameraコンポーネントは画像を取得するコンポーネント、artpコンポーネントは画像データからマーカの位置姿勢を計算して出力するコンポーネントです。
Raspberry Piマウスがマーカーに追従するRTシステムを作成します。
カメラの装着
まずはカメラをRaspberry Piマウスに装着します。
以下の土台部品をRaspberry Piマウスに取り付けていきます。
部品①をRaspberry Piマウスの上部に装着してください。 左から押し込むようにして取り付けます。
この時、左側の突起がプレートを挟むように取り付けてください。
部品②を部品①の左側に上から差し込んでください。
部品③を左側から部品②に差し込んでください。
最後にカメラを搭載して、USBケーブルをRaspberry Piに差し込んだら完成です。
RTC作成
以下の仕様でRTCを作成してください。
アクティビティはonExecuteをONにしてください。
onExecuteを以下のように編集してください。
RTシステム作成
データポートを以下のように接続してください。
RTCをアクティベートしてカメラの前でマーカーを動かして、Raspberry Piマウスが移動するかを確認してください。