大学時代に行っていたドローンの移動通信の研究になります。
C++,C
ubuntu(バージョンは覚えていません)
C/C++言語のコンパイラがインストールされている環境で
g++ main.cpp Connection.cpp CreateVertex.cpp NodeInfo.cpp
を実行する。
実行後 NumberOfContactAndMovingCost.txt ContactArea.txt ファイルが作成される。
NumberOfContactAndMovingCost.txtにはドローン同士の総コンタクト回数が記録され、ContactArea.txtにはドローンがコンタクトした場所が記録される。
災害時に基地局が破壊され携帯電話などが繋がらなくなった状況を想定する。移動体が移動し情報が伝搬されることによって情報が広がることによって、避難経路確保や物資輸送を効率的に行うことが出来る。
移動体がドローンであることによって倒壊した建物や渋滞に巻き込まれることなく情報を広げることが出来る。
現実世界でドローンが上空を移動する際には縦横無尽に移動するのではなく、上空に仮想道路を作成しその上を移動することになる。その際に飛行禁止エリアを考慮することも求められる。
一定時間複数のドローンが仮想道路を移動し、より少ない迂回距離でより多くの通信を回数を行うことができれば効率よく情報が広がっていくはずである。
効率のよい移動通信を実現するためにどのような仮想道路を作成すればよいのか、ドローンのスペックをどの程度にすればよいのかがこの研究の重要な部分である。実際の研究では複数の仮想道路を作成し結果をグラフ化したりして比較を行っているが、今回は研究で使ったプログラムの一部を掲載している。
ドローン同士の通信を行う処理が記述されたファイルである。
- CalculateDistanceBetweenTwoPointsでドローン同士の距離を計算する。
- ConnectTwoPointsでドローン同士の距離から通信可能かどうかを判断し、通信回数と通信した場所を記録する。
ドローンが上空を飛行する際の仮想道路を作成する際に必要な処理が記述されたファイルである。
- CreateVertexで飛行禁止エリアを考慮して頂点と辺の生成を行う。
- CreateBanedAreasで飛行禁止エリアを生成する。
- CreateVertexで頂点をランダムに生成する。
- SortVertexで中心に近い順で反時計回りに頂点のソートを行う。
- CreateEdgeで飛行禁止エリアを考慮し頂点同士を辺でつなげる。
- DijkstraMethodで最も中心に近い頂点から各頂点への最短距離を求める。
- DFSで中心に近い頂点から深さ優先探索を行いグラフが成立しているかどうかを確かめる。
コンピュータシミュレーションを行う上でのドローンのスペックや仮想道路の情報の定義、それぞれの変数宣言などを行う。
ドローンが生成され、地上から上昇し上空の仮想道路を移動し目的地まで下降する一連の流れの処理を行う。
- GenerateNodeでドローンを生成する。
- DestinationAndSpeedGenerationでドローンの目的地とスピードが与えられる。
- DACostでドローンがダイクストラ法に従って目的地にたどり着いたときの迂回距離を計算する。
- DAでドローンの目的地までの最短距離を求める。
- Movingでドローンを移動させる。
- MoveToでドローンの進行方向を決定する。
それぞれのファイルから関数を呼び出し、一定時間ドローンを飛行させ、総コンタクト回数とコンタクト場所情報を格納したファイルが生成する。
- GraphCheckによりグラフが生成されGenerateNodeによりドローンが地上に生成される。
- DestinationAndSpeedGenerationによりドローンの目的地とスピードが生成されMovingでドローンが移動する。
- CalculateDistanceBetweenTwoPointsでドローン同士の距離を計算しConnectTwoPointsでドローンの通信回数と通信した場所を記録する。
- これらの一連の流れを一定時間繰り返す。