投稿者「mod_poppo」のアーカイブ

Raspberry Pi と gPhoto2 で一眼レフを叩く

Raspberry Pi (Arch Linux インストール済み)に一眼レフをUSBで繋いで制御してみよう。

gPhoto2のインストール

# pacman -S gphoto2

違うディストリ/パッケージマネージャーでも、何かしら gphoto2 みたいなパッケージはあると思う。

簡単な使い方

接続されたデバイスの一覧を見る:

$ gphoto2 --list-ports
Devices found: 3
Path                             Description
--------------------------------------------------------------
ptpip:                           PTP/IP Connection               
usb:001,005                      Universal Serial Bus            
usb:001,003                      Universal Serial Bus            

機種名を表示:

$ gphoto2 --auto-detect
Model                          Port
----------------------------------------------------------
Canon EOS 600D                 usb:001,005

EOS 600DというのはEOS Kiss X5のことで、同じ製品でも日本と海外で名前が違うとかいうアレだ。

パーミッションの罠

では、 gphoto2 --summary でもっと詳しい情報を取得してみよう。

$ gphoto2 --summary

*** Error ***
An error occurred in the io-library ('I/O problem'): No error description available
*** Error (-7: 'I/O problem') ***

For debugging messages, please use the --debug option.
Debugging messages may help finding a solution to your problem.
If you intend to send any error or debug messages to the gphoto
developer mailing list <gphoto-devel@lists.sourceforge.net>, please run
gphoto2 as follows:

env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --summary

Please make sure there is sufficient quoting around the arguments.

なんかエラーが出た。

しかし、このエラーはハードウエアの問題とかgPhoto2の問題ということとも限らない。なぜなら、

$ sudo gphoto2 --summary

としてみたり、

$ lsusb | grep Canon
Bus 001 Device 005: ID 04a9:3218 Canon, Inc. EOS 600D / Rebel T3i (ptp)
$ ls -l /dev/bus/usb/001/005
crw-rw-r-- 1 root root 189, 4 Feb 14 18:23 /dev/bus/usb/001/005
$ sudo chgrp users /dev/bus/usb/001/005
$ gphoto2 --summary

みたいな感じで /dev/bus/usb/ほにゃらら/ほにゃらら のグループを変えてやるとうまくいく。つまり、USBデバイスのパーミッション的な問題だということだ。

そこで、 udev の設定をいじる。Arch WikiのDigital Camerasのページを参考にして、

# groupadd camera
# /usr/lib/libgphoto2/print-camera-list udev-rules version 175 group camera > /etc/udev/rules.d/40-gphoto.rules
# usermod -a -G camera (自分)

みたいなことをやったらうまくいった。(自分の環境だと 40-gphoto.rules というファイルは /usr/lib/udev/rules.d/40-gphoto.rules に既に存在したが、/etc/udev/rules.d/ に同名のファイルを置くとそっちの方が優先される。この辺は man udev を参照。)

設定を変えた後は再起動が必要かもしれない。

簡単な使い方その2

gPhoto2 で写真を撮ってみる:

$ gphoto2 --capture-image

写真を撮影&ダウンロード:

$ gphoto2 --capture-image-and-download

頑張れば露出とかシャッター速度とかいろいろ設定できそうだが、そういうのはまた今度。

Raspberry Pi じゃなくても

gPhoto2は別にRaspberry Piじゃなくても普通のLinuxとかあるいはOS Xでも動くのだが、お節介なリッチなデスクトップ環境とかが入っていると、そっちの方にカメラの制御権(?)を奪われてしまう場合があるので注意しよう。

~/.ssh/config

SSHでリモートホストにログインする際、ホストごとにユーザー名とかポート番号が違って(覚えるのが)面倒くさい!

$ ssh hoge@example.net
$ ssh -p 10022 user@example.com
$ ssh user2@192.168.11.5

そんなときは、 ~/.ssh/config を記述すれば、ホストごとにデフォルトのユーザー名とポート番号などを指定できる。

# User を指定
Host example.net
User hoge

# User と Port を指定
Host example.com
User user
Port 10022

# HostName で実際に接続するホスト名/IPアドレスを指定することもできる
Host hoge
HostName 192.168.11.5
User user2

書き方とかは man 5 ssh_config を参照。あるいはググればいろいろ用例が出てくる。

実は常識だったりするのかもしれないが、知らなかったのでメモしておく。

C言語の可変長引数マクロで擬似オーバーロード

C99で導入されたプリプロセッサマクロの可変長引数を使って、引数の個数によるオーバーロードっぽいことをするメモ。

参考:

可変長引数の部分への実引数が0個というのはC言語の規格的にはナシなので、引数が0個の場合には対応しない。(幾つかのコンパイラでは引数が0個でも通るが…)

GCCの場合に0個の引数を処理したい場合、GCC拡張の , ## __VA_ARGS__ みたいなやつを使うといい感じになる。

VC++で

#define CHOOSE(a0,a1,...)
#define hoge(...) CHOOSE(__VA_ARGS__)

という風に書くと、 __VA_ARGS__ の部分が一つの引数(a0)として関数型マクロに渡ってしまうので、ここに書いたコードでは CHOOSECHOOSE2 という風にもう一段階噛ませている。

C11の _Generic とかを使えば引数の型によるオーバーロードもできそうだ。先例:

FlashAirで遊ぶ — SPIでIOボードを制御

前回はFlashAirに直接LEDをつないでLEDを制御したが、今度は秋月のFlashAir DIP IOボードキットを介してLEDを制御してみよう。

用意するもの

続きを読む

0の0乗

「0の0乗」については、数学をやっている人とそうじゃない人で割と認識に差がありそうだと思う。そこで、(まだ青二才の学生ではあるが)数学をやっている者の端くれとして思うことを書いておく。

まず、(たぶん)世間でよく言われている「0の0乗を1とすべき理由」と「0の0乗が不定となる理由」について述べ、それを踏まえて、数学をやる上での「それでも0の0乗を1とする理由」を述べる。 続きを読む

家のネットワーク環境を整えた話

最近、NASを買ったり無線LANルーターを新しくした。そこで、新しい機器の導入によって良くなったこととかを日記として書いておく。NASのレビューと無線LANルーターのレビューとVPNについてのあれこれとIPv6についてのあれこれが混ざっているが、日記なのでしょうがない。

この記事はチュートリアルとかではないので、「こういう環境でコレを導入して適切に設定したらうまくいった」とは書いても「適切な設定」の手順は書かない。

続きを読む

Keynoteのリモート操作

Keynoteで発表するとき、ずっとMacの前に立っているのもアレなので、リモコンで制御したい。

昔のMacにはApple Remote用の赤外線受光部があって、Keynoteを操作できた。しかし、今のMac(Mac miniは例外か)からはそういうのは消えて、Apple RemoteはApple TV専用みたいな感じになってしまった。

今はiPhoneやiPadのKeynoteアプリを使って遠隔操作するのが標準的な方法(?)のようだ。リモート操作だけではなくて、iPhoneの画面で発表者ノートとかも見れる。便利だ!

…と言いたいところだが、

  • iPhone/iPadを持っていない
  • iPadは持っているが、でかいので片手で持てない
  • 触感のないタッチパネルではなくて、物理的なボタンのついたリモコンが欲しい(リモコンの操作をするのに手元を見たくない)

という理由で、物理的なリモコンが使いたいという人もいるだろう。

そこで、赤外線受光部を搭載しないMacで、物理的なリモコンを使ってKeynoteを操作することを考えてみよう。
続きを読む

「脱背理法」のまやかしとウソ

「脱背理法」とは

わざわざここでは説明しない。もしこれを読んでいる貴方が「脱背理法」を知らないのであれば、その状態がきっと幸せなので、無理に知ろうとしない方が良い。

続きを読む