2014年10月14日火曜日

SPF材(1x3)で木箱を組む

ホームセンターで買った1x3(ワンバイスリー)サイズのSPF材で木箱、木製のコンテナのようなものを作ってみました。といっても、ものを格納するというよりはインテリアとしてハーブ鉢の台にするとか、なんとなくそんな使い方を考えて。
とりあえず晒し上げ。


材料はあらかじめホームセンターのカットサービスで切ってもらっておきます。長さは4種類。上の写真の上から順に、一つ目が底板4枚、二つ目が長手の側板4枚、三つ目が短手の側板4枚、四つ目が短手の側板の連結用2枚です。



ドリルで下穴を開けた上で、コーススレッドで締結していきます。


組み上げたところ。底面側から。


上から。

ここから塗装に入っていきます。

今回使用した塗料はニッペのオイルステイン、「ウォルナット」カラーです。木目を生かしつつ使い込んだような風合いのつやと色むらを演出してくれて、渋い感じに仕上げることができます。


軽く乾かしながら捨て木を挟んで底面からも塗っていきます。


塗り残しが内容に気をつければ、多少のむらはかえっていい雰囲気になります。


完成。


横置きが似合います。いくつか作ってスタックしてもおしゃれかな、きっと。

SPF材だと規格上ごっつくアメリカンな感じになるので、もうちょい華奢な木材を選んで作ってみてもいいかも。

2014年9月25日木曜日

UbuntuのXディスプレイをSSHからパワーセーブ解除する

こんなことやりたい人がいるかわかりませんが、XディスプレイをSSHからパワーセーブしたり、パワーセーブを解除したりする方法について。

通常、Xディスプレイを操作するにはxsetを使います。SSHから操作する場合もこれは変わりませんが、そのままのコマンドでは、SSHコンソールがグラフィカルウィンドウではないため、所望のXディスプレイを特定して操作することができません。したがって、-displayウィンドウを使ってXディスプレイを指定してやる必要があります。

-displayオプションに指定すべきサーバー名をうまいこと調べる方法がぐぐってもなかなか見つからないんですが、たぶん一番簡単にできるのは、当該のディスプレイ側で仮想コンソール(Xtermなどのターミナルソフト)を開いておいて、wコマンドを打つ方法です。wはSSHからでもOKです。
ここでFROMにある:0とかがXディスプレイのサーバー名です。

あとxsetコマンドがない場合は下記でパッケージインストールします。
まずは、パワーセーブを解除して復帰させるコマンド。
次に、指定時間でパワーセーブに入らせるコマンド。
タイムアウトを秒単位で指定できます。
すぐにオフにしたい場合は、
それからデフォルトのタイムアウト時間を指定しておきたい場合は、 /etc/X11/xorg.conf.d/の下にconfファイルを作っておく。
ServerLayoutセクションのOptionエントリで、"0"を指定するとその機能が無効、それ以外の数字を指定した場合は、分単位でタイムアウト時間が設定される。
この場合、1分でディスプレイがオフになる。あとMonitorセクションのOptionでDPMSを有効にしておく必要があるようです。

Raspberry PiにつないでいるUSB接続のDisplayLinkモニタをセンサー入力でオンできないかなー、なんてのが動機ですが、そこまでやるかは気分次第。


参考

Display Power Management Signaling (日本語) - ArchWiki
A Primer on Screen Blanking Under Xorg - Shallowsky.com
list existing X display names? - Ask Ubuntu

2014年7月21日月曜日

Makers' Baseでレーザーカッターのトレーニングを受けてきた

もう一年以上前の話になりますが、 APC Paperに感化されて、シングルボードコンピュータを入れるための紙箱を作ったことがありました。2mm厚のボール紙を材料に使ったんですが、これを切り出すために、寸法を測り、目印をつけて、定規を当ててカッターで切る、という作業はすごく手間がかかるということ。垂直をとるように気をつけないといけないので、当然たくさん作るのも大変。それで当時、何とか楽にできる方法はないかと頭を悩ませ、裁断機を使うなんてことまで考えたんですが、いつしかレーザーカッターという文明の利器に頼ってはどうかと思い抱くようになりました。

