2016年7月16日土曜日

ドロイドローン オープンソース公開


今年なってブログ更新してなかったですね。
いやーもう2016年も半分過ぎてしまいました。
さて、ドロイドローンはタミヤのバギーに乗せられるようになり、だいぶ安定したので、AndroidやGoogleMapAPIのプログラミングでで大変お世話のなった技術情報サイトQiitaを通じて公開をアピールしました。


公開にあたってはオープンソースソフトウェアの育て方を参考にしました。
しかし書かれてることのほとんどが実現できていません。

さて、次の課題ですが、倒立振子をスマフォの加速度計とAndroidで演算して制御したいです。
参考にするサイトは半日で作る倒立振子です。
上記 進化版は
もう一つの倒立振子(デジタル版) by ArduinoDeXXX


2016.05.05 撮影

2015年10月6日火曜日

LTE(携帯電話網)でローバーを遠隔操作してみた。(ドロイドローンVer0.2)WebRTC版

前回LTE携帯電話網でローバーを遠隔操縦してみたで課題だったリアルタイム操縦ができました。
HTML5で使えるXboxのGamePadも購入してつけてみて操縦しました。
AndroidStadioでクローンしてそのままビルドすれば動くはずです。



XboxのGamePADが、スティクから手を放してもばねが弱いためかセンターの0にきっちり戻らず、ローバーが旋回してしまうため、操縦がしにかかったです。まぁ慣れなんでしょうが。

いまFPVはこんなことになっています。 ゴイスー。
このくらい迫力のある動画ならなばインパクトあるんですが、ちんたらうごいていても面白くないですね。今度はそっちに注力せねば。

前回はWebサーバーとAndroid、Webブラウザのポーリング通信で、カメラ画像とローバー操縦に5秒のタイムラグがあったんですが今回WebRTC(Webリアルタイムチャット)でほぼタイムラグがなくなりました。

WebRTCのサーバーはSkyWayを利用させていただきました。
WebRTCの知識0でしたが、ドキュメントもわかりやすく1か月ほどで実装できました。
一部ドキュメント通りに行かないところもありましたが、何とかなりました。

はまったところは、

  • ローバー操縦コマンド、GPSデータなどのデータコネクションPeer
  • カメラ画像とオーディオのメディアストリームPeer

の2本立てで実装するサンプルがない。
両方のPeerのコールバック関数の順番の入れ弧をいろいろ関数の場所を動かしてトライアンドエラーで試しました。うまく行かないときはPeer2本立てってそもそも無理かとも思いましたが。

適当な順番でもうまくいくつながるときがあるんですが、接続の失敗が多しぎました。

結局、WebブラウザとAndroid側で確認ボタンを押して接続するようにし、接続タイミングをウェイトすることで何とか安定させました。

いやー、WebRTC(SkyWay)はすばらしいですね。

WebRTC自体はドロイドローン構想時に使用したいと考えていたんですが、WebRTCはAndroidのネイティブアプリで対応した物ありませんでいた。

CordovaとかのHTML5アプリでは、その時点でBluetooth対応とかいまいちでしたので、ローバー操縦のBluetoothを優先して、ストリーミングは後で考えようということで、AndroidのネイティブアプリでWebサーバー経由で作り出したのが約1年前でしょうか。Android開発もほぼ素人なので、カメラとかWebで散々苦労しました。

やっとWeb版が先月9月に完成したものの、タイムラグありすぎで次バージョンのGCMとかRTC等調べていたら、2015.7月にSkyWayのAndroid SDKが発表されているのに気が付きました。タイミングが良かったです。

それから、Web、カメラのコード全部捨てて、やり直しになりましたが、何とかできました。

課題
  1. カメラ、GPSデータの保存が出来ない。Webブラウザからクラウドストレージに保存予定。
  2. Androidのフロント、バックカメラ2台使いがしたい。
  3. WebRTC中にAndroidの高画質カメラ撮影が保存できないのか?
  4. 乗り物マイコンのArduino対応とラジコン用サーボの制御
  5. いまのところ私個人のSkywayのAPIキーを使っていますが、サービスとして広く提供する為にはどうすりゃいいのか。
5番ですが、Skywayの場合、APIキーが一つだと、複数人つなぐとPeerIDがどんどん増えてしまう。現在生成されたPeerIDを選択する方法ですが、どっかで個々の利用者との区別をしなければです。

