About this site
このサイトは、航空・宇宙コンピュータ電子工作といった時代の最先端のことから、登山といった文明生活から遥かにかけ離れたことまで、思うがままに書いてあります。写真も大好きです。
興味がある方にしかおもしろくないと思いますが、どうぞ楽しんでいってください。あと、MovableTypeのカスタマイズ情報を提供しています。

If you are interested in "Super Sylphide", an autopilot system for small UAVs, please visit this page.

Super Sylphide猫カメラGPSロガーXBee電力計


最後に、はてなアンテナやRSSリーダーで読む場合はこちらからどうぞ。
Entries @ recently

January 24, 2012

白馬五竜 水上 スキー

先日、2回ほどスキーに行ってきました。白馬五竜と水上です。天気はほどほどでした。

2012_hakuba_goryu.jpg
白馬五竜より

2012_minakami.jpg
水上より

どちら方面を撮ったのか、鋭意検証中です(笑)。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/832

January 15, 2012

Super Sylphide 進捗状況(48) -- Tiny Feather に XBee 繋がる

オートパイロットシステムTiny Featherですが、以前に作成した2.4GHz無線何でも繋がる基板を利用してXBeeをつなげてみました。デバック風景を掲載してみます。

TF_XBee.jpg
近いとアンテナなしでも繋がる

Tiny FeatherにつなげたXBeeからデータを送信し、FT232RL経由でPCに繋げた別のXBee基板で受信させています。

XBeeということで、簡便な方法であるシリアルを無線に置き換える用途の透過(Transparent)モードを使ってテストを行っています。うまくいっている、といいたいところなのですが、既知の問題として、バイナリデータを送ろうとすると、 たまに意図せずコマンドモードに入ってしまうことがあります。以前、ワイヤレス電力計を作った際は、バイナリデータを7bit変換することでこの問題を回避していたのですが、今回はまじめに対処したいと思います。いまのところAPIモードを使うのが有力です。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/831

January 08, 2012

Super Sylphide 進捗状況(47) -- Tiny Feather ADS 完成

オートパイロットシステムTiny Featherですが、以前空気に対するデータをとるためのAir Data Sensor(ADS)がひとまず完成したことを、記事にしました。その後、ADS単体には出番がやってこなかったこともあり、完成に向けたデバックを積極的に行っていませでした。しかしこの度、よやうく出番があることになり、年末年始で気合をいれて完成へと漕ぎつけました。

ADS_with_TF.jpg
動作中の様子。

ADSからTiny Feather本体を経由して、USB経由でPCにデータを取り込んでテストしてみました。ADSでA/D変換された絶対圧、および差圧3チャンネルの生データを以下のグラフに示します。なおADS上のADCは24bitの解像度があり、それを16bitに切り詰めてTiny Featherにはデータを送っています。

ADS_raw_conv.png

何も入力のない、静止時のデータです。これでセンサ、およびA/D変換を組み合わせたノイズを見ることができますが、あるレベルに収まっているのでほっとしています。回路の組み方や、変換および通信などを担当しているプログラムには問題なさそうです。ADS側のプログラム類はこのあたりにおいておきます。

ADSはTiny Feather本体とはSPIで接続しています。以前、SPIをマルチプレクスするのをCPLD上で行っているという記事をかきましたが、ADS用にさらに拡張しました。現在は外部スレーブデバイスをHDLのマクロで増やせるようにしてあります。参考としてspi2internal.vhdをあげておきます。

校正作業をしなければいけませんが、機材が手元にないので"くまさん"にお願いすることにしました。

※次の進捗としてXBeeと繋げてみました

23:51 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/830

January 01, 2012

2012 謹賀新年

[Timely]

あけましておめでとうございます。昨年は大変お世話になりました、本年もよろしくお願いいたします。

2012.png

最近更新頻度が落ちてきているような気がしますが、気のせいです(笑)。ということで、今年も平均して1週間に1度の更新ペースを続けることを目標にしたいと思います。連載している内容もあることですし、それをまとめて別の媒体でお届けするということも第2の目標にしたいと思います!

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/829

December 24, 2011

Super Sylphide 進捗状況(46) -- TinyFeatherの誘導制御スケルトン

無人航空機(UAV)用オートパイロットシステム TinyFeatherですが、ようやく足回りが終わり、楽しい匂いがするところにやってきました。誘導制御です。ちなみに僕は天邪鬼で、足回りである航法の方が面白かったりします。

誘導制御則を実装するにあたって、その骨組み、スケルトンを作ってみました。

TF_GC.png

図を説明すると、1つのループが一定時間間隔で繰り返されることで誘導制御を構成しています。中央の円がそのループで、順を追って説明すると

  1. 航法情報(どこをどういう状態で飛んでいるのか)の取得
  2. 入手した航法情報を元に誘導制御(どこをどうやって飛びたいか)の計算をする
  3. その計算結果を元に舵面やモータを、サーボ、スピードコントローラで動かす
  4. 計算結果のログを残す
  5. 地上局(Ground Station, GS)にテレメトリ(どこを飛んでいるかなど監視用情報)を送信

