![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yonah_air | 投稿日時: 2007/10/5 15:56 |
新米 ![]() ![]() 登録日: 2007/7/21 居住地: 福島 投稿: 8 |
ノードの移動ベクトルの出力 qualnet3.9.5
移動中のノード位置情報は、\3.9.5\addons\seq\node.cppのvoid NODE_PrintLocation 移動速度情報は、\3.9.5\mobility\mobility.cppのvoid MOBILITY_ReturnInstantaneousSpeed で得られることがわかったのですが、ノードの移動方向(ベクトル)を得る方法がわかりません。 2ノード間の無線リンク時間を算出したいのですが、毎秒ごとの移動ベクトルを得るとしたら、どのようにしたらよいでしょうか? |
hiro | 投稿日時: 2007/10/7 15:32 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: ノードの移動ベクトルの出力 > 2ノード間の無線リンク時間を算出したいのですが
無線リンク時間とノード位置情報/移動情報の関連がよくわからないのですが、 2ノード間の距離計算の COORD_CalcDistance ではダメだということでしょうか。 無線リンク時間というものをもう少し具体的に説明していただくと何かアドヴァイスできるかもしれません。 > 毎秒ごとの移動ベクトルを得るとしたら、どのようにしたらよいでしょうか? 『ベクトル』となると、自分でベクトルにするしかないと思います。 |
yonah_air | 投稿日時: 2007/10/10 2:10 |
新米 ![]() ![]() 登録日: 2007/7/21 居住地: 福島 投稿: 8 |
Re: ノードの移動ベクトルの出力 > 2ノード間の無線リンク時間を算出したいのですが
というのは、ノードA・Bがあり、お互い移動していると過程して、ノードBがノードAの電波到達範囲から離脱してしまうまでの時間を算出したい、と言うことです。 その場合、Aノードの電波到達範囲・2ノード間の相対距離・2ノードの移動速度と移動方向から算出したAノードを絶対としたBの移動速度と移動方向、の3つが必要となります。 > 『ベクトル』となると、自分でベクトルにするしかないと思います。 とありますが、直接ベクトルが入手できないのであれば、ノードのxy座標における進行方向(角度)が必要になります。そのための関数を探しているのですが、どこにあるのかわからないと言うのが自分の現状です。 ノードの移動方向(角度)を出力する関数に関するアドバイスがあれば、よろしくお願いします。 |
hiro | 投稿日時: 2007/10/10 3:20 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: ノードの移動ベクトルの出力 > その場合、Aノードの電波到達範囲・2ノード間の相対距離・
> 2ノードの移動速度と移動方向から算出したAノードを絶対と > したBの移動速度と移動方向、の3つが必要となります。 話を簡単にするため、伝搬条件が時刻Tに関係なく一定であると仮定して、 さらにアンテナ特性も無指向性とします。 そうすると電波到達範囲は、ノードAからある半径Rの球内部としてよいので、 ある時刻TにおけるノードAとノードBの距離を計算するということでよいですか? 2ノード間の距離を計算する関数はあったと思います。 今、手元に3.9.5のソースがないのですがCOORD_CalcDistanceだったはず。 > ノードの移動方向(角度)を出力する関数に関するアドバイス > があれば、よろしくお願いします。 ある時刻T1におけるノードの現在座標と、 ある時刻T2における次の移動先座標を使い、 自分の欲しい情報に加工するしかないと思います。 また、通常はxy座標かもしれませんが、 QualNetではz座標も定義可能ですから、 厳密にはベクトルは(x,y,z)になります。 そういえば、COORD_CalcDistanceAndAngleというのもみた記憶があります。 ./include/coordinates.h が関係していることは間違いないです。 あいまいな情報ばかりになってしまいました。 なにかヒントになればよいのですが。 |
ipoten | 投稿日時: 2007/10/10 18:08 |
一人前 ![]() ![]() 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: ノードの移動ベクトルの出力 こんにちは。横合いからすみません。
ある特定のノードの移動属性を知りたいのであれば、MOBILITY系のAPIが使えそうですよ。 たとえば * MOBILITY_ReturnCoordinates() * MOBILITY_ReturnOrientation() * MOBILITY_ReturnInstantaneousSpeed() これで目的が果たせるのではないでしょうか。 実際に使ったことはないので、中身を確認してみてください。 |
yonah_air | 投稿日時: 2007/10/11 3:16 |
新米 ![]() ![]() 登録日: 2007/7/21 居住地: 福島 投稿: 8 |
Re: ノードの移動ベクトルの出力 様々なご意見、ありがとうございました。
自分がやりたい事はを簡単に言えば「移動しているノードが周りに転送する制御パケットの中に"移動方向"を示す情報を含めたい」と言うものです。 寄せられた情報を元に、調べてみます。 わからなかったら、また質問をするかもしれませんが、よろしくお願いします。 |
yonah_air | 投稿日時: 2007/10/19 18:02 |
新米 ![]() ![]() 登録日: 2007/7/21 居住地: 福島 投稿: 8 |
Re: ノードの移動ベクトルの出力 mobility.cppのvoid MOBILITY_ReturnOrientation(const Node* node, Orientation* orientation)で角度が出力されるようですが、printfで出力を確かめようとしたところ、0が出力されて思うような結果が得られませんでした。
例えば、Orientation構造体の変数azimuthに方向が格納されるようなので 応答メッセージ受信イベントの中で Orientation orientation; MOBILITY_ReturnOrientation(node, &orientation); printf("node%3dの方向%d\n",node->nodeId,(int)orientation.azimuth); としたところ、(int)orientation.azimuthの出力は0でした。 Orientationは方向・azimuthは方位を意味するので、この関数で合っていると思うのですが、プログラムなど間違えの指摘があればよろしくお願いします |
ipoten | 投稿日時: 2007/10/22 13:00 |
一人前 ![]() ![]() 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: ノードの移動ベクトルの出力 こんにちは
azimuth が水平方向の方角で北を0度として右回りに0度〜359度 elevation が仰角で正面を0度として-180度〜179度 です。 で、肝心の MOBILITY_ReturnOrientation() の方。 あまり確認せずに「こんなAPIありますよ」と紹介したのですが、どうもこの関数で取れるノードの orientation と、適用したモビリティモデルによる現在の移動方向とが一致していないように見えます。(少なくともRANDOM_WAYPOINT_MOBILITYを適用してIDEのAnimatorで"Node Orientation Animation"を表示する限りは) たとえば waypoint モデルのソースコード (mobility_waypoint.cpp) を眺めてみると、ある時点の次の移動地点を指定していても、ノードの方向までは回転していないようです。(関数 MOBILITY_AddANewDestination() で orientation 指定はすべて0度) もし yonah_air さんが独自の MOBILITY モデルを作成しておられるようでしたら、このあたりを意識して作成されてみてはいかがでしょうか。 また、waypoint モデルであれば初期化時にノードのすべての時間と位置が決まるので、それらの情報を直接参照したりインタフェース関数を作ることによりノードの方向を計算することは可能と思います。 もし解決されましたら、ぜひここで紹介してください。 |
hiro | 投稿日時: 2007/10/23 13:57 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: ノードの移動ベクトルの出力 コードを詳細にみて確かめていないので、間違っていたらすみません。
ここでの azimuth って、Nodeの進行方向とは別じゃないかと思います。 GUIでNodeのWaypointを設定したときのPropertiesには、以下の6個があって、 Simulation Time X Position Y Position Z Position Azimuth Elevation X,Y,Zと Azimuth は別に定義することになっています。 つまり、GUIでただ単にマウスで移動点を指定しても、 そのNodeは『北(上、0度)を向いたまま』移動する。 だから Azimuth がゼロのままなのではないでしょうか。 たとえば、以下のシナリオではきちんとAzimuthを定義しています。 ./QualNet/4.0/scenarios/wireless/antenna/aligned-radiation-pattern/default.nodes 裏を返せば、Nodeをその場で(レーダーみたいに)ぐるっと360度回転させることも可能です。 同一の(x,y,z)で1秒ごとに Azimuth を変化させればよいわけです。 指向性アンテナを使うときには役に立つ方法ですね。 その Node の進行方向と Azimuth は連動していないので、 自分で計算するしかないと思います。 |
yonah_air | 投稿日時: 2007/10/24 10:27 |
新米 ![]() ![]() 登録日: 2007/7/21 居住地: 福島 投稿: 8 |
Re: ノードの移動ベクトルの出力 MOBILITY_ReturnOrientation()は、ノード移動方向との関連性は無いようですね。
現在waypointモデルを使用してシミュレーションを行っているので、まずは、そこから調査してみます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |