About this page
カテゴリー Aero & Astroに属する記事の一覧ページです。
現在このカテゴリーには71本の記事があります。

カテゴリー Aero & Astroの説明:
航空機、宇宙機に関することについて書いてあります。
Latest 5 Entries

Super Sylphide 進捗状況(19) --最近の飛行試験

オートパイロットシステム Super Sylphideですが、順調に開発が続いています。先日の模型飛行機を使った飛行試験では、以前の記事『i2cでサーボインターフェイス』で書いたシステムを利用して、パイロットの入力を50Hzで取得することに成功しました。

bj.jpg
双発ダクテッドファン機で実験中

入力履歴をとるとこんな感じでした。

bj_control_all.png
入力は4系統(左右スラストは同一チャンネル)

機体の特性把握(いわゆるシステム同定)に向けた特殊な入力も、名パイロットの"社長"氏にお願いして、マニュアル操縦で入力してもらいました。うまく入力できているみたいです。

bj_control_3_2_1_1.png
タイミングが重要

残念ながら機体の挙動は、モーターの振動が加速度計を共振させてしまっているようで、ちゃんと取得はできませんでした。ペイロード重量の関係で防振対策ジェルを入れられなかったのが敗因です。次回までのこの部分は徹底究明する必要がありそうです。

このまま順当にいけば、数回の実験による飛行データをもとに誘導、制御に取り掛れそうです。また開発が佳境に入ってきたこともあり、チームプレーになってきました。パイロットの"社長"氏、機体整備のY氏、発進担当のM君、ピトー管を作っているH君、これからもよろしくです。

※その後、コメント欄にちょっと書いてあるカメラモジュールの基板を企画してみました。

Jul 13, 2008. 01:08 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (2) | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/650

『GPSのための実用プログラミング』

最近このサイトへアクセスしてくださる方の傾向を観ると、GPS関係のキーワードで検索エンジンから来られる方が多いようで、特に自作GPSロガーは大人気となっています。そのような流れを受けて、今後もできるだけGPS関連の情報は充実させていきたいと考えています。その長期計画の一環として、GPS参考書『GPSのための実用プログラミング』の紹介、並びに掲載されているC言語コードをC++化したことについて、この記事では触れたいと思います。

僕はGPSの受信機をソフトウェアで構成することに元々興味があったので、以前は『Open source GPS C/A信号の抽出』の記事にもあるとおり、GPSのL1電波(1575.42MHz)から意味のある情報、例えば擬似距離(pseudo range)や搬送波位相(carrier phase)を抽出する、といった信号処理側から攻めていました。ところがこの攻め方はあまりメジャーのようではなく、その意味のある情報から更に計算を行って、現在位置といった測位を行うほうに興味がある方が多いようです。そのような方にお勧めしたい本として、電子航法研究所の坂井先生が書かれた『GPSのための実用プログラミング』という本があります。出版元は東京電機大学出版局です。

GPSのための実用プログラミング

この本は上記測位の点に要点を絞って解説された本で、C言語のコードと共に測位計算の手順が紹介されているので非常にわかりやすい本です。GPSの計測データの保存フォーマットとして一般的なRINEXファイルについても触れられているので、たとえGPS受信機を持っていなくてもIGS等のインターネット上に公開されているRINEXファイルを元に測位計算を体験してみることができます。

掲載されているC言語のコード(某所で公開されていますが、本の購入者のみ利用可能ということなのでリンクは控えさせていただきます)は非常に役に立ちましたが、僕自身の理解を深めるにためにも掲載コードの一部(第2章~第4章)を、色々と構造化して僕の好きなC++風に書き換えてみました。せっかくなのでコードを公開しようと思いますが、著作権の問題もあるかと思いますので、現在問い合わせ中です(肩透かしでごめんなさい→その後公開しました、記事末尾参照ください)。