となっています。加えて、地上局からWay Point (WP)の変更など飛び方の指令が非同期的に送られてくる可能性があるので、それを処理できるよう、図の下に示すアップリンク通知ブロックがあります。

コードはguidance_control_skeleton.cppにあります。航法情報として得られるものはヘッダ guidance_control.h に書いてあります。TinyFeatherとこのコードを使って、皆さん独自の制御則を作ってみることが可能なようにしていきたいです。

※Tiny Feather用ADSがようやく完成しました。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/828

December 14, 2011

ソフトウェアSPIが動かない (解決済)

マイコンを使っていると、時々マイコンに組み込まれた周辺機能だけでは事が足りなくなって、汎用I/Oポートを使って、ソフトウェア的に機能を実現するということがよくあります。ポートのH/Lをコントロールしたり、はたまた汎用ポートをHi-Z(ハイインピーダンス)の状態にしてH/Lを読み込んだりすることで実現されます。よくやられるのが、ソフトウェアSPIやIソフトウェアUARTといったものです。最近、そのソフトウェアSPIを実装していて嵌りましたので、今回は僕の失敗談を披露したいと思います。

ソフトウェアSPIに限らず、ポートの状態の書き出しとポートの状態の読み込みを行うものでは起こりうる問題なので、せっかくなので一般化して話を進めたいと思います。汎用ポートは、多くの場合、複数のポートをひとまとめとして、1つのレジスタで扱われます。ここではP1というレジスタに8個の汎用I/O、すなわちP1.0からP1.7の8個が割り当てられていたとしましょう。その中でP1.0を状態の書き込みに、P.1.1を状態の読み込みに使うことにします。

gpio.png

たとえば、P1.0(出力)にP.1.1(入力)と同じ信号レベルを出したければ、次のようなコードを書いて実現することが多いかもしれません。

if(P1 & 0x02){P1 |= 0x01;}else{P1 &= ~0x01;}

ところが、このコード、特定のマイコンでは、一度P1.1がLになると、たとえ他のマイコン等から再びP1.1にHが出力されようとも以降はLが読み出され、二度とP1.0がHにならなくなりました。僕はC8051というSilicon Laboratoriesのマイコンで今回この失敗を経験しました。

原因はP1というレジスタの構成にありました。レジスタに複数の機能が割り当てられているのでした。ポートが出力として設定されている場合は、1や0を書き込むことでHやLが出力されます。また入力の場合は読み出すことで、ポートのHやLを1や0で返してくれます。

ところが入力の場合に書き込むとどうなるでしょう。C8051では、1を書き込むことによってHi-Zの状態、0を書き込むことによってGNDとショート(厳密にいうと、オープンドレインのFETがONになって、電流を引き込む)になるのです。そのため、P1.1に一度0が書き込まれてしまうと、他のマイコン等ががんばってHを出力しても、電流がどんどん吸い込まれLとなってしまうのでした。

『えっ、入力ポートに書き込んでないんじゃないの?』と思われた方(主に僕)、コードをよくご覧ください。演算子として、|= や &= が使われていますね。この演算子が意味するところは、一度読み出したレジスタを加工した上で、またレジスタに代入するということです。ということは入力ポートとして設定したP1.1にも、当然書き込み処理は行われているのです。これに気づくのにかなりの時間を要しましたorz

結果、僕が使っているC8051では、例題としてあげたコードは、次のコードに書き換える必要がありました。

if(P1 & 0x02){P1 = (P1 | 0x01) | 0x02;}else{P1 = (P1 & ~0x01) | 0x02;}

最後にですが、汎用ポートを動かす際、レジスタ単位ではなく、ピット単位で動かせるものは、今回のような誤動作を避けるためにもピット単位での操作(P1.0 = 1; P1.0 = 0;)をするべきたと思いました。

21:02 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/827

December 06, 2011

MTM07 お疲れ様でした

[Timely]

Make: Tokyo Meeting 07では、Tiny Featherで傾きが検出できるよー、というデモをやっておりました。


ぬるぬる動いたよ! 動画は @lynnlynn1 さん提供

言い訳を一つさせください。動画の中盤以降にあるとおり、あまりに激しい動きをすると追従しきれなくなってしまいますが、これは補正が効いてしばらくたつと動画のとおり戻るので、問題とは考えていません。また内部のパラメータ調整次第で、解消も可能だと思います。室内でGPSが使えない環境下で結構健闘しているとも思います。

ご来場いただいた方、また出展のお手伝いいただいた方、その他の出展者の方、企画者の方、皆様、どうもありがとうございます。

※追加です。人力飛行機のテストフライトにTiny Featherを載せてとった飛行ログを、フライトの様子とあわせた動画も、当日再生していました。@HirakuTOIDA くん作動画です。

左右にバンクして、S字飛行しています。

13:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/826