暫くして、 レーザーカッターの使い方を教えてもらえるような場所を探しているうち、たどり着いたのが今回お邪魔した東京は目黒のMaker's Baseさんです。こちらでレーザーカッターのトレーニングを受講することで、それ以降施設のレーザーカッター設備を時間借りできるようになります。さらにレーザーカッターのみならず、木工や金工、陶芸、3Dプリンター、シルクスクリーンといった様々な工作、造形技術のトレーニングと設備の時間貸しを行っています。去年流行った言葉で言うところのパーソナルファブリケーションをするための施設と言えます。

さて、雨もそぼ降る初夏の候、Webからばっちり予約をしてレーザーカッターのトレーニングを実際に受講してきました。JR目黒駅を西へ出たら、タクシーがベタ踏みで登っていく大円寺横の行人坂を下り、雅叙園を横目に、春には桜が綺麗だったであろう目黒川を越えると、住宅街の一角にMaker's Baseさんがあります。


2階のレセプションでトレーニング受講に訪れた旨を伝え、簡単な質問票(アンケート?)記入の後、トレーニングへ。私のときは講師1名に受講者3名、濃厚な少人数制クラスで上達せざるを得ません。2時間枠のトレーニングで最初はテキストを使った講習、機材の使い方を覚えます。次に同施設の備品のタブレットPCを使いカットのためのベクターデータ作成。続いてタブレットからレーザーカッター本体へベクターデータ出力をし、実際にカット。最後に、自由制作です。


ところで、さっきからカット、カットと言っていますが、レーザーカッターでは素材のカットだけではなく表面への彫刻も可能です。濃淡は表現できず完全な二値画像としての出力になりますが、解像度は結構高いので、ハーフトーン等で多少の表現は可能と思われます。
実際に、アクリル板に画像ベースの彫刻を試してみました。↓の画像の手前にある方はたまたまタブレットの中に入っていた画像で、↑のレーザープリンタを撮影したものと思われます。タブレットにインストールされていたイラストエディターで(トーンマップ機能を使った突貫の)二値化をして出力させました。


最後に、せっかくなら誰もレーザーカッターで出力したことのなさそうなものを作ってレーザーカッター史に名を残そうと思い、某天才コメディアンの殿様をオマージュしてみました↓。


そんな感じでトレーニング用に支給いただいたアクリル板から3作品(?)切り出したところで時間いっぱいとなりました。今後、作業性アップのために鍛錬することが課題ですね。
切断する素材によって出力時にレーザーカッターのパワーとスピードを決めなければいけないので、厚紙カットのチャレンジはまた追い追い。


麺屋百式さんでラーメン食べて帰りました。

2014年7月13日日曜日

UDOO(i.MX6)用Ubuntu 13.10のSDカードセットアップ

UDOO公式で配布されているUbuntuのバージョンは12.04と若干古めなんですが、こちらのブログで13.04のファイルシステムが配布されているのをたまたま見つけたので、インストールしてみることに。とりあえずカーネルとU-Bootは公式のものをそのまま使い、ファイルシステムだけ13.04にしてみます。

作業はLinuxマシンで行います。

1.ルートファイルシステム、カーネル、カーネルモジュール、U-Bootのダウンロード


まずは必要なものをもろもろダウンロードしてきます。

U-Boot。i.MX6 DualモデルとQuadモデルで違うので注意。
$ wget http://udoo.org/download/files/UDOO_Unico/u-Boot_Quad/u-boot-q.imx
次にカーネルイメージ。
$ wget http://udoo.org/download/files/UDOO_Unico/Kernel/uImage
それからカーネルモジュールも。
$ wget http://udoo.org/download/files/UDOO_Unico/Kernel/modules.tar.gz
後は件のルートファイルシステム(rootfs)。
$ wget http://stende.no-ip.info/jas/xubuntu_13_04_gpu.tar.gz