ちなみに本を読み進めるにあたって、いくつか疑問点があり坂井先生に質問したところ、以下のような正誤が第1版ではあることがわかりました。

  • P.55 表3-2 離心率(e)のLSBでビット位置 (誤)159 => (正)167
  • P.55 表3-2 Δn のスケール (誤)-31 => (正)-43
  • P56 表3-3 軌道傾斜角(i_0)のビット位置 (誤)139 => (正)137

またさらに以下の疑問点があったので、問い合わせております(→その後、いずれの項目も指摘のとおりという返答をいただきました)。

  • P.63 表3-7 クロック補正係数(a_f2, a_f1, a_f0)の順が逆、正しくはa_f0, a_f1, a_f2ではないか
  • P.112 (3.16)のピアースポイント計算式 (誤)0.00137 => (正)0.0137ではないか

いずれの問題点も、GPSの仕様書『GLOBAL POSITIONING SYSTEM STANDARD POSITIONING SERVICE SIGNAL SPECIFICATION』(PDF)と付け合せた上での結論です。
ちなみにGPSは上記仕様書によると、その仕様上の定数を世界測地系WGS84に沿って定めているのですが、WGS84で元々定められた地球の自転速度(7292115E-11[rad/sec])ではなく、新しい時刻規定に基づいてWGS84で定められた自転速度(7292115.1467E-11[rad/sec])を使っている(WGS84仕様書(PDF)の3.2.4 参考)等、細かな違いがありプログラムを組む上でかなりはまりました。微細な違いに思われるかもしれませんが、光速からmm単位まで、様々なオーダーが入り乱れるGPSのことですから、このような微細な違いでも確実に効いてきます。

※その後、プログラムを公開を坂井先生にご快諾していただきました。080205_gpsフォルダからダウンロードできます。このプログラムの使用にあたっても、元のCプログラム同様、以下の条件でお願い致します、とのことです。

★プログラム例および関連するデータファイルの利用について
このプログラムは,本書(注:『実用GPSプログラミング』)をお買いあげいただいた方のみご利用いただけます。各データ(注:元のC言語プログラムならびに付属データ)の著作権およびその他の権利は,著者(注:坂井先生)が有します(注:ここで公開しているC++言語のプログラムについては加えてこのサイトの所有主のfenrirが有します)。読者個人による利用については特に妨げませんが,利用の際には,修正の有無にかかわらず本書を出典として明示してください。内容の無断複製・転載・再配布などはしないでください。各データは,すべて使用者の責任においてご使用下さい。使用したことにより生じた,いかなる直接的,間接的損害に対しても,著者(注:坂井先生)・当出版局(注:東京電機大学出版局)は一切の責任を負いません(注:ここで公開しているC++言語のプログラムの使用による損害ついてもfenrirはその責任を一切負いません)。

内容は4章までではなく5章までとしました。実行はVC2005 Express Editionとg++-3.4.4で確認しました。一部別ディレクトリ(commonnavigation)のヘッダが必要になると思いますが、実行環境に応じて調整を行ってください。
また応用を考え、ヘッダとして切り出したものも作りました。座標系についてのcoordinate.h、GPSのC/AコードやEphemerisについてまとめたGPS.h、RINEXフォーマットについてまとめたRINEX.hがあります。ex_header_sect5.cpp(5章の内容を上記ヘッダの組み合わせで実現するもの)を参考にすれば使い方がわかると思います。

※(2008/6/27 追記)富士通 近藤様よりプログラムについてご指摘を戴きました。衛星位置の計算の際に、昇降点の経度を求めるのですが、その補正項について解釈を誤っていたようです。この昇降点は『電波が到達した時刻のECEF座標系における値』でなければならないのですが、補正の際には送信時刻ベース(伝播時間を差し引いた時間)の補正であるエフェメリスからの補正、並びに受信時刻ベース(伝播時間を差し引かない時間)の補正である地球自転の2つがあり、それを混同していたようです。これに基づいてプログラムの修正を行いました。修正前の状態は __MISUNDERSTANDING_ABOUT_OMEGA0_CORRECTION__ をdefineすることで再現できるようにしてあります。『理解するためのGPS 測位計算プログラム入門』の質問コーナーにも同等の内容が触れられており、そちらも参考にしました。
また近藤様には、その他に効率的なニュートン法による解法についてもご指導を賜りましたが、こちらについてはまたの機会に反映する予定です。近藤様、大変ありがとうございました。