1.でクラウドストレージ使うのに、GoogleのIDなんかでログインするとなれば、クラウドストレージを通じてPeerIDのやり取りすることになるかとおもいますが。

また、ものすごく利用されるとGoogleAPIのほうも有償で対応しなければで、アプリはオープンソースでやりたいけど、サーバー利用料を何とかせねばなります。

まぁ追々考えますか。

あと、実際屋外で操縦するのには、操縦側のFPV表示装置も下のような感じでスマフォでやるのがベストだよね。Web画面をスマフォ対応のHTML5にするか、こっちもネイティブにするか。
bluetoothでジョイスティックつないでんのかな。
HTML5のbluetoothも対応進んでるのかな。そうすればスマフォアプリもHTML5にした方がいいのかな。



2015年9月14日月曜日

LTE(携帯電話網)でローバーを遠隔操作してみた。(ドロイドローンVer0.1)

ドロイドドローンのコース設定画面 から約三ヶ月、やっとAndroidコードが何とかなって、ローバーもBluetoothで動くようになり、タミヤのキャタピラーマシンの実機で動かしてみました。
様子を昨日撮影して動画作成しました。

とまぁこんな感じです。
まだまだですね。

一番の問題は操縦がリアルタイムにできていないところ。

実は、スマフォ画面を録画しようとモビゼン入れたら、スマフォ画面がWebから遠隔で操縦できるので、カメラプレビューとBluetoth操作ボタンのあるドロイドローンアプリ画面をモビゼンで遠隔操縦するとリアルタイム操縦とカメラのストリーミングが出来てしまった。

しかし、モビゼンはドコモ携帯のみ対応なので、SIMフリー、格安データー通信SIMでは使えない。
後GPSのリアルタイム表示もないので、まぁこっちにアドバンテージあるかな。

いまWebRTCのチャットでリアルタイムにローバー操縦コマンド送れる様にSkyWayでのコーディングを勉強し始めました。
サンプルアプリとWeb画面はすんなり動いたので、期待しています。
つでに(というか本命ですが)WebRTCビデオチャットでスマフォのカメラ画面をストリーミングします。

リアルタイム操作できればもっと早く動くタミヤのバギーラジコンとか使えます。
サーボ動かすのでArduinoで制御します。
また、GPS精度が低いので、加速度で移動距離計算して、磁気方向で現在地を正確に割り出さないとです。
プロペラ回してエンコーダで風速と移動距離も割り出したいですね。

やって分かったけど、GPSだけでは使い物にならん。
GoogleMapからの移動場所指定をして、自動操縦する予定で実装しましたが
素のGPSデータだけでは、うまくいきそうにないです。
なのでこれは後回し。

今後やることをまとめると(面白そう順)
1.ローバーはタミヤのバギーラジコンにする。
タムテックギア GB-01シャーシキット (組立キット) ヨドバシカメラで7千くらい
2.サーボを動かせるようにマイコンをArduinoに変更。
3.リアルタイム操縦のためのHTML5のGamepad API 
4.WebRTCでリアルタイム操縦、動画ストリーミング表示。
5.スマフォ加速度による移動距離計算と位置情報補正
6.WebサーバをGoogle クラウド対応にして、レンタルサーバーがない人でも使えるようにする。
javascript と Androidで対応)
7.JavascriptをJqueryでかく。
8.ライセンスを決めて表明しておく。
でしょうか。

実際の優先順位は7,4,3、2,1,7 という具合ですが…。


2015年6月26日金曜日

JavaScript エディタ難民からの脱出か

ここんとこ、JavaScriptのエディタとしてbracketsを使っていたが、AdroidStadioのコード保管になれてしまい、JavaScriptでもIDEを使いたくなった。

document.getElementById("dataSet").addEventListener("click", function()…
とか,ナウなJavascript はつづりが長くてぜったいスペルミスする。

大体、学生のときから英語のスペルはぜんぜん覚えれなかったし、保管機能は大変重宝する。
AdroidStadioの元のIntelliJ IDEAもJavaScriptに対応してるみたいだけど、Ultimate Edition(有料)でないと出来ないとのこと。
おんなじ会社のWebStormもいいらしいんだけど、こちらも有料で日本語版はないみたい。

なので、無料のIDEをさがして、ためしにNetbeansに移行してみた。
ばっちり日本語化もされている。
サイトを見ると Getting Started with Creating a Cordova Application なんてあって、
HTML5でモバイルアプリケーションを作るCordovaにも対応しているみたい。
起動はかなり時間がかかるが、ピキピキ動くし問題ない。
昔使っていたEclipseのようなもっさり感はなかった。

これで行こう!

2000年ころからLinuxサーバ管理でViを使ったから、CGIのエディタはGvimを使っていて10年くらい。
HTMLを書くのには結構苦労した。その後2010年以降はSakuraをはじめいろいろエディタを設定しては試すが、長続きしないエディタ難民だった。
けど、やっぱIDEがいいな。
これからはNetbeansに落ちつくんじゃないかと思っているが、果たして。。。




netbeans のマスコット、ねこび〜ん

ドロイドドローンのコース設定画面

携帯電話通信網でリモートコントロールするローバーこと ドロイドドローンのWeb側でコース設定をする画面がとりあえず動くようになりました。

画面は http://www.cirlution.com/dev/droidrone.html で動かせます。
画面の配置とかは、まだぜんぜん手をつけていませんのであれなんですが。


ドロイドローンの撮影した写真はまだないのでストリートビューの写真サービスをつかって模擬的に表示させています。
GoogleMAPで高度を扱うAPIも入れて、いちお、空飛ぶドロイドローン用に高度設定もできるようになっています。

ちなみにGPSの高度は標高ではなく楕円体高の表示とのことで、Android端末のGPS高度と上記のGoogleMap標高と異なると思います。

このためドロイドローンの出発地点で両者を比較して、GPSの高度をGoogleMap標高に補正するようにし、地上高(地面から高さ何メートル)で指定出来る予定。

GPS/地図の高度データが信用ならない理由

まぁ、実際にはGPSもGoogleMap標高も誤差が大きそうだから、超音波センサーで地上との距離を測る方法になるでしょう。

ローバーから送られてくるGPSデーターの保存に HTML5のWeb Storage使おうかと思ったけど、どうもこれは同期処理らしい。そこんとこどうよ?てことで、やっぱXMLHttpRequest非同期処理CGIのファイルロックでで行っている。
最近ではXMLHttpRequestなんかはJQueryでやるんだろうけど、わからないのでつかってない。
その内覚えよう。

このWebサービスは、現在、会社のサイトを置いてあるレンタルサーバーで行っています。

いずれ、保守のしやすさから、GitHubのWebサービスで 公開したいが、GitHubでは当然CGIは動かない。
CGIが必要無いように将来的にはGoogleDriveをJavascriptで使っていきたい。

また、Androidのほうも写真だけでなく、Live動画やリヤルタイム操縦もしたい。
リアルタイム操縦はGCM (Google Cloud Messaging ServiceはAndroidでPUSH通知を行うためのGoogleのサービス) をつかいたい。
しかしペアリングでサーバーが必要みたい。

ということでやっとAndroidのコーディングに戻れる。

2015年6月5日金曜日

エンジン2重反転プロペラのドローンで飛行時間を長くしたいけど

前回のドローンの話しで、農業用マルチコプター Zion AC 940 の飛行時間は10分くらい。
LiPoバッテリーでブラシレスモーターをブンブンまわせば、どうしたってそのくらいでしょう。

じゃ、エンジン駆動のドローンにしたら長時間飛べるのはないのか?

テレビニュースで見たんだけど

で、一般的なドローンが電動なのに対し、試験飛行では、ガソリンエンジンを搭載してより長時間・長距離の飛行を可能にしたヘリコプター型の試作機が登場。
とのこと、これのほかにエンジンのドローンは見当たらない。

詳しく調べようとインダストリーネットワーク(株)の本家サイト見ましたが、しばらく更新が止まっていて何も書いてない。


エンジンドローンは オープン・X という名前らしい。

エンジン、ドローンでググると,ラジコン用O.S.エンジンで有名な小川精機製もドローンを出していました。
エンジン駆動を期待しましたが、モーターのようです。残念。

基本的にドローンの制御は加速度センサーと、モーターPWMでのPID制御ですが、
中型以上のドローンは強力なブラシレスモーターを使っています。
ブラシレスモーターはPWMをラジコン用ESC(Electric Speed Controller)で制御してます。

さて、このモーターをエンジンに変えるといっても、エンジン出力を微妙に変えPID制御するのは大変そうです。
で、池上さんのアイデアは浮遊力はエンジンで、姿勢制御はモーターというハイブリットなドローンはどうかということ。
姿勢制御のモーターもブラシ付きモーター程度でできるのなら回路も簡単で安価です。

しかし、エンジンの欠点は振動で、空撮とかには向かない。

で、ロータリーエンジンは振動がすくないとのことだ。
治具メーカーが模型ヘリ用に独自開発したとのこと。

先ほどのラジコン用O.S.エンジン 小川精機製 はロータリーエンジンは販売中止になってた。
多気筒星型、水平対向エンジンなど振動が少なそうなエンジンはある。

ただ、ドローンもそうですが、プロペラの回転による反トルクを消す為に、対称に半回転プロペラを配置するのがいいようです。

なので、エンジンの浮遊力(推力が本当?)は二重反転式ロータータンデムローターになるでしょう。



2重反転のエンジンを調べていたらヤフオクに面白い物があった。


第二次大戦でアメリカ軍が使用していた遠隔操縦機の2サイクルの2重反転式のエンジン 


逆回転用のエンジンを2つ水平対向に配置したものだろう。
逆回転用クランクシャフトの配置でピストンはわずかに前後しているようにみえる。
これ見たら、ルパンの最終回に出てくるロボット「ラムダ」に似てると思いました。


このアイデアでいくと、単気筒エンジン2つのピストンを対向にして逆回転させるということになるが、こうなると、大きくなるがタンデムローターがいいのだろうか。しかし、逆回転のエンジンはないようで、2ストなら無理に逆回転できるようだが、どちらにしてもスターターで2つエンジンかけるのは大変だ。

ただ、ラジコンのエンジンの1万以下の安いやつは、白金カイロのようなグロー式点火なので、点火タイミングを同期させるのは出来なそうだ。
点火にキャパシター・ディスチャージド・イグニッション(CDI)つかったプラグのエンジンもあるようですが、高価でした。
というわけでこのアイデアは小さいドローン用のグローエンジンではボツ。

振動を消す為にピストンの反対方向の慣性がでる偏芯重りをつけるとか
点火しないピストンを逆方向に動くようにくっつけて空回りさせる、とか
空回りピストンで、ついでにコンプレッサにして、圧縮空気をペットボトルにためて、噴射して機体制御に使う。
とか考えつきました。圧縮空気の制御の方が大変か。
圧縮空気でコンプレッサピストンまわしてスターターにするのはいいかも。
圧が低いときは空気ためて、圧が高くなるとピストンまわすようにする制御もいいかも知れない。

あと振動を制御する方法として
加速度センサーから振動周期を読み取って、反位相の振動を振動モーターで作り、振動を相殺する。です。 
アンドロイドのカメラなら加速度センサーとカメラが一体で、振動モーターも付いてる。
振動モーターのPWMはスイッチのON命令細かくすれば可能か?
とも思いましたが、機種によって振動モーターの種類もちがうからダメですね。
相殺振動モーターは外付けですね。
振動の大きさが変わること考えるとステッピングモーターがいいのかな?
X-Y-Z方向の振動あるとすると3つつける?って複雑ですね。

このように、安いエンジンで振動を消す方法を考えていますが、
まぁ、昔ながらのラジコンのプロの方はいろいろしているみたいです。
私のようなど素人がなんとも出来ないものかもしれません。

モーターの2重反転プロペラは、おもちゃのラジコンヘリから、いろいろあるんですが。
が面白そうでした。

プロペラのシュミレーションなんかは プロペラ・風車の設計解析ソフトXROTORの使い方であたんですが、2重反転は出来ないとのこと。
Flowsquareはプロペラ解析できるのかな?

導出した数学モデルをコンピュータ上でシミュレーションできる環境を数値解析ソフトウェアである
MATLAB を用いて構築した。
とのことですが、数学モデルはさっぱりわかりませんでした。

いろいろ調べていて
は参考になりました。

まぁいずれにせよ、だいぶ先の話になりそうです。


2015年6月4日木曜日

ドローン のオープンソースについて

前の会社、SCF で、設計、購買システムでお世話になった先輩が退職し、2015年4月1日に株式会社IKGMを、起業しました。

その池上さんから「ちょっと寄ってきなよ」と電話をもらったので、西春近の事務所によって見ました。

昔から農業の自動化関連に研究している方で、エンルート社の農薬散布に特化した、農業用マルチコプター Zion AC 940 を購入する予定とのこと。
(Zionってジオン軍意識しての命名かな?)


昨今、ドローンの墜落、事故などがフューチャー?されていますが、農業用であれば農地の上をドローンが飛んで何かあっても作業者がいなければ安全ですし、農地は基本、私有地なのでまぁ自由に飛ばせるわけで、むしろ規制がかかれば、ドローンを飛ばしたい人は農業用に使えば?
ということになるかもしれません。色々応用もできそうです。

そんなわけで、TPPや高齢化で農業の無人化、省力化の将来性はいろいろあり、そこんところに目をつけているとのことで、なるほど~と感じました。

話をしていると、これらのドローン制御のハード、ソフトはオープンソースだよ。と教えてくれました。

ちっこいドローン Bitcraze社製 Crazyflieナノクアッドコプター10DOFは 
前からオープンソースとは知っていましたが、大学研究レベルなのでオープンかと思ってた。

高級なドローンは、どうせ買えないと、詳しく調べてなかったですが、
大体のドローンがオープンソースのようで、恥ずかしながら知りませんでした。

これは興味津々。
オープンソースのドローン制御を調べてみました。

合衆国のドローンメーカーとしては最大の3D Robotics社。
2014/10/13 に
Dronecode:Linux財団と3D RoboticsがオープンソースのUAVソフトウェアプラットフォームを開発

とのことでオープンソース化したようです。
オープンソースの本家は https://www.dronecode.org/

ハードウェアーのほうは
3D ROBOTICS AUTOPILOT SYSTEM FLIGHT CONTROLLER
にあるように、制御装置のFLIGHT CONTROLLER(FCというらしい)は
APM 2.6 と Pixhawk というのがあるみたい。

APM は Arduinoベースにオープンソースで開発したマルチコプター制御とのことらしい。
アルデユパイロット オートパイロット・スイート が本家

日本語情報では
Arduino(アルドゥイーノ)基板と ArduCopter(アルドコプター) 
Arduinoを頭脳にした、多回転翼型の飛行体の製作記録
なんかが詳しそうです。
Japan Drones 株式会社もコントローラーのAPM 2.6を販売 しています。

ArduCopter は、世界各国から集まった DIYDrones (http://diydrones.com/)のボランティアプログラマーが作り上げた ソフトウェアーです。 
APM で使用しているハードウェアーと、ソフトウエアは、全てオープンソースです。
 オープンソースとは、ハード、ソフト共に、全ての情報を無償提供で公開し、どなたでもご利用いただけ将来の開発や 発展に役立てる事が目的です。

とのこと
Japan ArduCopter Group
 http://diydrones.com/group/japan-arducopter-group
のあたりで情報が手にはいりそうです。

Pixhawk は 32 bit STM32F427 Cortex M4 core ということらしい。
Cortex M0 core なら良かったが、M4なのはLinux入れるからかな。
https://pixhawk.org/ が本家かと、
オープンソースハードウェアと謳っていますが、英語ばかり。

3D Robotics社以外では、

よく聞く ARDrone2.0
本格的なプログラミングができるラジコンヘリ・・・ ARDrone2.0 より
ARDroneは制御のためのAPI仕様書が自由にダウンロードできる。とのこと。
Wifi制御なので、IPネットワークのはしるOSが必要となるが、
ARDroneの中ではBusyBoxという軽量版のLinuxが動作していて、無線LANを使えばログインができる。
とのこと。
ドロイドローンにはWifiはいりませんが、離陸と着地の近距離はプロポ操縦者いたほうがいいのかな。

MultiWii という FC
マルチコプター : MultiWii ってなんだ より
MultiWii は、任天堂社の Wii のコントローラーに内蔵されているセンサーと Arduino を接続した物が最初。とのこと。
この発想、一番俺向きっぽいな。
http://picworld.e-monster.jp/category/multiwii/ が一覧。
超音波センサーで高度を測るというのはいいアイデアですね。
MultiWii SE V2.5 CRIUS 設定方法 てのもあった。


で、オープンソースのドローン儲かるのか?とビジネスモデルを考えると、

・オープンソースだからといってみんなが自作するわけでもない。
・自作したほうが高くつく。
・基板設計や安定した回路は売っている基板の方が実績がある。
・協力者が増える、開発や実験はユーザーでいろいろやって検証できる。
・使用は自己責任と謳って販売できる。
・楽しい。

ほかがオープンが多いから、そうでないと敬遠されますね。
なんかの基板作って売れたらいいな-とおもいました。

空飛ぶほうは、いろいろアイデアあって、次回でドローンのエンジン、モーターハイブリットを考えてみました。