ラベル arduino の投稿を表示しています。 すべての投稿を表示
ラベル arduino の投稿を表示しています。 すべての投稿を表示

2014年4月25日

MultiWiiでヘリコプター(1)

MultiWiiはチープなフライトコントローラの中で小さくない勢力を占めていますし、なによりHobbyKingに支持されておりハード入手が容易です。


ただ、ヘリコプターを飛ばすとなると情報が少なく敷居はけっして低くありません。

2012年にPatricさんがコードをモディファイして初めてヘリを浮かせて以降、公式ページへの記載はほとんど変化が無い、というほどマイナー扱いです。


が公式docからもリンクされていますが、ボードタイプも汎用の古いものですし、今となってはあまり参考にできる部分がありません。(ヘリコプターフォーラムはそれなりに活発なので読むだけでもためになります)



まず、MultiWiiのつらいところは、サーボとモーターの番号が謎のマジックナンバーで管理されてるところです。各コプタータイプごとにどの番号がどんな役割かがハードコードで決められており、ヘリコプターは
  • HELI: 4,6,7 - swashplate servos, 5-rear servo or rear motor (MOTOR2 output can be used too for rear motor)
だそうです。サーボ1,2,3はマルチコプターでジンバル用に使われる習慣があるので遠慮したようです。

rear motorという記載があるように、一応YAWMOTORというオプションがあり、テールモーターのヘリに対応した形跡が見られます。しかしこのオプションはnanoWii等の小型コントローラでは機能しないように見える上に、どんなハードウェアでサポートされているか情報がありません。

では、サーボ4,5,6,7を使うことはわかった。そのサーボ1~8とやらはどのピンに割り当てられているのか? というとこれもまたボードによってばらばらでろくにルールがありません。しかも同じボードでもハードウェアPWMのオプションの選び方しだいで変化するという有様です。

ハードウェアPWMは本当にCPUのレベルでピン番号に制限が付いちゃうので仕方ないんですが、それならちゃんと各ボードごとにプロジェクトを管理しないと、一部のボードでしか使えない機能がいろいろできてしまって共通ソースにしている価値が薄くなってきています。

(実際にforkしてしまったプロジェクトもたくさんあります。まあ最初からそれを許容してるので文句を言われる筋合いは無いんですけどね。)


ピン番号に関して公式docでは
For promini:
  • Motors : 9,10,11,3,6,5,A2,12
  • Servos : A0,A1,A2,12,11,3,10,9
For Mega:
  • Motors: 3,5,6,2,7,8,9,10
  • Servos SW_PWM : 34+44 , 35+45 , 33+46 , 37,6,2,5,3
  • Servos HW_PWM : 44,45,46,11,12,6,7,8
For promicro m32u4:
  • ...
と書かれていて、nanoWii基板に乗っているm32u4の情報はありません! (9,10,11がスワッシュサーボで5,6がメインモーター、テールサーボのようです)

なお、もう一つ紹介したMINI MWC with DSM2ボードのほうはATMega328Pなのでpromini系だと思うんですが、サーボ4,5,6,7はピン12,11,3,10と上記に書かれており、MINI MWC基板では12番ピンがサーボヘッダに出ていないのでそのままではヘリに使えません。

まあ、そんなげっそり状態から始めるわけですが、少なくともnanoWiiの方はソースコードを見る限りこれでヘリを飛ばしてる人がコントリビュータの中に実際にいるようなのでまだマシです。今後はまずnanoWiiを動かしていこうと思います。




なお、RC入力や各センサーの現在状態を見たりPID設定を変更したりするには何かしらGUIが必要ですが、最初はやっぱりパソコンが便利だと思います。

オフィシャルにmultiwii2.3のソースコードを拾ってくると同梱されているMultiWiiConfでもいいですし、



windowsの.NETで作られたWinGUIでもいいと思います。


ただMultiWiiConfはJavaでできていて、JavaのVMバージョンによってはウィンドウが出るにもかかわらずちゃんと情報が更新されなかったり一部画面が崩れたりしますので、一発でうまく動かなかったら問題きりわけのためにWinGUIを試すことをお勧めします。

2013年5月10日

XP-7AにBLHeliファーム書き込み ( arduino製プログラマ利用 ) SuperCPで使えました

ヘリモンさんで買ったもう一つのESC、XP7Aの方をまだ使っていませんでした。
こいつは純正ファームではサーボ信号食べるモードなので、マイクロヘリに直結するには間違いなくBLHeliの導入が必要です。

