SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Microsoft Robotics Developer Studio 2008 入門

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

Microsoft Robotics Developer Studio 2008 入門(3)

方向パッドを使ってみる

 図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]ボタンを押します。

次のページ
標準付属以外のシミュレーション環境を使ってみる

この記事は参考になりましたか?

Microsoft Robotics Developer Studio 2008 入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト asa(asa)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4291 2009/09/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー