July 02, 2007

Matlabが吐くepsをdvipdfmxで処理すると切れる

タイトルのとおりの現象が発生しました。最近諸事情によりMatlabを本格的に使い出したのですが、文章を書くのはやはりTeXなので、Matlabで作成した図はeps形式で保存し取り込んでいます。しかし、このMatlabが吐く図というのが曲者で、platexで処理をかけたdviでは図がしっかり読めるのですが、dvipdfmxでpdfにするとなぜが図の左側が欠けてしまうという現象がおきました。

図が出力できないMatlabなんぞ使い物にならないので、原因ならびに打開策をネットで調べてみました。最も簡単な打開策としては、イラストレータの形式であるaiでMatlabから図を出力し、イラストレータで図形を調整後、epsに変換するというものです。イラストレータからのepsは今までTeXならびにdvipdfmxを利用してきて取りこぼしたことがないので確実な方法であると思います。
しかしながら、今回はMatlabから保存したのはepsファイルのみ(.figやワークスペースを保管していなかったorz)で、もう一度グラフを出力しなおすのは少々大変という事情がありました。そこでなんとかして出力済みのepsのみを利用して問題解決を図りたいと考えました。

さらに色々と調べてみた結果、海外の掲示板で『Inclusion of large eps files with dvipdfm』というのがひっかかりました。
どうやら原因はepsのファイル内に記述された『ここからここまでが図形が入っている領域ですよ』というのを示したBoundingBoxの値の一部が負値をとっていることに原因があるようです。dvipdfmxは非負値の場合のみしか正しくepsを処理できないようで、この問題を修正するためにはepstopdfというコマンドを利用して、epsをpdfに変換してincludegraphicsで取り込めば解決すると書いてありました。

実際にepstopdfを使う方法を試してみると、うまく図が表示されるようになりました。しかしpdfをincludegraphicsで取り込む際にはbbオプション、あるいはebbコマンドを利用してBoundingBoxを指定してあげる必要があります。これはepsファイルに比べて取り回しがしにくくなりますので、ここではさらにxpdfのpdftopsコマンドを利用して、変換したpdfをさらにepsに戻してみました。この戻したファイルでも確認したところ図が切れずに表示されることを確認しました。

コマンドで表すと以下の作業をすることで、Matlab epsのBoundingBoxを正しい値に修正することができました。

for f in `find . -name "*.eps"`
do
    epstopdf --outfile=$f.pdf $f
    pdftops -eps $f.pdf $f.eps
    mv $f.eps $f
    rm $f.pdf
done

これでMatlabを安心して使うことができそうです。

23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (8) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/576

July 09, 2007

WindowsでMSD+CDC (USB Composite Device)

少し前に『USBでMSD+CDC (Composite Device)』という記事を書きましたが、実装がほぼ完了しました。ところがすんなりと行かないのがM$のWindows、というわけで色々と試行錯誤を行ってみました。その奮闘記をここに記しておこうと思います。

呪文のような文章が長々と続きますので、続きをどうぞ。

続きを読む "WindowsでMSD+CDC (USB Composite Device)"
23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (3) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/577

July 14, 2007

はてなスターのカスタマイズ設置

はてなスターというWeb拍手(気に入ったらボタンぽちっとな)のような機能が面白そうなので、このサイトでも設置してみました。今回はその設置に関する技術的なお話です。

このはてなスターですが、JavaScriptをテンプレートに貼り付けることによって実現されています。設置はMovableTypeなどの普通のブログなら解説サイトにあるように

<script type="text/javascript" src="http://s.hatena.com/js/HatenaStar.js"></script>

とすればよいようですが、デフォルトではhtmlのh3タグ内に記事のタイトル、ならびにその中のaタグに記事への固定リンク(permalink)があることが前提となっているようです。HTMLで書くと、

<h3><a href="(固定リンク)">(記事のタイトル)</a>

のようになっていることが想定されています。少しタグの構造が異なる人でも、『観測気球』での解説にあるように、ちょっとしたスクリプトを加えることで対応可能です。例えばこのような構造がtitleというclass属性がついたh2タグで実現されている場合は

<script type="text/javascript">
Hatena.Star.EntryLoader.headerTagAndClassName = ['h2','title'];
</script>

というような具合で対応できるようです。