さて、書き込みアダプタの選定ですが、純正USBアダプタは$20くらいします。互換品もいくつかあるのですが、送料もあるし国内だと http://mfc200804.ocnk.net/product/367 なんかがリーズナブルなところだと思います。

BLHeliの場合、PC接続はアップデート以外にも設定ツールをつないでぽちぽち細かい設定をするときに使えるので、(ヘリモンのdouble ESCみたいに)最初からBLHeli書き込み済みのESCを持ってる人でもプログラマは持っていて損はないと思います。



で、もうひとつの選択肢としてarduino(というかATMEGA)に書き込んで使えるowSilProgというソフトでもBLHeliの書き込み、設定が可能です。

このarduino製プログラマは、液晶シールドを手に入れれば BLHeliBoxという携帯セットアップツールの機能を追加したバージョンもあります。 (作成例。かっこいいです。 http://nob-heli.blogspot.jp/2012/10/blheliboxblheli.html )

なので、後のことも考えて、あえてarduinoを手に入れて、そこにSilProgを書き込んで書き込み機にするという回り道を選択しました。



arduinoは USBシリアル変換+ピン配の標準化されたボード+ATMEGA+ブートローダ、があれば成立しますが、買えばとても安く配布してくださってる方がいます。海外通販なら完成品もこのくらい安いです。

私の場合は、最初の1個の書き込みに使えるFT232やFT245は元から持っているので、秋月基板150円に、ATMEGA328Pを挿してFT232のビットバングモードで書き込みする方法を取りました。
http://www.geocities.jp/arduino_diecimila/bootloader/ で紹介されてるとおりに実行して、ばっちり成功しました。(電源はUSBから取るので外部電源供給は省略しました。あとセラロックに繋ぐ22pFも無かったので省略…。無くてもたいていは動きます。)



んで、しばらくLEDブリンクスケッチとかでarduino遊びをした後、いよいよowSilProgを書き込みます。

いったいどこから書き込むのかと思いましたが、 OlliWさんの解説ページに、必要なファイル一式詰め合わせzipが置いてあります。

これを拾ってきて解凍すると、AvrBurnTool_v101.exeてのが入っていますが、これがarduinoにowSilProgのHEXファイルを書き込むツールです。BLHeliBox版を作るときもこれで書き込みます。(owSilProgやBLeliBoxを書き込んでもarduinoのブートローダは残ってますので、いつでもこの方法やarduinoのIDEで好きなプログラムを再書き込みできます)



んで、owSilProgの書き込みが成功したら、いよいよXP-7Aを繋ぎます。
接続ポイントはBLHeliの対応ESC紹介ドキュメント (BLHeli supported SiLabs ESCs.pdf) に詳しくかかれてますのでそっちを参照してください。

基本的にどのESCも、黒のGND、赤のクロック、白のデータを繋ぐだけです。
てことは実際認識させるときはESCにリポを繋いで電源供給してやる必要があります。黒のGNDは無理して細かい箇所にハンダ付けしなくても、電池のGNDと共通だと思います。

クロックとデータは、秋月arduinoでしたらICSP端子に繋ぎます。

ピン見えないですね… 本家にUNOの場合の写真 http://www.olliw.eu/uploads/owsilprog-arduino-uno-scheme-02-wp.jpg があるのでこれと同じです。



あとはリポを繋いで電源を供給して、パソコン側でBLHeliTool_v120.exeを起動します。今回のXP-7AはそもそもBLHeliが入ってないので、3番目のタブ「Flash BLHeli to BESC」に行って、それっぽものを選んでPortでarduinoのUSBシリアルのCOMポートを指定してFlashします。


で、それっぽく成功メッセージが出たら、Setupタブに戻ってreadを押すと、現在のBLHeli設定が表示されます。

めでたしめでたし。


ここで試しにSuperCPに繋いでみると、今まで使ってたdouble ESCと同じパターンで、

  • 電源ONでピポパ
  • スロットルちょいONでピー(低)
  • スロットル0に戻すとポー(高)

と反応して、ちゃんとローターも回りました。

ただ上の設定を見てわかるようにデフォルトはガバナーモードで動いてるので、このままだとだいぶ今までとは使い方が違います。飛ばすのはちゃんと設定を理解してからにします。



というわけで確認できたことは:

  • FT232RLを持っていれば、秋月arduinoだけでBLHeliの書き込みが可能です。
  • XP7A(ESC)にBLHeliを導入すれば、問題なくSuperCPでHT03Sを回すことが可能です。(ただしSuperCPからの信号取り出しにCRノイズフィルタは必要です)