2. SDカードのパーティショニング


役者がそろったら、彼らに最高のステージを。SDカード。UDOOの場合はマイクロSDですな。たぶん2GBとかでもいけますけど、今日日Class10の16GBくらいじゃないと使う気になれませんね。笑
SDカードをカードリーダとかに挿してホストマシンに接続したら、dmesgとかでデバイス名を確認しておきます。パーティショニングはこの後すぐ!ホストマシンのHDDと間違えるなよ!絶対にだぞ!
 sdf: sdf1 
既存パーティションがある場合には上記のようにsdXのあとに数字のついたデバイスが見えるはず。いずれにせよ消しちゃうのであってもなくてもOK。

パーティショニングの作業はお好きなツールで。GUIならGpartedが便利ですよね。その昔、BeagleboardなんかいじってたころはfdiskでSDカードをフォーマットしたものです。最近はでっかいHDDをいじるときにfdiskがGPTに対応してなかったりするんで、私はpartedに移りつつあります。そんなわけでpartedを使ってやっていきましょう。
$ sudo parted /dev/sdf
まずはprintで中身を見てみる。
(parted) print                                                            
モデル: I-O DATA micro SD Reader (scsi)
ディスク /dev/sdf: 15.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    4194kB  15.9GB  15.9GB  primary  fat32             lba

既存のパーティション1をrmで削除。
(parted) rm 1
(parted) print                                                            
モデル: I-O DATA micro SD Reader (scsi)
ディスク /dev/sdf: 15.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始  終了  サイズ  タイプ  ファイルシステム  フラグ

次にmkpartでパーティションの作成。ファイルシステムはEXT3、サイズは先頭を10MiBほど空けて、後ろはSDカードサイズいっぱいにとってあげましょう。(パーティションテーブルをmsdosに直す場合はmklabelでできます。)
(parted) mkpart primary ext3 10MiB 15.9GB
(parted) print                                                            
モデル: I-O DATA micro SD Reader (scsi)
ディスク /dev/sdf: 15.9GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    10.5MB  15.9GB  15.9GB  primary

quitで終了。
(parted) quit
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。  

パーティショニングでEXT3指定をしましたが、mkfsもしたほうがいいっぽいので、
$ sudo mkfs.ext3 /dev/sdf1
はい。これで完了です。

3. SDカードへの書き込み


