SimplySIM NXT MSRDSのサンプルを動かしてみる(1)(VPL Explorer編)3−1

前回の「SimplySIM NXT MSRDSのサンプルを動かしてみる(1)(VPL Explorer編)」の続きです。

  • 今回やりたいこと

1.5つのサンプルの中の一つのVPL Explorerを実行してみる。
2.Sample2ServiceとVPL Explorerの違いを調べる。
3.VPL Explorerを修正し、自作したVPL図を動かしてみる。 →今回はここ。

SimplySIM NXT MSRDSは自分で作ったサービスを試してみることができるようなのですが、サービスの自作はまだ無理な気がするので、とりあえずVPL図のモータ制御と超音波センサのパラメータの設定箇所を書き換えて実行できるかを試してみようと思います。
尚、これは失敗した手順を説明しているので注意して下さい。

【実行手順】
(※SimplySIM NXT MSRDSを E:\Documents and Settings\username\Microsoft Robotics Dev Studio 2008 Expressにインストールした前提で説明します。)

1.E:\Documents and Settings\username\Microsoft Robotics Dev Studio 2008 Express\samples\Platforms\SimplySIM\NXT-MSRDS\Sources\VPLSamples\VPLExplorerの中にあるVPLExplorer.mvplをダブルクリックし、VPLを起動します。
VPL Explorerを参考に以下の値を書き換えたいので、上書きしてしまわないように先にメニューバーから「File→Save as」を選択し、「VPLExplorer_test.mvpl」という名前をつけて新規保存します。


2.「Sample2Service」で使われていた値と同じにすることで類似した動きが再現できるかを確かめたかったので、各パラメータ値をそれぞれ以下のように修正しました。

  • 修正前のVPL図(VPLExplorer.mvpl)

  • 修正後のVPL図(VPLExplorer_test.mvpl)

2-1.モータ出力のデフォルト値:0.5 → 0.3
2-2.超音波センサの検出範囲:40 → 60
2-3.40cm以内に障害物がある場合のSetDrivePower

  • LeftWheelPower -0.5 → -0.3
  • RightWheelPower -0.1 → -0.15


【参考】

            if (replace.Body.RawMeasurement <= SonarLimit)
            {
                // When an object is too close, avoid it
                _drivePort.SetDrivePower(-DrivePower, -DrivePower / 2);
            }


4.40cm以内に障害物がない場合のSetDrivePower

  • LeftWheelPower 0.5 → 0.3
  • RightWheelPower 0.5 → 0.3



3.SimplySIM NXT MSRDSインターフェイスに追加する。

・・・
あれ。。。?
VPL図を修正したのはいいのですが、この後、一体どうしたらいいんでしょう。。。σ(^-^;)



これで追加可能になったのかを確かめるためにSimplySIM - NXT-MSRDS.batをダブルクリックして起動後、「Add]ボタンを押します。(SimplySIM - NXT-MSRDS.batはSimplySIM NXT MSRDSをインストールしたフォルダの直下にあります。)



ここで、先ほど作成した「VPLExplorer_test.mvpl」を指定すればと思ったのですが、「VPLExplorer_test.mvpl」らしきものがが見当たりません。。。


どうやらサービスの状態になっているものしか選択できないようです。(;_;)
(【参考】VPLのServices欄に表示されているもの)


試しに、以前練習で作った空の「AAAAA」を選択してみると追加されました。


すると、サンプルの「VPLExplorer」はどうやってここに追加したのでしょう(?_?)
何か方法があるはず!と今までVPL図を作ったあとはメニューバーの「Run」→「start」を押して実行していたので、VPLExplorer.mvplを起動して、同様の操作をしてみました。
すると・・・

  • エラー1

  • エラー2



( ̄○ ̄;)
エラーです。。。

  • エラー1の詳細
