もう一年以上前の話になりますが、 APC Paperに感化されて、シングルボードコンピュータを入れるための紙箱を作ったことがありました。2mm厚のボール紙を材料に使ったんですが、これを切り出すために、寸法を測り、目印をつけて、定規を当ててカッターで切る、という作業はすごく手間がかかるということ。垂直をとるように気をつけないといけないので、当然たくさん作るのも大変。それで当時、何とか楽にできる方法はないかと頭を悩ませ、裁断機を使うなんてことまで考えたんですが、いつしかレーザーカッターという文明の利器に頼ってはどうかと思い抱くようになりました。
暫くして、 レーザーカッターの使い方を教えてもらえるような場所を探しているうち、たどり着いたのが今回お邪魔した東京は目黒のMaker's Baseさんです。こちらでレーザーカッターのトレーニングを受講することで、それ以降施設のレーザーカッター設備を時間借りできるようになります。さらにレーザーカッターのみならず、木工や金工、陶芸、3Dプリンター、シルクスクリーンといった様々な工作、造形技術のトレーニングと設備の時間貸しを行っています。去年流行った言葉で言うところのパーソナルファブリケーションをするための施設と言えます。
さて、雨もそぼ降る初夏の候、Webからばっちり予約をしてレーザーカッターのトレーニングを実際に受講してきました。JR目黒駅を西へ出たら、タクシーがベタ踏みで登っていく大円寺横の行人坂を下り、雅叙園を横目に、春には桜が綺麗だったであろう目黒川を越えると、住宅街の一角にMaker's Baseさんがあります。
2階のレセプションでトレーニング受講に訪れた旨を伝え、簡単な質問票(アンケート?)記入の後、トレーニングへ。私のときは講師1名に受講者3名、濃厚な少人数制クラスで上達せざるを得ません。2時間枠のトレーニングで最初はテキストを使った講習、機材の使い方を覚えます。次に同施設の備品のタブレットPCを使いカットのためのベクターデータ作成。続いてタブレットからレーザーカッター本体へベクターデータ出力をし、実際にカット。最後に、自由制作です。
ところで、さっきからカット、カットと言っていますが、レーザーカッターでは素材のカットだけではなく表面への彫刻も可能です。濃淡は表現できず完全な二値画像としての出力になりますが、解像度は結構高いので、ハーフトーン等で多少の表現は可能と思われます。
実際に、アクリル板に画像ベースの彫刻を試してみました。↓の画像の手前にある方はたまたまタブレットの中に入っていた画像で、↑のレーザープリンタを撮影したものと思われます。タブレットにインストールされていたイラストエディターで(トーンマップ機能を使った突貫の)二値化をして出力させました。
最後に、せっかくなら誰もレーザーカッターで出力したことのなさそうなものを作ってレーザーカッター史に名を残そうと思い、某天才コメディアンの殿様をオマージュしてみました↓。
そんな感じでトレーニング用に支給いただいたアクリル板から3作品(?)切り出したところで時間いっぱいとなりました。今後、作業性アップのために鍛錬することが課題ですね。
切断する素材によって出力時にレーザーカッターのパワーとスピードを決めなければいけないので、厚紙カットのチャレンジはまた追い追い。
麺屋百式さんでラーメン食べて帰りました。
2014年7月21日月曜日
2014年7月13日日曜日
UDOO(i.MX6)用Ubuntu 13.10のSDカードセットアップ
UDOO公式で配布されているUbuntuのバージョンは12.04と若干古めなんですが、こちらのブログで13.04のファイルシステムが配布されているのをたまたま見つけたので、インストールしてみることに。とりあえずカーネルとU-Bootは公式のものをそのまま使い、ファイルシステムだけ13.04にしてみます。
作業はLinuxマシンで行います。
まずは必要なものをもろもろダウンロードしてきます。
U-Boot。i.MX6 DualモデルとQuadモデルで違うので注意。
役者がそろったら、彼らに最高のステージを。SDカード。UDOOの場合はマイクロSDですな。たぶん2GBとかでもいけますけど、今日日Class10の16GBくらいじゃないと使う気になれませんね。笑
SDカードをカードリーダとかに挿してホストマシンに接続したら、dmesgとかでデバイス名を確認しておきます。パーティショニングはこの後すぐ!ホストマシンのHDDと間違えるなよ!絶対にだぞ!
パーティショニングの作業はお好きなツールで。GUIならGpartedが便利ですよね。その昔、BeagleboardなんかいじってたころはfdiskでSDカードをフォーマットしたものです。最近はでっかいHDDをいじるときにfdiskがGPTに対応してなかったりするんで、私はpartedに移りつつあります。そんなわけでpartedを使ってやっていきましょう。
できたパーティションに先ほどダウンロードしたルートファイルシステムを書き込んでいきます。
まずはローカルにマウントポイントのディレクトリを作成し、マウント。
そのままだとEthernetに接続できませんが、/etc/network/interfacesに下記を追加し、
参考
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
作業は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 primaryquitで終了。
(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カメラランキングでも上位にあるのですぐにアンテナにかかりましたが、決め手は
さっそくボードにつないで実験してみるわけですが、ARMボードでの使用となれば、早々簡単にはいかない。uvccaptureで静止画撮影してみたんですが、Raspberry Piで撮るとやけに暗いし色もおかしい。UDOOだとそれなりにきれいに撮れるのに。uvccapture -vで調べてみた結果、Brightness、Contrast、Saturation、Gainの設定がおかしくなっていた。uvccaptureのソースを読んでみると、コマンドラインから前記のパラメータが指定されていない場合、v4l2ドライバへのioctlコールでパラメータリセットがかかる。そうなると、これがRPi固有の問題か、他のカーネルでも同じかわかんないけど、おかしな設定になってしまう。あとuvccaptureのソースを読んだついでに書いておくと、前記パラメータに0を指定すると無視されてリセットがかかり、やはりおかしな初期値が使われる。これはさすがにバグだと思う。
さて、UDOOを参考に
でもまだ問題が残る。フォーカスである。
カメラの前に被写体として瓶を置いて撮ってみるものの、ピントが合ってない。さてどうしたものかと思っていろいろいじっていると、v4l2-ctlでフォーカスの設定ができそうなことに気づく。
まずはオートフォーカスをオフに。
まずfocus_absoluteに関してわかるのは、値が小さいほど無限遠側、大きいほどマクロ側のフォーカスとなること。それから10~30cm程度の近距離の被写体をうまく収める設定値はなさそう。10~40あたりの範囲で好みを調整するといいかもしれない。
オートフォーカスのときにどういう測距点を使っているのかわかりませんが、ちゃんと撮りたければマニュアルで設定してあげるほうがよさそうです。
C920tは価格.comのWebカメラランキングでも上位にあるのですぐにアンテナにかかりましたが、決め手は
- 最短7cmのとってもマクロな焦点距離
- UVC対応
- ハードウェアH.264エンコード
- 海外のウェブカムハックでよく話に挙がっている
- 三脚雲台ネジ穴
さっそくボードにつないで実験してみるわけですが、ARMボードでの使用となれば、早々簡単にはいかない。uvccaptureで静止画撮影してみたんですが、Raspberry Piで撮るとやけに暗いし色もおかしい。UDOOだとそれなりにきれいに撮れるのに。uvccapture -vで調べてみた結果、Brightness、Contrast、Saturation、Gainの設定がおかしくなっていた。uvccaptureのソースを読んでみると、コマンドラインから前記のパラメータが指定されていない場合、v4l2ドライバへのioctlコールでパラメータリセットがかかる。そうなると、これがRPi固有の問題か、他のカーネルでも同じかわかんないけど、おかしな設定になってしまう。あとuvccaptureのソースを読んだついでに書いておくと、前記パラメータに0を指定すると無視されてリセットがかかり、やはりおかしな初期値が使われる。これはさすがにバグだと思う。
さて、UDOOを参考に
- Brightness: 128
- Contrast: 128
- Saturation: 128
- Gain: 1
でもまだ問題が残る。フォーカスである。
カメラの前に被写体として瓶を置いて撮ってみるものの、ピントが合ってない。さてどうしたものかと思っていろいろいじっていると、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あたりの範囲で好みを調整するといいかもしれない。
オートフォーカスのときにどういう測距点を使っているのかわかりませんが、ちゃんと撮りたければマニュアルで設定してあげるほうがよさそうです。
ラベル:
Linux,
Logicool C920t,
Raspberry Pi,
Ubuntu,
UDOO,
uvccapture,
V4L2,
Webカメラ,
ウェブカメラ
2014年5月13日火曜日
MEncoderで動画変換
streamerコマンドを使って、Linuxコマンドラインでウェブカメラ録画をしてみた(関連記事)けど、うまいことエンコードできず無圧縮AVIのまま保存していたので、ファイルサイズがすごく大きい。
そこで、あとからでも圧縮できないかと思ってちょっと調べてみたところ、とりあえずMEncoderを使ってMPEG2にできた。
mencoderがインストールされていなければ、まずはインストール。
で、AVI→MPEG2の圧縮が
H.264とかもできたらいいなー。オプションとかいろいろ調べてみよう。
そこで、あとからでも圧縮できないかと思ってちょっと調べてみたところ、とりあえず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というツールを使います。インストールされていなければ
で、まずホワイトバランスを含め設定可能なパラメータの一覧を表示。
現在の設定値の取得は
実際にホワイトバランスを設定してみる。オートホワイトバランスを切る必要があるので、white_balance_temperature_auto=0を入れる。で、色温度最低は
あとは昨日書いた下記のコマンドで撮影してみると、違いがわかります。
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.info2014年5月12日月曜日
Linuxコマンドラインでウェブカメラ動画撮影の実験
Raspberry PiのようなARMボードでも、x86マシンでも何でもいいんですが、ウェブカメラで動画撮影しようとして調べると、streamer、mencoder、gstreamer、v4l2-ctl、ffmpeg(avconv)などなど、いろんなツールがあるっぽい。ちょろっと試してみた結果、streamerでとりあえず録画できるやり方があったので、とりあえずメモ。
そこでstreamerのヘルプを見ると
あとホワイトバランスも直さないとな。
なおウェブカメラの設定可能な解像度は下記コマンドで確認可能。
$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f rgb24 avi / video: 24 bit TrueColor (LE: bgr) / audio: none rate: queueing frame twice (18446511) -0.00s [0] ...ただし、このコマンドだと無圧縮AVIになるので、すごくストレージ容量を食う。320x240サイズの10fpsが10秒で25MBくらい。より大きな解像度、高いフレームレート、長い時間で、と考えたら、おそろしいことに。
そこでstreamerのヘルプを見ると
$ streamer -h
...
movie writers:
...
avi - Microsoft AVI (RIFF) format
video formats:
rgb15 15 bit TrueColor (LE) [avi]
rgb24 24 bit TrueColor (LE: bgr) [avi]
mjpeg MJPEG (AVI) [avi]
jpeg JPEG (JFIF) [avi]
...
ということなのでMJPEGを試してみるんですが、$ streamer -c /dev/video0 -o test.avi -t 0:10 -s 320x240 -f mjpeg avi / video: MJPEG (AVI) / audio: none no way to get: 320x240 MJPEG (AVI) movie writer initialisation failedとなってしまう。何が足りないのかな。。
あとホワイトバランスも直さないとな。
なおウェブカメラの設定可能な解像度は下記コマンドで確認可能。
$ uvcdynctrl -d video0 -f
2014年5月7日水曜日
APTパッケージのソースを取得する。Raspberry Piで。
Raspberry PiのOS「Raspbian」で、apt-getでインストールするパッケージのソースを取得する方法。
いま手元で使っているバージョン(2014年1月版のイメージ、カーネル3.10.25+)だと、/etc/apt/sources.listに一行追加してやる必要がありました。
追加できたら、アップデート。
いま手元で使っているバージョン(2014年1月版のイメージ、カーネル3.10.25+)だと、/etc/apt/sources.listに一行追加してやる必要がありました。
$ sudo vim /etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi deb-src http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi #この行を追加これをしないと、「E: sources.list に 'ソース' URI を指定する必要があります」と言われます。
追加できたら、アップデート。
$ sudo apt-get updateあとはお好きなパッケージのソースをお落とし下さいませ、と。
$ apt-get source uvccapture streamer v4l-utils
参考
Raspbian Repository
登録:
コメント (Atom)