しかしながら、このサイトは原型をとどめないほどテンプレートが改造されてしまっているので、上記のような簡単なカスタマイズだけでは対応できませんでした。特にタイトルにaタグでリンクをつけるのは個人的には好きでないので、例によって元のスクリプトを解析してみました。その結果、現在は以下のようなスクリプトではてなスターに対応しています。

<script type="text/javascript">
Hatena.Star.EntryLoader.loadEntries = function () {
var entries = new Array;
var headers = Ten.DOM.getElementsByTagAndClassName('h2','title',document);
var permalinks = Ten.DOM.getElementsByTagAndClassName('div','posted',document);
for (var i = 0; i < headers.length; i++) {
    var sc = Hatena.Star.EntryLoader.createStarContainer();
    var cc = Hatena.Star.EntryLoader.createCommentContainer();
    headers[i].appendChild(sc);
    headers[i].appendChild(cc);
    entries.push({
        uri: permalinks[i].getElementsByTagName('a')[0].href,
        title: Ten.DOM.scrapeText(headers[i]),
        star_container: sc,
        comment_container: cc
    });
}
return entries;
};
</script>

このサイトではタイトルはh2タグの中に納まっています。また記事への固定リンク(permalink)は別のところでpostedというclass属性がついたdivタグの中に収納されています。そこで上記のようなスクリプトで、はてなスター側に記事とURLの一覧を教えてあげることで、うまく動作することができました。

はてスタT欲しい 第2弾に応募してみます。

20:52 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/578

July 20, 2007

PA-09

ヒロセ(HRS)のDF13シリーズ日本圧着端子(JST)のZHシリーズなど、最近ハーフピッチのコネクタをよく使っています。ところがこれらのコネクタのピンヘッダ(ケーブルと接続する金属の部分、これをハウジングと呼ばれるケースに入れてコネクタは完成します)は非常に小さいので、コネクタメーカー純正の専用工具を利用しない限りうまくつけられませんでした。そこで以前『DigiKeyで日本語版カタログには載っていない商品』に書いたような、加工済みのピンヘッダ付ケーブルを買ってきて利用していました。

そのような状況の中、少し以前に工具の会社エンジニアからPA-09というハーフピッチコネクタにも対応した汎用工具が発売されました。使ってみたいなと思いつつも結構時間がたってしまったのですが、この度ようやくケーブルの長さを自由に調整したいという欲望に駆られて晴れて入手する運びとなりました。

PA-09.jpg
念願のPA-09。

早速、ZHとDF13で試してみたのですが、非常に綺麗に加工ができました。値段が4000円程度であることを考えると、非常によくできた製品であると思います。ちなみにコネクタメーカー純正工具は10万円くらいするようです…。

23:08 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (5) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/580

July 21, 2007

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

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

『かぐや(SELENE)の打上げ延期について』
他衛星(超高速インターネット衛星WINDS)の地上試験を進めている中で、コンデンサの極性が逆に取り付けられていることが発見された。
このため、「かぐや」(SELENE)において同様の問題がないか調査を行ったところ、子衛星に使用しているコンデンサの2個で同様の問題があることが判明したため、当該部品の交換を行うこととした。

しかし、コンデンサの逆接という程度の低い問題に足を絡めとられたと思うと非常に心が痛みます。これがもし人工衛星ではなく民生品でしたら、即リコールの対象になっていることでしょう。
少しでも電気の知識があるのなら、この行為がいかに危険なことであるかは簡単に理解できます。なぜなら、逆につないだコンデンサは発火します。僕も何度かやりました。幸い目撃者がいなく事故扱いされることなく済みましたが(笑)。

ところで、このような程度の低い単純なミスを早期に予防することはできなかったのでしょうか。
航空宇宙製品は長期間の運用を前提とした信頼や安全を最重視したシステムがほとんどであり、少なくとも慎重に設計、製作が行われています。人工衛星の製作に至っては空気が十分に浄化されたクリーンルームで行われており、まさにこれ以上ない環境で製造される精密機器といっても過言ではないでしょう。
最高の条件下でおきた些細なミス。よくある話で、結局のところ環境に介在した要素、すなわちヒューマンファクターこそ今回のミスの原因ではないでしょうか。つまるところ、このミスを犯した人間に、コンデンサの逆接がいかに危険なものであるか、という認識が十分にあれば、このミスを早期に予防できた可能性が高いと考えています。

