![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
koichi | 投稿日時: 2008/9/22 18:47 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
node->mobilityDataの更新について 私はノードの配置や通信状況に応じて
各ノードが移動方向を決めるようなモビリティの 実装を試みています。 Qualnetでは 初めにシミュレーション時間内のノードの軌跡を 各ノード毎に決めて、それに沿う形で各層のプロトコルに したがったシミュレーション結果が出る仕様になっていると 思います。 そこで、私はあるイベントが起こった時間に その時の状況に応じて移動方向を決定する関数を埋め込み、 逐次その時間以降のノードの軌跡を上書きさせようと考えました。 そして、具体的には routing_aodv.cpp内にMOBILITY_WaypointInit関数を修正した 関数を埋め込み、 node->mobilityData->destArray[]を書き換えたのですが、 これでは、node->mobilityData->current->positionは 上書きされず、 はじめに決めた軌跡に則っているようでした。 nodeの生成のされ方やタイミングが分からないため、 これ以上どう対処していいのか考えつかず、 困っています。 すみませんが、ご助言お願いします。 |
hiro | 投稿日時: 2008/9/22 19:24 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: node->mobilityDataの更新について > nodeの生成のされ方やタイミング
であれば、 ./main/partition.cpp にある PARTITION_InitializeNodes 関数で、 NODE_CreateNode 関数が呼び出されています。 |
koichi | 投稿日時: 2008/9/25 15:21 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: node->mobilityDataの更新について 返信ありがとうございます。
Node* nodeの生成のタイミングは分かったのですが やはりnode->mobilityDataの更新のタイミングが分かりません。 *(node->currentTime)の値が更新されるときに 同時に更新されているはずだと思うのですが、 これらはどの関数で行われているか分かりますでしょうか? |
ipoten | 投稿日時: 2008/9/26 16:51 |
一人前 ![]() ![]() 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: node->mobilityDataの更新について こんにちは
今進んでいる議論とは外れてしまうかもしれません。 koichiさんが認識されているように、 引用: Qualnetでは なので、koichiさんが行いたいような、シミュレーション動作中に動的にモビリティを変更あるいは生成するためには、別のアプローチをとる必要があるのではないかと想像します。 本家SNTのフォーラムを検索してみると、このような記事が見つかります。Qualnet 4.0 - Dynamic mobility EXTERNAL APIを使うのが正しいかどうか私には分かりませんが、API EXTERNAL_ChangeNodePosition()の処理は参考になるのではないでしょうか? |
koichi | 投稿日時: 2008/10/6 20:16 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: node->mobilityDataの更新について ipotenさんありがとうございます。
EXTERNAL_ChangeNodePosition()での *ifaceの処理は少し敷居が高く感じたので、 挙げていただいた記事を参考にまずは MOBILITY_InsertANewEvent()を使うことを まねてみたのですが、 実行時 Assertion (mobilityData->next->time == CLOCKTYPE_MAX) failed in file ..\addons\kernel\mobility_priva te.cpp:455 とのエラーで止まってしまい、 この解決法が分かりません。 MOBILITY_InsertANewEvent()の呼び出し時に このエラーが起きているのですが、 呼び出し時点での、 mobilityData->next->timeの値は変わっていないので このAPIなしでは動作するプログラムで このAPIを入れることで致命的なエラーになるのも 疑問です。 どなたか理由がわかりましたらご助言お願い致します。 |
ipoten | 投稿日時: 2008/10/7 1:12 |
一人前 ![]() ![]() 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: node->mobilityDataの更新について こんにちは
想像ですが、これはmobilityDataの最新の(末尾の)リストアイテムであることを表しているのではないでしょうか? おそらく関数MOBILITY_InsertANewEvent()は、EXTERNAL APIからの利用を前提としていて、 "Insert"といいつつも、mobilityDataの途中ではなく常に末尾にイベントを追加するような使い方を想定しているのだと思います。 これも想像ですが、koichiさんがMOBILITY_InsertANewEvent()を呼び出すとき、 既にいくつかのモビリティイベントがスケジュールされていて、途中にイベントを挿入しようとして、 assertionに引っかかっているのではないでしょうか? |
koichi | 投稿日時: 2008/10/7 15:49 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: node->mobilityDataの更新について ありがとうございます。
はい、たしかにその通りです。 私は隣接ノードからの情報を 元に移動方向を決定するようなモビリティを 作ろうとしています。 そのため、移動方向を変える周期は一定としておらず 隣接ノードから特定のメッセージを受け取った時点で 移動方向を変える、といったことを考えていたため、 常に先のモビリティイベントまでスケジュールし それをどんどん上書きしていくような 形でMOBILITY_InsertANewEvent() を使おうとしていました。 一度、周期的に移動先を決定するように 書き換えて試してみます。 |
koichi | 投稿日時: 2008/10/9 9:42 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: node->mobilityDataの更新について 追加投稿失礼します。
上記のことを行う上で シミュレーション中に定期的に MOBILITY_InsertANewEvent()を 呼び出したいのですが、 現在不定期に呼び出される関数の中での 呼び出しを行っています。 シミュレーション中定期的に(出来れば短期間に)必ず 通るプログラムの部分があれば教えていただけますでしょうか? |
penguish | 投稿日時: 2008/10/9 9:55 |
常連 ![]() ![]() 登録日: 2005/4/8 居住地: 投稿: 45 |
Re: node->mobilityDataの更新について 引用:
えーっと・・・periodic なタイマーイベントを作って、そこでインプリするべきかと。 タイマーイベントの作成方法は基礎中の基礎なので programmer's guide にも書いてあると思います。 ![]() |
koichi | 投稿日時: 2008/10/9 10:07 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: node->mobilityDataの更新について なるほど、ありがとうございます。
勉強不足で基礎的なことを訊いてしまい申し訳ありません。 少しその方向で頑張ってみたいと思います。 |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |