|
About this site
Entries @ recently
July 01, 2009SWIGでiostreamを引数にとる関数のラップ(Rubyの場合)
[Computer]
とあるC++プログラムをRubyから使いたいということになりました。こんな時はCまたはC++のプログラムを、スクリプト言語から呼び出せるよう、ほぼ全自動でラッパーを生成してくれるSWIGの出番です。このSWIGはかなり賢いので、そんじゅそこらのプログラムでしたら、2,3行のインターフェイスファイルを書くだけで、スクリプト言語とC/C++の間を取り持ってくれます。 まずはじめに、実装が完成した際のプログラムのコードが、こんなにもエレガントになるということを語らせてください(笑)。以下に例を示します。invoked.hがSWIGでラップされる側、invoker.rbがそれを呼び出すRubyのコードです。 // invoked.h
#include <iostream> struct InvokedCppClass { void stream_op(istream &in, ostream &out){ // read from in and write to out ... }; }; // invoker.rb
require 'invoked.so' invoked = Swig_Wrapped_Module::InvokedCppClass::new open(src_file){|src| open(dist_file, 'w'){|dist| invoked.stream_op(src, dist) } } Rubyの文法と融合しているのが素敵だと思いませんか? 少なくとも僕は満足しています(笑)。 このようにラップをするためには、残念ながらSWIGで水面下でバチャバチャする必要があります。基本方針としては、typemapで呼び出し時に自動的にRubyのIOオブジェクトがiostreamに変換されるようにすることです。そのために、iostreamを生成するのに必要となるstreambufを使ってRubyのIOオブジェクトをラップするクラスを作成しました。この主要な部分をインターフェイスファイルに記述した結果、arg_std_iostream.iのようになりました。 使い方としては以下のようなインターフェイスファイルを作成してSWIGで処理をします。 // invoked.i
%module Swig_Wrapped_Module %{ #include "invoked.h" %} %include arg_std_istream.i 確認した限りではファイルをストリームの元とする際は正常に動作しています。しかしcygwinのRubyにおいて、IO::pipeで作成したストリームでは読み書きするデータ量が多いとハングしてしまう問題を発見しました。おそらくcygwinならびにM$特有の問題だと思われるので、今回のコードが悪さをしているのではないと信じたいです。 またSWIGのRubyは多重継承を完全にはサポートしていないようで、ストリームはistreamまたはostream、すなわち読み書きのどちらか一方に絞る必要がありました。この記事のタイトルを正確に書くならば『...istreamまたはostreamを引数にとる...』ですね。 23:59 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/708 June 25, 2009猫カメラ、空を飛ぶ!!某所での実験にて空から一枚。 Google先生の地図と比べてみます。 余興として猫カメラを載せてもらった結果です。はやく動画がとれる次バージョンを作りたいにゃあ。 20:39 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/707 June 20, 2009シリアルポートをstd::iostreamと同等にMacOSXでも扱う
[Computer]
以前、Windowsでのシリアルポートの読み書きを、C++で標準的な入出力インターフェイスであるiostreamと等価的に扱うためのヘッダを『シリアルポートをstd::iostreamと同等に扱う』という記事で公開しましたが、その後、MacOSXにも対応させました。ことの経緯としては、MacOSXから猫カメラの情報を搭載されたBluetoothで読み出したい(Bluetoothはシリアルポートとして認識されています)ということがあり、対応した次第です。おそらくLINUX/UNIXでも使えると思います。 ということで、最新版のヘッダcomstream.hです。 上記にあげた以前の記事では、*NIX系ならシリアルポートはファイルと等価に扱えるので、特に苦労はしない、のような話を書きました。しかしながら、読み書きの前にボーレートの調整やタイムアウトの設定など、初期化についてはそれなりにやることがあるようなので、やはりヘッダにまとめておいたほうが便利だと思います。そういう意味でもこのヘッダの価値はあるのではないかと思います。 それにしてもiostreamは良くできたクラスだと思います。バッファリングのなし、ありの両方において拡張性が確保されているので、シリアルポートといったハードウェア絡み(ブロッキング動作なのでバッファなしのことが多いと思います)から、プロトコル実装といったソフトウェアアルゴリズム(通常ノンブロッキング動作なのでバッファありが多いと思います)まで、このクラス群ひとつで幅広く対応できてしまうのが素敵です。 17:17 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/706 June 14, 2009宇宙がアツいようです
[Aero & Astro]
[Timely]
あまり更新がないのもアレなので、最近の話題を書いてみることにします。お題は『宇宙がアツいぜ!!』。箇条書きでいきます。 まずはNHK、『ふたつのスピカ』の実写版をやるようですね。アニメが大変良かった記憶があります(アニメもBS-hiで6/30から再放送らしいです)。未来の話なのに、哀愁がただよっている感じ(主題歌が『見上げてごらん夜の星を』だったはず)が好きです。実写版でライオンさんをどうするのか、ちょっと気になる次第ですが。 かぐやお疲れ様でした。しきしまふげんさんによる衛星擬人化本『現代萌衛星図鑑』も出たことですし、萌えますね。 そういえば最近、攻殻機動隊のテレビシリーズを復習しました。2nd GIGではタチコマのAIが米帝の衛星に乗っていたわけですが、最後の衛星落下シーンで流れる『手のひらを太陽に』には泣かされます。近いうちにBlue-rayででるようです。 宇宙を舞台にした人間ドラマ作品が多いことも事実ですが、そういったあたりに僕はグッとくるようです。 ※2009/06/27 衛星萌本入手しました。というかナメていました、この本。いい意味で『イラストよりもテキストの方がぜんぜん濃いじゃないか!!』という内容で、引き込まれます。萌えに興味ない方も購入しやすいようタイトルに『萌』を入れる必要がないんじやないかと思うくらいです。 23:59 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/705 June 07, 2009SEED-XDS560Plusとか VS6724 とかあまりにも更新がないのも申し訳ないので、軽めの近況報告2つでお茶を濁したいと思います。 まずは1つめのお話ですが、オートパイロットシステムSuper SylphideでTIのDSPを使っている関係で、そのDSPの開発環境を強化しました。購入したのはSEED Internationalという会社の560クラスエミュレータで、SEED-XDS560Plusという製品です。日本の代理店、立野電脳さんから購入しました。いままでは下位機種の510クラスのSpectrum Digital XDS510 USBを使っていたのですが、HS-RTDXという高速データ入出力環境を使いたいがために購入に踏み切りました。 2つ目の話としては、STMicroのUXGAカメラモジュールVS6724を、新しい猫カメラに使おうと考えています。この構想は、自作耳掛けMP3プレーヤTimpyでお馴染みのちあきさんにMTM03でお会いした際、VS6724を1個買わせていただいたことに端を発しています。ご対応いただきありがとうございました。 23:43 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/704 May 30, 2009Super Sylphide 進捗状況(24) -- DSP航法ファームウェア開発遍歴しばらく更新をしていなかったオートパイロットシステム Super Sylphide関連の話です。色々と大人の事情(世の中こういえば許されるらしい?、笑)があって記事を更新していなかったのですが、自分で設計したDSP基板で自分が考えた航法アルゴリズム(注:リンク先は搭載されているアルゴリズムの一部に過ぎません)が走るというのは気持ちがいいものです、という状況にようやく到達しました。そこで現在に至るまでDSPの開発遍歴をまとめておきたいと思います。 まずは象徴的な図を一枚あげます。 当初いきなりDSPで動くアルゴリズムをプログラムするのは難しいと考えました。そこでSylphideから取得したセンサの生データをPCで後から処理するためのプログラム analyze.exeをまずは書きました。analyze.exeは最も時間的制約が緩く、データを都合のよい順に並べ替えて処理しているので、オフラインでの解析に相当します。 その後、それをリアルタイム化したanalyzeRT.exeというPCで動くプログラムをリリースしました。analyzeRT.exeでは、データの到達順に逐次処理、言い換えれば遅れて入ってきたデータについても最新の状態まで追いかけ処理することによって、時間的に常に最新の状態が出力されるようにしてあります。このプログラムは入力として、analyze.exeと同じSylphideで取得された生データログファイル、あるいはSylphideをPCにUSB経由で接続する際に作られる仮想COMポートから流れてくる生データストリーム、の両者を受け取れるようにしてあります。これでリアルタイムのアルゴリズム的な動作検証を行いました。 最後にDSPへのanalyzeRT.exeの移植をし、NAV2_Coreファームウェアを作成しました。行列計算等の基本演算部分はDSPの特性が生かせるPCのコードを変更しましたが、肝心のアルゴリズム部分はPCと共通のヘッダとし、新たな問題がうきる可能性をできうる限り回避しました。PCとコードを共通化できたのは、使用したDSPがC++でコーディング可能であることによっています。 文章にまとめてしまうと量をあまりこなしているようには見えませんが、試行錯誤、紆余曲折をしつつ現在に至っていますので、かけた時間はかなりのものになりました。今後の誘導、制御ルーチンの開発では今回までに獲得した検証スキームを有効活用して効率化をはかりたいと思います。 11:09 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/703 May 23, 2009MTM03
[Timely]
風にも負けず、というかインフルエンザ騒動にも負けず(笑えない)、行ってきましたよ!! Make Tokyo Meeting 03。どれも面白かったのですが、写真をいくつか撮ってきたのでアップしてみます。 自作MP3プレーヤー Timpyのchiakiさん。歴代Timpyです。私信ですが、カメラモジュール活用させていただきます。 尻P先生のカルマン渦ミク。工学的に非常に深い現象だったりします。カルマンフィルタのカルマンさんとは、違うカルマンさん(笑) 実物見ることができるとは思っていませんでした。桁ごとクロック KetaClock。桁ごとに独立して売られていて集める楽しみがあるのだとか、ないのだとか(笑)。 タコルカ帽。かぶれます。仕様どおり浮いていますよ。 澪ちゃん…、ではなくて、ビーズは多色でいいですね(意味深い) 他にもアレやコレがあるわけで、興味がある方は明日もありますので是非どうぞ!! 22:15 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/702 |
最近のはてブられ
スポンサード リンク
かてごり~別
Aero & Astro (77)
Computer (146) Embedded System (158) Info (14) Mountain (38) Movable Type (28) Movie & Animation (20) Music (9) Photo (37) Site Management (42) Timely (104) Tips (61) ついったー
ぶろぐぴーぷる
Drecom
|