アドホックデモアプリ
まえがき
アドホックデモアプリを作成しました.その経緯とか.
毎年6月~7月は1回生のコース選択の時期です.
コース選択にあたって1回生向けのコース紹介があり,1回生は各コースの先生の説明を聞いたり展示を見ながらどのコースにするかを選ぶのです.
コース紹介では各研究室でポスターを作成し,ポスターセッションのようにして好きなところを1回生に回ってもらう方式で行っているのですが,やはり目を引くのは「動展示」です.
ポスターの説明だけでなく,実際に動くものを見せるほうが聞いているほうも面白いですし,何より遠目で「なんか面白そうだ」と目を引くことができます.
ところが,うちの研究室では研究分野もあってか,これまでなかなか「動展示」できるものがほとんどありませんでした.
ずっと何かできたらいいのになと思いつつも,これまで作成するまではなかなか動けませんでした.
はじめに思いついたのはアクセスポイントを用意して,複数端末をぶら下げ,画像か何かを送り合って擬似的にアドホック感を出すアプリです.
これなら端末間でコネクションを張って簡単にできそうだなと.
ただし,アドホック感を出すにはアクセスポイントは(物理的に)見えないところに隠しておく必要があります.笑
また,来てくれた学生へ説明するときにも,あくまでも「デモ」ということで擬似的に再現しているという断りを入れなければなりません.
他の部分ならともかく,アドホックネットワークという根幹の部分を擬似的に再現するのは面白くないと思ったのです.
なんとか端末間をアドホックに接続したい・・・と色々考えていました.
以前にAndroidを改造してAdhoc接続できるようにカスタムROMを入れて繋げたりしていましたが,Androidはセキュリティの強化でできなくなっているようでした.
他の手はないかと調べてみると,olsrdというものがあることを知りました.
olsrdはlinux系のOSでolsrルーチングプロトコルを動かすことができるデーモンです.
試しにラズパイに入れて動かしてみるとpingが通りました.
!!!
これは作るしかない!!ということで,作ったアドホックネットワークのデモアプリの忘備録です.
使用機材
Raspberry Pi 3
OS: 2018-03-13-raspbian-stretch
M1 MacBook Air
Intel MacBook Pro x2
olsrd
インストール
これ自体は簡単.
Raspbianでは
apt install olsrd
でインストールできる.
はじめの方でつまずいたので執筆時点ではうろ覚えなのだが,最近のRaspbianではうまくいかなかった気がする.
そのため少し前のRaspbianをわざわざ入れた気がする.
macでもhomebrewでインストールできた.
しかし,Intel MacBookではhomebrewでインストールしたolsrdはパスが通っていないのか実行できず...(command not foundなのでパスを通せばいけるはず?)
M1 Macbookではhomebrew経由でインストールでいけた.(なぜ?)
macでのパスの通し方がわからず,時間もなかったのでgitからパッケージを直接ダウンロードしてきた.
git-olsrd:https://github.com/OLSR/olsrd/wiki
ネットワークの設定
Raspberry Piの場合は//etc/network/interfacesに以下を書き込む.
auto wlan0
iface wlan0 inet static
address 192.168.12.1
netmask 255.255.255.0
wireless-channel 1
wireless-mode ad-hoc
wireless-essid pi
wireless-key 12345
保存したら再起動して有効化させる.
macの場合はwi-fiの設定からアドホックネットワークで使用するSSIDを選択する.
macでは自分が最初にアドホックモードで電波を出すことはできないみたい・・・?で,サーチできていないSSIDを入力しても接続できない.
なので,先にRaspberry Piを起動しておき,アドホックネットワークのSSIDの電波を出した状態でそこに接続しにいくとうまくいく.
IPアドレスとサブネットマスクを手動で設定する.
実行方法
olsrd -i eth0 -d 1
-i: olsrdを走らせるNICを選択.今回はwi-fiのアダプタを使用.Raspberry PiとMacでインターフェース名が違うのに注意.
-d: デバッグモードのON,OFF(1でON).ONにすると隣接端末などの情報がリアルタイムでターミナルに出る.
うまくいくと,同じSSIDの端末のIPアドレスが見えるはずだ.
アドホックデモアプリ
コードについて
Javaで作った.
古いRaspbianを使っているせいで,Javaも新しいものは入れられず.
ビルド時にjava1.8を選択.
Configファイル
sendduration: 送信時のパケット送信間隔.
buffersize: 送信時,受信時のペイロードサイズ.全端末で共通にすること.
nextaddr: 次の端末のipアドレス
実行方法
java -jar アプリ名.jar
外部仕様
画像のボタンを押すとnextaddrのipアドレスに向けて画像が送信される.
Relayモードでは画像を受信するまで待機し,受信し終わると受信画像を表示,nextaddrに送信する.
Destinationモードでは受信し,受信画像を表示する.転送はしない.
画像の表示は別アプリで行っている.
内部仕様
コードを読んでください.
あとがき
とりあえず,デモアプリ第一弾ということで,できることだけ実装した感じ.
staticな経路を設定しているので,経路を切断したときに自動的に繋ぎ直せるといいなぁ.
(olsrがルーチングをしてくれるが,端末間距離が近すぎて1hopで通信できてしまうので)
以前は忘備録はFC2ブログとかQiitaに書いていましたが,せっかく自前のページを作ったので,こちらに書いてみました.
見た目はQiitaのほうが見やすいし,どうしたものか...
とりあえず疲れたので帰ります.