mieki256's diary



2016/08/12(金) [n年前の日記]

#1 [ubuntu] chdkptpをUbuntu上で使えるのか実験

chdkptp なるツールを使うと、CHDKが動いてるCanon製コンパクトデジカメを遠隔操作できる。かもしれないので、試してみたり。

ひとまず、Windows10 x64 + VMware + Ubuntu 16.04 LTS上で動作確認してみたい。

結論というか、注意点だけ先に書いておくと…。

chdkptpの入手。 :

chdkptp は、 _Install | chdkptp Project | Assembla から辿って、おそらく最新版であろう chdkptp-r690-Linux-x86_64.zip をDLしてきた。 _https://www.assembla.com/spaces/chdkptp/documents にアクセスすれば、ファイルが入手できる。Windows版や、Raspberry Pi版もあるみたいですな。

解凍すると、中には以下のファイルが入ってた。
  • chdkptp
  • chdkptp_gui
  • chdkptp-sample.sh
  • その他ドキュメントファイル(テキストファイル)
  • luaフォルダ
chdkptp と chdkptp_gui はバイナリ。chdkptp-sample.sh はシェルスクリプト。この3つのファイルは実行権限がついていた。

任意の場所にコピー。今回は、~/bin/chdkptp というフォルダを作って、そこに入れておいた。

動作に必要なもの。 :

_tudelft/chdkptp によると、動作に必要なものは以下。らしい。
  • IUP version 3.10.1 http://www.tecgraf.puc-rio.br/iup/ (earlier 3.x versions may also work) Optional, edit config.mk to build without IUP GUI support
  • CD Version 5.7 http://www.tecgraf.puc-rio.br/cd/ (earlier 5.x versions may also work) Optional, used for remote display
  • Lua version 5.2 http://www.lua.org/ chdkptp no longer supports Lua 5.1, although it may work
  • LibUSB (libusb-win32 on windows)
  • GNU readline Optional, recommended on Linux
_IUP
_CD
_Lua

Windows環境で動かしたい場合は、LibUSBとやらが必要になるようで。今回は Ubuntu Linux上で動かすから、別途インストールしなくてもヨサゲ。

(※ ちなみに、英語がフツーに読める人なら、上記の英文を眺めて「アレ? IUP や CD は要らないんじゃね?」と気づくだろうけど。自分は英語赤点野郎だから気付かずに無駄な作業を延々と…。)

ところで、IUPって何?

_IUPのインストールで苦労する話 - Qiita によると、どうやら Lua から使えるGUIツールキット、らしい。

すると、CD って何よ?

_CD - A 2D Graphics Library によると、Canvas Draw の略らしい。おそらく、GUIアプリがキャンバスに何かを描くことができるようになるのではないかな。たぶん。

Luaのインストール。 :

何はともあれ、Lua のインストールが必要なのだろう…。インストールするか…。

(※ 後から判明したけど、実はこのインストール作業は要らない。chdkptp の実行バイナリの中に入ってる lua を使えば済むっぽい。)

Ubuntuの場合は、以下でいいのだろうか?
$ sudo aptitude install lua5.2

$ which lua
/usr/bin/lua

$ lua -v
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio

これで本当に Lua がインストールできているのだろうか…。一応、バージョンは表示されてるけど…。

IUP等のビルド。 :

IUPも、CDも、chdkptp をCUIで操作する分には要らないらしいけど、一応GUIで表示してみたかったので、導入できないか試みることに。

(※ 後から分かったけど、「CUIで動かすぞ。GUIなんてイラネ」「つまり IUP も CD も導入する必要無し」てな方針でやったほうが、はるかに楽。なので、この記事のIUPとかCDのあたりは全部読み飛ばしを推奨。)

_Building Lua, IM, CD and IUP in Linux によると、libreadline-dev が必要になるという話も。よく分からんから入れておく。
sudo aptitude install libreadline-dev

IUPをビルドするには以下も必要らしい?
To build IUP you will need:

libgtk2.0-dev (for the GTK driver)
or
libgtk-3-dev (for the GTK driver)
  libmotif-dev and x11proto-print-dev (for the Motif driver, OPTIONAL)
libgl1-mesa-dev and libglu1-mesa-dev (for the IupGLCanvas)
libwebkit-dev or libwebkitgtk-dev (for the IupWebBrowser using GTK 2)
or
libwebkitgtk-3.0-dev (for the IupWebBrowser using GTK 3)

CDをビルドするには以下も必要らしい?
To build CD you will need:

libfreetype6-dev
libgl1-mesa-dev and libglu1-mesa-dev (for the ftgl library used by CD_GL)
libgtk2.0-dev (for the GDK driver)
or
libgtk-3-dev (for the GTK driver)
  libx11-dev (for the X11 driver, OPTIONAL)
  libxpm-dev (")
  libxmu-dev (")
  libxft-dev (for the XRender driver, OPTIONAL)

よく分からんので、とりあえず全部入れてみる…。
sudo aptitude install libgtk2.0-dev libgtk-3-dev libmotif-dev x11proto-print-dev libgl1-mesa-dev libglu1-mesa-dev libwebkit-dev libwebkitgtk-dev libwebkitgtk-3.0-dev libfreetype6-dev libgl1-mesa-dev libglu1-mesa-dev libgtk2.0-dev libgtk-3-dev libx11-dev libxpm-dev libxmu-dev libxft-dev

面倒臭いな。IUPのパッケージって無いのかな…ビルドしないといかんのだろうか…。でもまあ、ひとまずビルドに挑戦してみるか…。

_IUP - Browse /3.19.1/Docs and Sources at SourceForge.net から、iup-3.19.1_Sources.tar.gz をDL。

とりあえず、~/packages というフォルダを作って作業することにした。iup-3.19.1_Sources.tar.gz をコピーしてきて、解凍。
tar xpvzf iup-3.19.1_Sources.tar.gz

ビルドしてみよう。
cd iup
make
エラーが出た。CD が入ってないとダメっぽいな…。これはおそらく、 _解説ページ にある、imとやらも入れないとダメなんだろうな。imって何なのか分かってないけど。

_IM - An Imaging Tool

im = Imageing Toolの略か…。

何にせよ、im と cd と iup のソースを落としてきて、順々にビルドしないといかんのだな。(※ 後で分かったけど、iup は cd に依存していて、cd は im に依存しているらしい。)

ならばと、以下のファイルをDL。
lua-5.3.3_Sources.tar.gz
im-3.11_Sources.tar.gz
cd-5.10_Sources.tar.gz
iup-3.19.1_Sources.tar.gz
_IM - Browse Files at SourceForge.net
_CD - Browse Files at SourceForge.net
_IUP - Browse Files at SourceForge.net

~/packages の中で、全部解凍。
tar zxpvf lua-5.3.3_Sources.tar.gz
tar zxpvf im-3.11_Sources.tar.gz
tar zxpvf cd-5.10_Sources.tar.gz
tar zxpvf iup-3.19.1_Sources.tar.gz

imからビルド。
cd im/src
make
「lua.h がねえよ! 見つからねえよ!」と、エラーが出た…。そこからか…。そこからビルドしないとダメか…。

liblua5.2-dev をインストールすればどうにかならないか。
sudo apt-get install liblua5.2-dev
インストールしてみたけど、やっぱり lua.h が無いと怒られる。

lua5.3 と liblua5.3-dev をインストールしたら変わってこないか。
sudo aptitude install lua5.3 liblua5.3-dev
変わらねえや。

_前述の解説記事 を眺めると、デフォルトでは lua5.1 が対象になっているらしい。lua5.2 や lua5.3 を使う時は環境変数?を設定しろ、と書いてあったので試してみる。
export USE_LUA_VERSION=53
この状態で make してみたら、警告は大量にでるものの、状況が改善した。どうやら im のビルドは通った。かもしれない。

次は cd をビルド。
cd ../../cd/src
make
しかし、「ftgl.h が無い」と怒られる…。

Ubuntuのパッケージに、ftgl-devというのがあるっぽい。インストールしてみる。
sudo aptitude install ftgl-dev
この状態なら、cd のビルドもできたっぽい。

今度こそ iup のビルドをしてみる。
cd ../../iup
make
「../../lua53/lib/Linux44_64/liblua53.a がねえよ!」とエラーが出た。

再度、 _前述の解説記事 を眺めると、Ubuntuの場合は、/usr/include/lua5.x にパッケージをインストールした時のアレコレが入ってるのでそこを指定しろ、とも書いてあるように見える。
export LUA_SUFFIX=
export LUA_INC=/usr/include/lua5.3
export USE_LUA_VERSION=53
あるいは
export LUA_SUFFIX=
export LUA_INC=/usr/include/lua5.2
export USE_LUA_VERSION=52

この状態で iup を make してみたけど、やっぱり liblua53.a がねえよ、とエラーが出た。

ダメだ。分からん。

ビルドは諦めてバイナリを使う。 :

_Building Lua, IM, CD and IUP in Linux によると、cd や iup に関してはバイナリもあるらしいので、ソレを落としてみる。最初からそうすればよかったのでは…。

しかしコレ、Linuxのカーネルバージョン?と一致したバイナリが無ければ、やっぱりビルドしないといけないことになるのでは。まあ、今回は、一致したバージョンがあるから試せるけど。

_IM - Browse Files at SourceForge.net
_CD - Browse Files at SourceForge.net
_IUP - Browse Files at SourceForge.net

バージョン番号 → Linux Libraries → Lua52 と辿って、以下の3ファイルをDL。
im-3.11-Lua52_Linux44_64_lib.tar.gz
cd-5.10-Lua52_Linux44_64_lib.tar.gz
iup-3.19.1-Lua52_Linux44_64_lib.tar.gz

~/packages 以下に binary というフォルダを作って、上記3ファイルを移動して解凍。
cd ~/packages/binary
mkdir im
mkdir cd
mkdir iup
cd im
tar zxpvf im-3.11-Lua52_Linux44_64_lib.tar.gz
cd ../cd
tar zxpvf cd-5.10-Lua52_Linux44_64_lib.tar.gz
cd ../iup
tar zxpvf iup-3.19.1-Lua52_Linux44_64_lib.tar.gz
cd ..
解凍すると、それぞれの中に *.so が入ってた。

システムディレクトリ、/usr/lib 以下にコピーする。…コピーしちゃってええんかいな?
sudo cp im/*.so /usr/lib
sudo cp cd/*.so /usr/lib
sudo cp iup/*.so /usr/lib
もし、強制上書きしたい時は、sudo cp -f 〜/*.so /usr/lib のように指定。

これで必要なファイルは入ったはずだ…。

デジカメをPCに接続。 :

いよいよデジカメをPCに接続する。

デジカメ上でのCHDKの起動の仕方は、 _2014/12/21の日記 でメモしてあった。ただし、これは Canon PowerShot A3300 IS の場合で、他の機種は微妙に違う起動方法になると思う。

CHDKが動いてる状態で、PCのUSB端子に、いきなり繋ぐ。デジカメの液晶画面が消えて真っ暗になる。

VMware上で動いてる Ubuntu から、USB接続されたデジカメが認識できているか、lsusb と打って確認。Canon なんたら、とデジカメ名が表示されるはず。

chdkptpを起動。 :

ひとまず chdkptp を起動してみる。
./chdkptp
または
./chdkptp_gui
色々とエラーが出た。main が見当たらないとかなんとか。

どうやら、chdkptp や chdkptp_gui を直接呼び出しても動かないらしい…? chdkptp-sample.sh を実行すると動くっぽい。

ただ、chdkptp-sample.sh の中の CHDKPTP_DIR= の行で、chdkptp が入ってるフォルダの場所を指定しているので、そこを自分の環境に合わせて修正しないといけない。修正後、以下を実行。
./chdkptp-sample.sh
おそらく、chdkptp-sample.sh の中で環境変数を色々設定してるあたりが肝なのだろう…。LUA_PATH と LD_LIBRARY_PATH を適切に設定せよ、ということじゃないのかなと…。

ちなみに、GUIで動かしてみようと ./chdkptp-sample.sh -g と打ってみたが、「GUIはサポートしてないんだよね」と言われてしまった。 GUI表示ができないなら…IUP等のインストール作業は何だったのか…。CUIでしか使えないなら、IUPのビルドやインストールは要らなかったのでは…。

てなわけで、最初から「CUIしか使わんもんね」的方針でやったほうが全然楽だったなと。

とりあえず、chdkptp が CUI で起動してる状態で…。
  • h (あるいは help) と打てば、ヘルプが表示される。
  • q (あるいは quit) と打てば、chdkptp が終了。
  • c (connect) と打てば、デジカメと接続できる。
  • dis (disconnect) と打てば、デジカメとの接続を切断できる。
  • list と打てば、接続されてるデジカメの一覧が表示される。デジカメが接続されてる時と、切断されてる時で、結果表示が異なる。
  • rec と打てば、撮影モードになる。レンズがニョキッと出てきた。

そして、shoot と打てば撮影できそうだが…。打ってみたらエラーが。しかも、デジカメの電源が勝手に切れてしまった。

ひょっとして CHDKのバージョンが古いのだろうか。

CHDKをアップデート。 :

デジカメ側のCHDKが古いのではと疑って、現行版をDLして試してみた。

_Downloads - CHDK Wiki - Wikia

自分の環境では今まで 1.3.0 を入れてたようだけど、今回は 1.4.1 Complete版を入手。自分の持ってる機種は、Canon PowerShot A330 IS、ファームウェアは100Cなので、a3300-100c-1.4.1-4672-full.zip をDLした。

解凍して、デジカメ側で使うSDカードのルートフォルダにコピー。

再度chdkptpを試す。デジカメ側のCHDKを起動して、PCに繋いで、chdkptp で同じように操作してみたものの、やはり shoot と打つと落ちる。

以下のようなメッセージが表示されてる。
unexpected packet type 0x5f65
ERROR: bad parameter
どうやら CHDK のバージョンが古い点は関係なかった模様。

VMwareではなく実機に繋いでみる。 :

もしかして、VMware上で試しているから問題が起きるのだろうか…?

ならばと、足元で埃を被っていた、Ubuntu 14.04 LTS が入ってるサブPCに繋いで試してみたり。

結果が少し変わってきた。
$ ./chdkptp-sample.sh
___> list
-1:Canon PowerShot A3300 IS b=002 d=005 v=0x4a9 p=0x3223 s=0042123855B44E4D94E8AE37E09C760B
___> c
connected: Canon PowerShot A3300 IS, max packet size 512
con> list
*1:Canon PowerShot A3300 IS b=002 d=005 v=0x4a9 p=0x3223 s=0042123855B44E4D94E8AE37E09C760B
con> rec
con 1> shoot
ERROR: I/O error
___> list
___>
packet typeがおかしいとは言われなくなった。しかし I/O Error と返ってきた。そしてやっぱり、デジカメ側の電源が落ちた。うーん。

動かなかった原因が判明。 :

解決策をググってるうちに、「LinuxでUSBデバイスを使うにはroot権限が必要」という話を見かけた。…もしかして、ソレ?

root になって chdkptp を動かしてみる。
$ sudo ./chdkptp-sample.sh
___> list
-1:Canon PowerShot A3300 IS b=002 d=009 v=0x4a9 p=0x3223 s=0042123855B44E4D94E8AE37E09C760B
___> c
connected: Canon PowerShot A3300 IS, max packet size 512
con> list
*1:Canon PowerShot A3300 IS b=002 d=009 v=0x4a9 p=0x3223 s=0042123855B44E4D94E8AE37E09C760B
con> rec
con 1> shoot
con 2> remoteshoot
con 5> dis
___> list
-1:Canon PowerShot A3300 IS b=002 d=009 v=0x4a9 p=0x3223 s=0042123855B44E4D94E8AE37E09C760B
___> q
おお。撮影できた。

そういうオチか…。rootになって chdkptp を動かさないといかんのだな…。

ちなみに、remoteshoot コマンドによって、Ubuntu側に保存された画像ファイルは、所有者が root になってた。デジカメ内に保存したほうが、その後の画像ファイルの扱いは楽、ってことかな…。いや、そもそも chdkptp を使って遠隔操作するにはroot権限が必要なのだから、そのあたりは関係ないか。

何にせよ、これで、少し古いCanon製コンパクトデジカメを持ってるならPC側から遠隔操作可能だよ、と分かった。さて、何に使えるだろう。夢が広がりんぐ。

もっとも、デジカメ側のバッテリーの問題や、連続稼働による熱の問題はあるのだけど。

VMware上でもう一度試してみた。 :

root権限で実行すれば VMware + Ubuntu上でも動いてしまったりしないか。と思えてきたので試してみたけど、ダメだった。こんな感じのメッセージが。
con 1> remoteshoot
unexpected packet type 0x5f62
WARNING: capture_get_data error bad parameter
WARNING: error waiting for shot script nil
ERROR: bad parameter uninit I/O error
どうやら実機じゃないとダメっぽいなと。

ひょっとして、VMwareは、Windowsが使ってるドライバを経由して、USBデバイスを扱うのではないかしらん。だとすれば、Windows上に LibUSB とやらをインストールして、その上で VMware を動かして、とかやってみたら動くのかもしれない。もっともソレなら、Windows上で chdkptp を直接動かしたほうが早くね? という話になりそうな。

udevとやらも関係してるらしい。 :

一般ユーザでもUSB接続されたデジカメにアクセスするためには、udev だか rules だかが関係してくるらしい。

_udevでデバイスファイルのパーミッション制御 - ゆるゆると
_libusb のデバイスを udev ルールで root 以外にアクセス許可する方法 - 私の二次記憶

以上です。

過去ログ表示

Prev - 2016/08 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project