CodeZine(コードジン)

特集ページ一覧

Robotics Developer StudioとXbox 360コントローラで
ロボット制御シミュレーションを体験してみよう

Microsoft Robotics Developer Studio 2008 入門(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/09/17 14:00

目次

方向パッドを使ってみる

 図11のVPL図に方向パッドを使う機能を追加してみます。方向パッドを押すと押す方向によってロボットが前進、後退、進行方向が左右に動くVPLを作成します。

1. 必要なブロックを「Basic Activities」欄から配置する

 左上の「Basic Activities」欄からIf、Data(5個)、Merge(2個)、Join(2個)ブロックを中央の「ダイアグラム領域」にドラック&ドロップで配置します。

 Joinブロックも2つ以上のデーターフローを結合させる場合に使用するブロックですが、データに名称をつけて処理できる点がMergeブロックと異なります。

2. 必要なブロックを「Services」欄から配置する

 次に左下の「Services」欄からSimulatedGenericDifferentialDriveブロックを中央の「ダイアグラム領域」にドラック&ドロップで配置します。

 1、2で配置した状態を図12に示します。

図12:方向パッドを使うための準備
図12:方向パッドを使うための準備

3. [Connections]ダイアログを設定する

 2.で、XInputControllerとIfブロックを接続すると、[Connections]ダイアログが表示されるので、XInputControllerブロックのどの機能を使用するかを設定します。今回は方向パッドを使用してロボットを制御したいのでFrom側で方向パッドの状態が変更した場合に通知を発生する「DPadChanged」、To側でボタンの状態を受け取る「Condition」を選択し、[OK]ボタンを押します。

4. Ifブロックを設定する

 3.で「DPadChanged」を指定した場合、Up、Down、Left、Rightの4種類のボタンを判別することができます。今回はそれぞれ、前進、後退、進行先を左に向ける、進行先を右に向けるという動作を割り当てるため、Ifボタンのテキストボックスに「Up」と入力し、テキストボックス下方にあるプラスマークを押すとテキストボックスが追加されるので、順に「Down」「Left」「Right」と入力します。この状態を図13に示します。

図13:Ifブロックを設定したVPL図
図13:Ifブロックを設定したVPL図

5. Dataブロックを設定し、Ifブロックと接続する

 前進はYボタンに割り当てた機能と同じものを使用するため、Mergeブロックを使って、上記、「Bボタン、Yボタンを使ってみる」の手順5.で設定した「0.8」と入力したDataブロックとを接続します。

 次に、後進させる場合のスピードとして、Dataブロックのテキストボックスに「-0.8」と入力し、下三角マークを押して、データ型にdoubleを選択します。同様に進行先を左に向けるために、2つのDataブロックを使用し、上から順にテキストボックスに「0」「0.1」と入力し、データ型をdoubleとします。進行先を右に向けるためには2つのDataブロックを使用し、上から順にテキストボックスに「0.1」「0」と入力し、データ型をdoubleとします。

 5つすべてのDataブロックを設定し終えたら、Ifブロックの「Down」の結果出力ピン上でマウスを左クリックしたまま、「-0.8」と入力したDataブロックの入力ピンまでドラックし、この2つのブロックを接続します。また、Ifブロックの「Left」の結果出力ピンから次の「0」と「0.1」と入力した2つのDataブロックの入力ピンへそれぞれ接続します。同様にIfブロックの「Right」の結果出力ピンから次の「0.1」と「0」と入力した2つのDataブロックの入力ピンへそれぞれ接続します。

6. DataブロックをJoinする

 進行先を左や右に向けるためには左右のモータに与える値を別の値にする必要があります。そこで、どのDataブロックの値がどのモータに対する値なのかを指定するためにJoinブロックを使用して、Left、Rightと名称をつけます。Joinブロックのテキスボックスに上から順に「Left」「Right」と入力します。今回は進行先を左に向けるために左モータを止めて、右モータのみ出力するという方法をとるので、Ifブロックの「Left」の結果出力ピンと接続してあるDataブロックのうち「0」と「Left」を、「0.1」と「Right」を接続してください。同様に、Ifブロックの「Right」の結果出力ピンと接続してあるDataブロックのうち「0.1」と「Left」を、「0」と「Right」を接続してください。

7. Dataブロックをマージし、SimulatedGenericDifferentialDriveと接続する

 後進は左右のモータに与える数値は同じでよいので、Ifブロックの「Down」の結果出力ピンと接続してあるDataブロックと上記、「Bボタン、Yボタンを使ってみる」の手順6.でマージしたMergeブロックと接続します。

 進行先を左や右に向ける場合は左右のモータに与える数値を変えなければいけないので、まずは手順6.の2つのJoinブロックとMergeブロックを接続します。次にMergeブロックの結果出力ピンとSimulatedGenericDifferentialDriveの入力ピンを接続します。

8. [Connections]ダイアログを設定する

 手順7.でMergeブロックとSimulatedGenericDifferentialDriveを接続すると、[Connections]ダイアログが表示されるので、前進させる駆動力をSimulatedGenericDifferentialDriveに入力するためにFrom側で手順7.でマージした値を持つ「ForwardedOutput」、To側でモータの出力をセットする「SetDrivePower」を選択し、[OK]ボタンを押します。

9. [Data Connections]ダイアログを設定する

 7.で[OK]ボタンを押すと、[Data Connections]ダイアログが表示されます。

 Dataブロックで入力した値で左右のモータを制御したいので、LeftWheelPowerとRightWheelPowerに対してValue側でそれぞれ方向パッドの左ボタンと右ボタンの値を持つ「Left」「Right」を選択し、[OK]ボタンを押します。

10. シミュレーション環境を指定する

 図14にここまでのVPL図を示します。

図14:方向パッドを使えるように追加したVPL図
図14:方向パッドを使えるように追加したVPL図

 上記、「左右のトリガー(アナログ)ボタンを使ってみる」の手順4.と同様にマニフェストファイルに「LEGO.NXT.Tribot.Simulation.Manifest.xml」を指定します。

11. 作成したVPL図を実行する

 メニューのRunからStartを選択すると、DSSランタイムが実行され[Run]ダイアログ、[Visual Simulation Environment]画面がそれぞれ続けて立ち上がります。

 方向パッドを押すと押す方向によってロボットが前進、後退、進行方向が左右に向かう様子を確認してください。実行を終了するときは[Run]ダイアログの[STOP]ボタンを押します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Microsoft Robotics Developer Studio 2008 入門

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト asa(asa)

     <WINGSプロジェクトについて>  有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5