Feb 11, 2008. 13:24 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/619

学生室内飛行機コンテスト

航空機について学んでいる大学生・大学院生への教育活動として、手作りの室内飛行機/飛行船の競技会『全日本学生室内飛行ロボットコンテスト』が今年も開催されるようです。今年で3回目のこの競技会は年々規模が大きくなるようで、先日の申し込み締切りの時点では国内、そして海外から約40チームがエントリしたと聞いています。前回の大会ではニュースに取り上げられていたようですね。

競技会のルールの概略を紹介すると、体育館において手作り小型ラジコン飛行機または飛行船を飛ばし、その機体に搭載された無線ビデオカメラで地面の様子を撮影・転送、地面には文字の書かれた紙が置かれているのですが、その文字を人間がどれだけ判読できるかで主に勝敗が決定します。飛行機について言えば、求められる性能は低速飛行時の安定性や最小旋回半径といったところではないでしょうか。文字が判読できるかどうか、以外にも、機体の独創性やプレゼンテーション(今年から英語のようです)なども評価対象のようです。

さらに今年からは各チーム進捗状況報告を兼ねてブログをつけることがルールに盛り込まれたようです。興味を引かれる内容がありましたら、その際はこちらのサイトでも取り上げたいと思います。開催は来年3月で、応援していきたいと思います。

※その後、各チームの進捗状況を一度にさらう方法を記事にしてみました。

Dec 13, 2007. 09:25 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/607

Super Sylphide 進捗状況(14) -- McBSP(SPI)におけるCPU割込とEDMAの協調

製作中のオートパイロットシステムsuper Sylphideですが、DSP上で動作するプログラムのブラッシュアップを進めています。その中でDSPにかかるCPU割り込みが予想外に多く、処理負荷を上げていることがプロファイラによって判明しました。これは以前の記事『DSP/BIOSを利用した割込みMcBSP(SPI Slave)』にもあるとおり、SPIモードで利用しているMcBSPにおいて、4bytesつまり32bits受信するたびにCPUに割込みをかけて受信後の処理をしていたためです。そこで今回はCPU割り込み+CPUに負荷をかけることなくメモリの転送が行えるEnhanced DMA(EDMA)を協調させることによってCPU負荷軽減を目指してみました。

ここで、なぜEDMA単体ではなくCPU割込みと協調なのか、と疑問を持たれる方がいらっしゃるかもしれません。SPIやI2CといったCPUから見れば非常に低速なペリフェラルに対して適用されるDMAは、複数バイトをブロック処理するために使われることが多く、電源ONから電源OFFまでDMAは起動しっぱなし、CPU本体はDMAの起動、停止をいちいち行わない、というのが普通であると思います。特にターゲットとしているDSPのTMS320C6713に搭載されたEDMAは単体でピンポンバッファ(ダブルバッファといったほうが一般的でしょうか)を構成できるので、CPUがEDMAの起動、停止を動作中に変更する必要は全くありません。

ところが残念ながら以前の記事でも書いたとおり、McBSPをSPI互換モード(クロックストップモード)で動作させると、ハードウェアでは複数バイトで意味を構成するフレーム転送がサポートされません。そこでフレームの頭だしをソフトウェアで行うために、CPU割込みが必要となってきます。CPU割込みによって頭だしが行えたらCPU割込みを停止、EDMAを起動して1フレーム分溜まるまでEDMAを動作、EDMAによる1フレーム受信完了後、EDMA終了割込みによってCPU割込みを復活という動作によって解決を図りました。図で示すと、以下のような動作になっています。

McBSP_EDMA_cooperative.png

このアイデアを実装すると公開中のソースコードのようになりました。この記事を書いている時点でのCVSの管理番号はmain.cpp.1.34です。
ひとつ注意書きをしておきますと、EDMAとCPU割込みを同時に行うサンプルコードが探した限りでは見つかりませんでした。そのためコードの大部分は試行錯誤によって書かれており、動作が怪しいところが依然としてあります。
怪しい部分は、CPUが高負荷になった時点でMcBSP受信イベントがEDMAに伝わらずにEDMA割込み完了がおこらず、またEDMA動作時にはCPU割込みを無効にしているため、デットロック状態が発生していることです。しかもそのような状態に陥った際は、McBSPの受信レジスタ(DRR)に対してCPUから直接アクセスをすることによって、デットロック状態が解消(McBSPの受信イベントがEDMAに伝わるようになる)されるようなので、コードにはそのような対処法を追加してあります。おそらくEDMA、キャッシュ、McBSPあたりが臭いとにらんでいますが、現在解決には至っていません。この問題についてご存知の方がいらしたら情報を待っております。

最後に、このコードを書くにあたって2点ほど苦労しました。参考になる方がいらっしゃるかもしれませんので記録をつけておこうと思います。

一つはEDMA先がL2キャッシュが効いているCS0上のSDRAMであるため、EDMAを起動する以前にCACHE_wbInvL2()やCACHE_wbL2()によってキャッシュの掃除をしておく必要がありました。これを忘れると、SDRAMに受信内容が書き込まれていなかったり、送信内容が古いままになってしまいます。

もう一つはEDMAとMcBSPの初期化手順です。spra488『TMS320C6000 McBSP Initialization』に厳密な規定があり、これを守らないとEDMAがうまくかかりません。ここには先述のより一般的な使用方法であるEDMAが電源ONからOFFまで起動しっぱなし、というサンプルコードがあり、今回のコーディングはこのサンプルコードをもとに行いました。

※その後、I/O拡張基板の設計をしました。

Dec 4, 2007. 11:00 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (2) | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/606

Super Sylphide 進捗状況(12) -- DSPプログラムROM化

オートパイロットシステムsuper Sylphideですが、航法(INS/GPSナビゲーション)部分がほぼ完成したので、プログラムをROM化しスタンドアローンで動作するようになりました。現在、倍精度浮動小数点(double)で、18状態量(位置で5、速度で3、姿勢で4、センサバイアスで6)、カルマンフィルタの誤差共分散行列では16 x 16のアルゴリズムが100Hzで回っています。
そこで今回は、作成したDSPプログラムをROM化する行程をまとめておこうと思います。

長くなりそうなので、トップページからこられた方を続きをどうぞ。

※その後、Super Sylphide絡みでTime Keeperのファームウェアを公開しました。

続きを読む "Super Sylphide 進捗状況(12) -- DSPプログラムROM化"
Oct 29, 2007. 10:13 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/599
Old Entries @ Aero & Astro

Super Sylphide 進捗状況(7) -- 圧力センサの較正

オートパイロットシステム Super Sylphideには、2種類の圧力センサが搭載されています。1つは穴が2つ空いていて、その2つの圧力差を測るためのゲージ圧センサ、1つは大気圧を測るための絶対圧セ... [この記事を読む]

Aug 3, 2007. 02:40 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

コンデンサ逆接に対する一考

いちおう僕は航空宇宙産業の端くれなので、打ち上げ前の問題発覚により、問題が解決し人工衛星打ち上げの成功率を高められたことは非常に良いことであると思います。スケジュールどおりいかず、延期になったことにつ... [この記事を読む]

Jul 21, 2007. 23:19 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (8) | トラックバック

JX0122 @ OpenSky 2.0

ポストペットで有名な八谷氏がやっている一人乗り飛行機の展覧会に先日行ってきました。いわゆるメーヴェです。ちゃんと型式取っているみたいですね。 ちょっと見えないですが、翼の捻り下げ美しかったです。 ... [この記事を読む]

Mar 4, 2007. 19:53 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

『低精度MEMSセンサと汎用GPS受信機の融合による高精度航法システムの研究』

というタイトルで文章を書いていました、ようやく終わりました。 でもまだまだ続く文章作業。気が抜けませんが、これからは最低週一の更新を守りたいところです。 そういえばつい先日、TIのDSP開発環境であ... [この記事を読む]

Feb 17, 2007. 22:29 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (2) | トラックバック

DSP基板+小亀基板+センサ基板

こんな感じになりました。 本来と逆さまですが 上がDSP基板の裏面(電源部+RAM+ROMが見えています)、次が小亀基板(SDが出ています)、一番下の緑色の基板が小々亀基板のセンサ基板(加速度計... [この記事を読む]

Dec 25, 2006. 23:59 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (2) | トラックバック

室内飛行機用基板 Part.2

室内飛行機を自律飛行させる用の基板を以前つくりました(詳しくはリンク先の記事を辿っていってみてください)が、それのリニューアルをしてみることにしました。詳しい回路図や図面は、ある程度動作を確認してから... [この記事を読む]

Dec 5, 2006. 02:40 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

室内飛行機 コンセプト図

室内飛行機プロジェクトですが、今後が不明ですがとりあえず総まとめとして報告書をつくりました。その際に色々と図表を作ったのですが、イラストレータで絵を描くのが意外に楽しくなってしまい全体のコンセプト図が... [この記事を読む]

Sep 16, 2006. 14:49 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (4) | トラックバック

室内飛行機 自律旋回飛行に成功?

室内飛行機の自律飛行を検討していたわけですが、基板等の各コンポーネントがとりあえず完成し実験をすることになりました。当初の予定では、それらを活用して体育館内で室内飛行機を自律旋回飛行させようということ... [この記事を読む]

Aug 13, 2006. 00:53 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (5) | トラックバック

H8/3694用のフレームワーク

室内飛行機の自律制御システムを秋月電子のH8/3694ボードを利用して作成しているのですが、色々とプログラムができてきたので、ソースを公開してみようと思います。 ところでですが、マイコンで電子工作を... [この記事を読む]

Jul 27, 2006. 03:35 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

マイコンと超音波センサの接続

室内で飛行する模型飛行機の自動制御ですが、超音波センサを利用して壁までの距離、あるいは床までの距離を検出することを考えています。超音波センサは加速度計やジャイロのように単体で使うことができるわけではな... [この記事を読む]

Jul 19, 2006. 16:44 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

ラジコン受信機とマイコンの接続

室内で飛行する模型飛行機の自動制御を企んでいるわけですが、機体外から送られてきた制御情報と、機体に搭載されたセンサから得られた情報を、機体内のマイコンでミキシングすることによって全体のシステムが成立す... [この記事を読む]

Jul 15, 2006. 02:24 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (0) | トラックバック

室内飛行機用の基板、到着

Olimexに頼んでいた、室内飛行機を制御するための基板が届きました。左から順にプロポとPCを接続するアダプタ、超音波センサをドライブする回路、制御基板のマザーボードです。詳しくは過去の記事、『プ... [この記事を読む]

Jul 1, 2006. 22:10 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (7) | トラックバック

お手軽 INS/GPS

最近、室内飛行機の自律飛行に関する記事をたくさん書いているので、そういう関係の方が多く見てくださっているようですが、せっかくなので自分がメインにしている内容についても簡単に紹介しておこうかと思います。... [この記事を読む]

Jun 18, 2006. 00:34 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ | コメント (2) | トラックバック

機体搭載基板

室内で飛行する模型飛行機を自律飛行させる件ですが、地上側はプロポをPCからコントロールできるようになったり、と準備が着々と進んでいるので、機体側の開発に移行しています。 機体側には壁や地面などの障害... [この記事を読む]

Jun 15, 2006. 10:44 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | このエントリをドリコムRSSにクリップ |