読者です 読者をやめる 読者になる 読者になる

BeagleBoneBlackで通信距離(ほぼ)無限のLTEラジコンB3Rを作った

電子工作 ARM Linux

f:id:Strobo:20140814124452j:plain
AR.Drone等のカメラ映像を見ながら操作できるラジコン製品が増えています。このラジコンは通信にWiFiを使うことで機体の操作だけでなく同時に映像の送信も可能になっています。しかしWiFiで通信している以上、通信可能範囲は操作端末の周囲数百メートルが限界です。そこでWiFiではなくLTEを使用したラジコンであるBeagleBoneBlackRover略してB3Rを開発しました。LTEで通信しているのでLTEの電波が入る範囲ならば操作端末の位置に関わらずラジコンの遠隔操作が可能です。例えば日本にあるLTE圏内のラジコンをインターネットを通して海外から遠隔操作することも可能になります。

オンボードカメラの映像


B3Rの構成

B3Rの構成は以下の図の様になっています。
f:id:Strobo:20140814030043p:plain
以下各要素について解説していきます。

ラジコン

f:id:Strobo:20131106203053j:plain:w320:right
Hobbykingから半完成のラジコンTurnigy Trooper SCT 4x4 1/10 Brushless Short Course Truckを購入しました。半完成モデルなので通信機とコントローラとバッテリーが付属しておらずそのままでは動作しません。しかし今回はその通信機を自分で開発するので問題ありません。

ESC

ESCは購入したラジコンに付属していたのでそのまま使用します。BBBからPWM信号をESCに入力するとモーターの速度が制御できます。このESCには電源スイッチが繋がっておりこのスイッチでESCの電源を操作できる。今回はBBBからESCの電源を操作したいので、スイッチを取り外しFETを繋いでBBBからESCの電源を操作できるようにした。これでBBBの電源が切れると同時にFETがOFFになりESCの電源も切れるので多少安全になる。ただしBBBがFETに繋がっているポートをHighにしたままフリーズした場合はFETはOFFにならないのでESCも停止しない。この方法はもう少し改良が必要かもしれない。
このESCには通信機やサーボモーター用に6Vの電源も用意されています。この6V出力はステアリング用サーボーモーターの電源とした。

PDU

PDUはDC-DCコンバータ、電流、電圧検出回路で構成されています。DC-DCコンバータはOKL-T/6-W12N-CでBBB, USBハブ, webカメラ, LTE-USBモデムに電力を供給します。
電流、電圧検出回路はバッテリー電圧と電流を計測する回路。BBBのADCは最大1.8Vなのでバッテリーの電圧を分圧してBBBで計測できるようにしている。電流検出は0.01Ωのシャント抵抗とLT6106CS5を使用してESCの定格である30Aまでの電流を計測する回路とした。

f:id:Strobo:20140814125710j:plain:w640

Battery

B3Rのバッテリーは7.3V2200mAhを2個並列に接続している。これは動作時間を長くする為。もう一つはバッテリーが一つの場合、モーターが回転し始める瞬間にBBBが再起動してしまう問題を回避するためです。
BBBが再起動する問題はモーターが回転を始める瞬間は電源電圧が一瞬低下することが原因。電源電圧がDC-DCコンバータの最低動作電圧の6Vを下回ってしまうとその先に繋がっているBeagleBoneBlackが停止してしまう。BeagleBoneBlackの停止するとESCも停止する。ESCが止まるとモーターも止まり。その後電源電圧が回復しBBBが起動する。この様な流れでモータが回転を始める瞬間BBBが再起動してしまうように見えていた。今のところバッテリーを並列に繋いでいる事で回避出来ているが、保護回路無しのリチウム電池の並列接続はあまりいいやり方ではない。本当なら電源を別にするべきかなと。

BBB

B3R全体の制御を行う部分でBeagleBoneBlack Rev.A5Cを使用しています。ディストリビューションは細かいカスタマイズが可能なGentooを使用しています。Gentooを使用すれば不必要なプロセスを止めやすくBBBの消費電力を減らすことができます。全体の制御プログラムはGoで、UDP通信やストリーミングを行う部分はCで開発しました。
BeagleBoneBlackのセットアップ等は以下のサイトを参考にしました。
カーネル/VM式 ARMマイコン入門(関東版)
Gentoo Linux Documentation -- Gentoo on the BeagleBone Black
Raspberry PiでL-03Dを使ってみる

USB HUB

BBBのUSBポートは1つしかない為2つ以上のUSB機器を使用したい場合はUSBハブを使用する必要があります。そしてBBBのUSBポートの電流供給能力は800mAありますがUSBハブ, webカメラ, LTE-USBルータを同時に使用すると800mA を超えてしまい、BBBのUSB機能が停止してしまいます。そこでUSBハブを改造してDC-DCコンバータから5V電源を直接供給できるようにしました。これによりBBBのUSBポートに3つの機器を同時に接続しても問題なく動作するようになりました。

USB-LTE Router

USB-LTE RouterにL-03Dを使用しiijmioのsimを差してインターネットに接続しています。前回の記事UDP hole punchingの実装をしてみる - ELECTLOGICで書いたようにiijmioの回線ではグローバルIPアドレスが割り振られません。これでもTCPなら双方向で通信できますが、UDPの場合はそれができません。そこでUDPホールパンチングを使用してプライベートIP環境での双方向UDP通信を実現しました。これにより低遅延での操作が可能です。

WebCamera

WebCameraはLOGICOOL ウェブカム HD画質 120万画素 C270を使用。映像をYUV422形式でBBBに取り込み。YUV422からYUV420へ変換した後VP8でエンコード。その後UDPで操作端末へ送信しています。

Servo Motor & Motor

これらは購入したラジコンに付属していた物をそのまま使用した。問題があるとすれば、モーターが回転する時の音がうるさいこと。

ケース

f:id:Strobo:20140814124533j:plain:w320

ケースはアルミ板とアクリル板を組み合わせて設計しました。防水設計にはなっていないので雨天時は動かせません。アクリルに透明なシール エーワン ラベルシール 光沢フィルム・透明 ノーカット 10シート 28791にロゴを印刷して貼付けています。さらに野外で動かす物なのでUVカットの透明フィルム エーワン UVカット透明カバーフィルム 6シート 35041をロゴの印刷されたフィルムの上に重ねて貼付けています。

f:id:Strobo:20140814125915j:plain:w640
アクリルカバーを外したところ。右上のPDUから出ている白い配線は電源スイッチへ繋がっている


まだいくつかの改良や追加したい機能などがありますが、映像のストリーミングと最低限の操作が出来る様になったのでひとまず公開してみました。次はGPSと測域センサを載せて自動操縦をさせたい。