できたパーティションに先ほどダウンロードしたルートファイルシステムを書き込んでいきます。
まずはローカルにマウントポイントのディレクトリを作成し、マウント。
$ mkdir sdcard
$ sudo mount /dev/sdf1 sdcard
ルートファイルシステムをマウントしたSDカードのパーティションへ展開。sudoを忘れずに。
$ sudo tar -xzpf xubuntu_13_04_gpu.tar.gz -C sdcard/
続いてカーネルのコピー。
$ sudo cp uImage sdcard/boot
それからカーネルモジュール。既存のものを消してから。
$ sudo rm -rv sdcard/lib/modules/*
$ sudo cp -av lib sdcard/
ここまでできたら、アンマウントします。
$ sudo umount sdcard
最後に、SDカードにU-bootを書き込みます。
$ sudo dd if=u-boot-q.imx of=/dev/sdf bs=512 seek=2
これでSDカードの準備は完了。syncしてからSDカードを取り外し。
$ sync
ボードに挿して起動します。

(おまけ) Ethernetインタフェースのセットアップ


そのままだとEthernetに接続できませんが、/etc/network/interfacesに下記を追加し、
auto eth1
iface eth1 inet dhcp
下記でEthernetのインタフェースを起動すればOKです。
$ sudo ifup eth1

参考
I.MX6 - Ubuntu 13.04 with GPU acceleration - Tiny Devices
UDOO creating a bootable Micro SD card from precompiled binaries - eLinux.org
UDOOのUbuntuでネットワークに接続できない - Atelier Orchard

2014年5月20日火曜日

ウェブカメラのフォーカス

新しいウェブカメラを買いました。LogicoolのC920t。実勢で一万円ほどする高級ウェブカムですよ。Raspberry PiとかUDOOとかのARMシングルボードコンピュータとつなげて遊ぶウェブカムとしては、もともと持っていたバッファローのBSW32KM01Hを使っていたんですが、最近マクロ寄りの距離でタイムラプスを撮りたいとこっそり妄想していて、それができそうなウェブカムを探していたのです。
C920tは価格.comのWebカメラランキングでも上位にあるのですぐにアンテナにかかりましたが、決め手は
  • 最短7cmのとってもマクロな焦点距離
の他にも、
  • UVC対応
  • ハードウェアH.264エンコード
  • 海外のウェブカムハックでよく話に挙がっている
  • 三脚雲台ネジ穴
といったところがあります。ついでに言うと、「カールツァイスレンズ搭載」というのもこの製品の売りだそう。

さっそくボードにつないで実験してみるわけですが、ARMボードでの使用となれば、早々簡単にはいかない。uvccaptureで静止画撮影してみたんですが、Raspberry Piで撮るとやけに暗いし色もおかしい。UDOOだとそれなりにきれいに撮れるのに。uvccapture -vで調べてみた結果、BrightnessContrastSaturationGainの設定がおかしくなっていた。uvccaptureのソースを読んでみると、コマンドラインから前記のパラメータが指定されていない場合、v4l2ドライバへのioctlコールでパラメータリセットがかかる。そうなると、これがRPi固有の問題か、他のカーネルでも同じかわかんないけど、おかしな設定になってしまう。あとuvccaptureのソースを読んだついでに書いておくと、前記パラメータに0を指定すると無視されてリセットがかかり、やはりおかしな初期値が使われる。これはさすがにバグだと思う。

さて、UDOOを参考に
  • Brightness: 128
  • Contrast: 128
  • Saturation: 128
  • Gain: 1
で、RPiでもそれなりに素敵に撮れるようにできた。

でもまだ問題が残る。フォーカスである。

カメラの前に被写体として瓶を置いて撮ってみるものの、ピントが合ってない。さてどうしたものかと思っていろいろいじっていると、v4l2-ctlでフォーカスの設定ができそうなことに気づく。
$ v4l2-ctl --list-ctrls
...
                 focus_absolute (int)    : min=0 max=250 step=5 default=8189 value=0 flags=inactive
                     focus_auto (bool)   : default=1 value=1
...
これが使えるとしたら、UVCもなかなか気が利く。

まずはオートフォーカスをオフに。
$ v4l2-ctl --set-ctrl focus_auto=0
次にfocus_absoluteという値をいじってみる。今の設定値は
$ v4l2-ctl --get-ctrl focus_absolute
focus_absolute: 0
なので、ここから少しずつ刻みながら画像を確認してみる。
$ v4l2-ctl --set-ctrl focus_absolute=0
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus00.jpg
$ v4l2-ctl --set-ctrl focus_absolute=10
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus10.jpg
$ v4l2-ctl --set-ctrl focus_absolute=20
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus20.jpg
$ v4l2-ctl --set-ctrl focus_absolute=30
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus30.jpg
$ v4l2-ctl --set-ctrl focus_absolute=40
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus40.jpg
$ v4l2-ctl --set-ctrl focus_absolute=50
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus50.jpg
$ v4l2-ctl --set-ctrl focus_absolute=60
$ uvccapture -x1920 -y1080 -B128 -C128 -S128 -G1 -ofocus60.jpg
で、結果が下の画像。なおカメラから被写体までの距離は、チポトレソースが約10cm、シナモンシュガーが約20cm、ボトルのビールが約30cmです。(ちなみにこれらはアメリカのトレーダージョーで買い漁ってきた物。)

focus_absolute=0
focus_absolute=10
focus_absolute=20
focus_absolute=30
focus_absolute=40
focus_absolute=50
focus_absolute=60
撮影風景↓

まずfocus_absoluteに関してわかるのは、値が小さいほど無限遠側、大きいほどマクロ側のフォーカスとなること。それから10~30cm程度の近距離の被写体をうまく収める設定値はなさそう。10~40あたりの範囲で好みを調整するといいかもしれない。

オートフォーカスのときにどういう測距点を使っているのかわかりませんが、ちゃんと撮りたければマニュアルで設定してあげるほうがよさそうです。

2014年5月13日火曜日

MEncoderで動画変換

streamerコマンドを使って、Linuxコマンドラインでウェブカメラ録画をしてみた(関連記事)けど、うまいことエンコードできず無圧縮AVIのまま保存していたので、ファイルサイズがすごく大きい。

そこで、あとからでも圧縮できないかと思ってちょっと調べてみたところ、とりあえずMEncoderを使ってMPEG2にできた。

mencoderがインストールされていなければ、まずはインストール。
$ sudo apt-get install -y mencoder

で、AVI→MPEG2の圧縮が
$ mencoder input.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video  -oac copy -o output.mpg
でできた。元ファイルが320x240/10fpsの10秒のRGB24で約24MB、圧縮後が約820kBなので、だいたい1/30になった。

H.264とかもできたらいいなー。オプションとかいろいろ調べてみよう。

参考

Chapter 6. Basic usage of MEncoder - MPlayer - The Movie Player

ホワイトバランス設定してウェブカメラ録画

Linuxのコマンドラインでウェブカメラを使った動画撮影をする方法を昨日書いたんですが、若干ホワイトバランスが要調整という感じだった。ので、ホワイトバランス設定してから撮影する方法。

v4l2-ctlというツールを使います。インストールされていなければ
$ sudo apt-get install v4l-utils
でパッケージをインストール。

で、まずホワイトバランスを含め設定可能なパラメータの一覧を表示。
$ v4l2-ctl --list-ctrls
                     brightness (int)    : min=-64 max=64 step=1 default=0 value=0
                       contrast (int)    : min=0 max=64 step=1 default=32 value=32
                     saturation (int)    : min=0 max=128 step=1 default=67 value=67
                            hue (int)    : min=-40 max=40 step=1 default=0 value=0
 white_balance_temperature_auto (bool)   : default=1 value=1
                          gamma (int)    : min=72 max=150 step=1 default=110 value=110
                           gain (int)    : min=0 max=80 step=1 default=0 value=0
           power_line_frequency (menu)   : min=0 max=2 default=2 value=2
      white_balance_temperature (int)    : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
                      sharpness (int)    : min=0 max=6 step=1 default=3 value=3
         backlight_compensation (int)    : min=0 max=2 step=1 default=1 value=1

現在の設定値の取得は
$ v4l2-ctl --get-ctrl white_balance_temperature
white_balance_temperature: 4600
オートホワイトバランスのON/OFF確認なら
$ v4l2-ctl --get-ctrl white_balance_temperature_auto
white_balance_temperature_auto: 1
でできる。

実際にホワイトバランスを設定してみる。オートホワイトバランスを切る必要があるので、white_balance_temperature_auto=0を入れる。で、色温度最低は
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0,white_balance_temperature=2800
色温度最高なら
$ v4l2-ctl --set-ctrl=white_balance_temperature_auto=0,white_balance_temperature=6500
で設定できる。

あとは昨日書いた下記のコマンドで撮影してみると、違いがわかります。
$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f rgb24

参考

Webcam settings on Ubuntu and Fedora Linux CLI from terminal - TechyTalk.info