しかしながら、そのような電気に関する認識を体得できる土壌が、航空宇宙産業には十分に成熟していないように思われます。
システムが大規模化すると、もはや純粋な機構的なハードだけでは対応できず、電気による制御が必要になることはいうまでもありません。一番身近な例は自動車で、もはや中身はマイコンだらけ。近年自動車は排ガス規制などの外圧もあり、電気によるエンジン制御なくしては成立しないという状況に追い込まれた結果です。
一方、航空宇宙機器についても、近年システムが飛躍的に複雑化し、自動車などと同じように電気の力を導入せざるを得なくなりました。しかしながら排ガス規制のような社会的、緊急的要請がないために、電気の部分の対する取り組みは他産業に比べて緩やかであると思います。航空機の話について言えば、陀面の制御が電気的(フライバイワイヤ)であっても、動力は応答性や小型化に優れた電気モーターではなく、実績がある油圧で行っていることがほとんどです。また産業全体に流れる空気として、その古くを燃焼や空力、材力といった機構的なハードに端を発しているので、それをドライブする電気機械は興味の対象外である人が多いようです。

この考察を掘り下げ、以下、身の周りの現状に基づいて、人数と人材育成という側面に最も問題があるのではないかと考えています。

まず人数について。将来確実に航空宇宙産業の中枢を担うであろう人が身の回りにいるので、その人たちを観察してみましたが、電気に関する知識をもっている人の絶対数がとても足りないように思われます。
例として適正かどうかは検討の余地が大いにあるところですが、現在僕が所属している航空機の制御の研究を行う某集団では、全体30人弱の中で電気のことをある程度理解している(コンデンサの逆接が危険だとわかるレベル、あるいは実際に燃やしてしまったことがある)のは、僕を含めて2~3人といったレベルです。もう少し大きな枠で見ても、電気関係の知識が蓄積されている組織というのは某小型衛星をやっているところぐらいではないでしょうか。
とにかく電気に対する認識を持った人数が足りない、これが今回のミスの間接的な要因であると思われます。

人材育成という観点からは、電気に対する認識を持った人材を育てるのが難しいということが挙げられると思います。なんといっても電気的な現象は目で見えません。ある意味、勘と経験が頼りといっても過言ではなく、取得者自身にある程度のセンスが求められるのではないか、というのを、最近個人的経験から感じています。
技術者はπ型を目指すべきだということがよく言われているようです。π型とは、複数の専門知識とそれに付随する広く浅い横断的な知識を図形的に表した形です。今回のような専門家でなくともわかるミスを防ぐためには、集団の構成員全員がこれを問題として取り扱うことが重要であり、そのために構成員が広範囲な知識の一貫として電気を習得するのが、最も効果的であることは間違いないでしょう。しかし広範囲な知識として、電気(やそれに付随するIT)は機構的なハードからは一線を画した離れた場所にあるわけで、おいそれと手を出せるほど習得が容易ではないような気がします。これを乗り越えていくには本人の意欲しかないのではないでしょうか。
まとめると今回の問題の背景には、構成員が電気的な認識に対するコンセンサスを持つのが難しいという現状があったと思われます。

要するに何が言いたいかというと、航空宇宙に関わる人、電気は面白いので、もっと興味を持ってくださいということです(笑)。

※色々と個人的に調べた結果、上の記事は第一報を聞いたときの僕の主観に基づいて書かれていることが明らかとなりました。事実かどうであるかは、各人が知りうる確からしい情報を元にご判断ください。

23:19 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (8) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/581

July 28, 2007

Super Sylphide 進捗状況(6) -- ケーブルのスマート化

オートパイロットシステム Super Sylphideですが、最近模型飛行機に搭載して実機運用するようになりました。実機運用といっても残念ながら機能がフル完成したわけではなく、現在のところ飛行履歴をとる為のデータロガーとして活躍しています。

実機での運用を行ってみると、色々なところに気づかされます。模型飛行機の胴体は細いものが多いので、搭載に結構時間をとれてしまうことがありました。特にケーブルが外部にでている場合、サーボやスピコンといった他の配線と干渉することがあり、できるだけケーブルは外部に露出させない方がよいことがわかりました。

そこでセンサやGPSが載った基板のコネクタの配置を見直し、ケーブルが外に露出しないような新モデルをこさえました。

sylphide_old_new.jpg
左が旧、右が新。新モデルでは配線が出ていません。

これからも実機運用で発生するであろう、色々な問題点をフィードバックして改良に勤めていこうと思います。

※その後、ゲージ圧センサの較正をしました。

21:15 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | コメント (0) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/582