Error: Partner enumeration during service startup failed. Partner Name:http://schemas.microsoft.com/robotics/2006/05/drive.html:LeftMotor
Partner Contract:
    Partners specified statically in service implementation class:
        PartnerAttribute Name:SubMgr,Contract:http://schemas.microsoft.com/xw/2005/01/subscriptionmanager.html,CreationPolicy:CreateAlways
        PartnerAttribute Name:LeftMotor,Contract:http://schemas.microsoft.com/robotics/2006/05/motor.html,CreationPolicy:UsePartnerListEntry
        PartnerAttribute Name:RightMotor,Contract:http://schemas.microsoft.com/robotics/2006/05/motor.html,CreationPolicy:UsePartnerListEntry
        PartnerAttribute Name:LeftEncoder,Contract:http://schemas.microsoft.com/robotics/2006/05/encoder.html,CreationPolicy:UsePartnerListEntry
        PartnerAttribute Name:RightEncoder,Contract:http://schemas.microsoft.com/robotics/2006/05/encoder.html,CreationPolicy:UsePartnerListEntry
    Partners specified at runtime, in CreateRequest:
        Name: http://schemas.microsoft.com/xw/2004/10/dssp.html:ConstructorService, Contract: http://schemas.microsoft.com/xw/2004/10/constructor.html, Service: dssp.tcp://asa-xp:50001/constructor
        Name: http://schemas.microsoft.com/xw/2004/10/dssp.html:PartnerListService, Contract: http://schemas.microsoft.com/xw/2004/10/partnerlist.html, Service: dssp.tcp://asa-xp:50001/drivedifferentialtwowheel/101b811a-eb13-488f-8dbb-f0ebca22670d/dss/partnermanager

Source: http://XXXXXXXX:50000/drivedifferentialtwowheel/101b811a-eb13-488f-8dbb-f0ebca22670d
Code site: Boolean HandlePartnerFailure(Microsoft.Ccr.Core.Port`1[System.Boolean], Microsoft.Dss.ServiceModel.Dssp.ServicePartnerMetadata, Microsoft.Dss.ServiceModel.Dssp.PartnerType, System.Exception)() at line:0, file
Time: 2009/01/08 5:11:36
  • エラー2の詳細
Error: Unable to instantiate activities.: 値を Null にすることはできません。
パラメータ名: uriString    System.ArgumentNullException: 値を Null にすることはできません。
    パラメータ名: uriString
       場所 System.Uri..ctor(String uriString)
       場所 Microsoft.Dss.Services.ModelInterpreter.RunningInstance.StartSubscription(Subscription subscription)
       場所 Microsoft.Dss.Services.ModelInterpreter.RunningInstance.Start(ServiceEnvironment environment, PartnerType[] partners, ModelInterpreterService service)
       場所 Microsoft.Dss.Services.ModelInterpreter.ModelInterpreterService.<LoadUri>d__26.MoveNext()
: http://www.w3.org/2003/05/soap-envelope:Receiver -> Fault
Source: http://XXXXXXXX:50000/model/vplexplorer
Code site: Boolean MoveNext()() at line:0, file
Time: 2009/01/08 5:12:07


あ、そうか。GenericDifferentialDriveブロック使ってるのに接続先のモータを指定していないのからこんなエラーが出てしまったのでしょうか。。。そういえば、今まではここでシミュレーション用のマニフェストファイルを指定していたことを思い出しました。
が、今回のSimplySIM NXT MSRDSの場合はなんのマニフェストファイルを指定すればいいのでしょう。。(?_?)

とりあえず、Configuration欄で「Use a manifest」を指定すると、Mnifestのドロップダウンリスト(?)に「Drive in Simulation.Manifest.xml」というファイル名が出てきたのでこれを指定して、再度メニューバーの「Run」→「start」を押して実行しました。
【変更前のGenericDifferentialDriveプロパティ】

【変更後のGenericDifferentialDriveプロパティ】


すると、今度はこんなエラーが。。。(/_;)/~~



困りました。。。(Θ_Θ)


  • 今後の課題
    1. SimplySIM NXT MSRDSに自作のVPL図は追加できないのかを確認する。
    2. Sample2Service.csとSample2ServiceTypes.csのモータと超音波センサの設定値部分を修正したサービスを新規作成し、SimplySIM NXT MSRDSに追加してみる。