teruノート

ROSでロボットとか。Ubuntuで困ったこととか。

bluetooth PAN NAP構築(Ubuntu 16.04)

ロボコンの競技規則で無線通信はBluetoothのみという事態がルール補足情報により発覚し、WiFiでROSトピック飛ばそうと思っていた構想が砕け散りました。

bluetoothの仮想シリアルポートでrosserialノードを使用する手が真っ先に浮かびましたが、bluetoothでネットワークを作れないかと試行錯誤してみました。ドライバ壊してOS何度もインスコし直しました。

サーバ側、クライアント側でいろいろと準備が必要です。

試した環境は、サーバ側はUbuntu 16.04のPC、クライアント側はlubuntu 16.04のRaspberry Pi 3です。


Ubuntu 16.04でbluetoothのPAN(Personal area network)を使うには、bluemanの最新版をソースからビルドする必要があります。
(パッケージ化されている2.0.4でもサポートされているみたいですが、IPアドレスの取得ができず接続失敗となります…)

ここからソースをダウンロードして適当な場所に解凍 or cloneします。
github.com


こんな流れ↓でビルドするんですが、autogenやconfigureであれが足りないこれが足りないと言われるので逐次インストールします。
ソースに入っているDependencies.mdに依存関係が載ってるので一通りインストールしたほうが近道ですね。

./autogen.sh
./configure
make
sudo make install

たとえばD-BUSがないと言われたらこれをインストールします。

sudo apt-get install libdbus-1-dev

Bluezがないと言われたら、libbluetooth-devをインストールします。bluezをインストールしただけではだめだったので、これがなかなか解決に時間かかりました。

sudo apt-get install libbluetooth-dev

ほかにもlibudev-devなどが必要だったと思います。

また、isc-dhcp-serverとudhcpdもインストールしておきます。


bluemanのインストールが終わったら、dashからbluetoothマネージャを起動します。

メニューのローカルサービスを開き、NAPを有効にします。DHCPサーバはudhcpdを選択します。
f:id:ub2_memo:20170301111133p:plain

あとは、ペアリングをすればネットワークアクセスポイントとして接続できるようになります。


接続が確立したらifconfigで確認します。

サーバ側はpan1というブリッジにIPが振られ、クライアント側はbnep0デバイスにIPが振られているのでそれを確認し、pingでも飛ばしてみましょう。


なぜかssh接続しようと思ったらうまくいかなかった。LAN経由でもできなくなってた。

bluetoothドライバ壊してUbuntu入れなおしたりしたんですが、なぜかsshインストールしたらssh使えるようになりました。
今まで特に何もせず使えてたはずでしたが…。


ともかく、bluetoothでネットワークを構築し、ROSのトピックも飛んだのでなによりです!