はじめに
投稿「Raspberry PI で Lepton3.x を使う」のその後です。
[前置き] PullRequestの状態(2019/10上旬)
私が出した PullRequest の状態は Pending です。
原因は特定できていないのですが、
Lepton 3.x(SPI)から取得したデータの状態が良くない。
「SegmentNumber を取得できる」ときもあれば、
「取得できない」ときもある(詳細は、PullRequestに関する追加情報を見てください)
Lepton 3.x は、SPI から4回連続(segment1~4)でデータ取得することで
ひとつの画面を構成できるので、途中1回でもSegmentNumberの取得に失敗すると
見れたもんじゃない画面表示となってしまう。
私のコードが原因ではないと思うんだが
たぶんこれを解決しなければ merge されないと思う。
しかし今のままでは解決は無理と思う。
[ここから本題] 前回は応急対応
残念なことに、GitHubで提供されているソースファイルは Qt依存で書かれている。
「Qtも使える」設計であればよかったのだが**「Qtしか使えない」のは不便**だが、
Lepton 3.x 対応を受け入れ(mergeし)てもらうためにも、このコードをベースに修正した。
より使いやすくなるように修正(したつもり)
取り入れてもらえるかは不明ですが PullRequestは、
とりあえず自分が普段使う環境で Lepton 3.x で使えることが確認できた状態。
機能そのまま変更せず Qt との結合度を低くする修正を加えたのが以下のブランチ
-
https://github.com/higuchi-toshio-intec/LeptonModule/tree/reduce_qt_dependencies
-
主な修正箇所
- LeptonThread.cpp から Lepton.cpp を分離
- LeptonThread.cpp に、Qt 関連のコードを残した
- Lepton.cpp には、Qt に関するコードは含まれていない
- インターフェース 'LeptonAction' を定義/実装
- LeptonAction.cpp
- LeptonActionQt.cpp
- LeptonThread.cpp から Lepton.cpp を分離
自分が使いやすいように修正
自分の要望は、以下の通り
- 定点観測みたいな一定間隔で撮影(動画で無くて可)
- 画像ファイル(PNG)で保存
- できれば一般ユーザで実行(sudo 不要)
そのようにして出来たのが以下のブランチ
※ raspberrypi_video じゃなく raspberrypi_capture を最初から使えば良かったのでは?との指摘はご遠慮願います(汗)
実行
- PNG 形式で保存
- 保存ディレクトリは、${HOME}/png
- コマンド実行後、2秒待ってから撮影開始
- 5秒間隔で撮影
- 5回撮影
$ export LEPTON_PNG_DIR=${HOME}/png
$ mkdir ${LEPTON_PNG_DIR}
$ ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000 -ims 5000 -dms 2000 -c 5
- ヘルプ表示
$ ./raspberrypi_video -h
Usage: raspberrypi_video [OPTION]...
-h display this help and exit
-cm x select colormap
1 : rainbow
2 : grayscale
3 : ironblack [default]
-tl x select type of Lepton
2 : Lepton 2.x [default]
3 : Lepton 3.x
[for your reference] Please use nice command
e.g. sudo nice -n 0 ./raspberrypi_video -tl 3
-ss x SPI bus speed [MHz] (10 - 30)
20 : 20MHz [default]
-min x override minimum value for scaling (0 - 65535)
[default] automatic scaling range adjustment
e.g. -min 30000
-max x override maximum value for scaling (0 - 65535)
[default] automatic scaling range adjustment
e.g. -max 32000
-d x log level (0-255)
-dms x delay time [milliseconds] (0 - 65535)
[default] 0
-ims x interval [milliseconds] (1 - 65535)
-c x count (0 - 65535)
0 : endless
[default] take one shot
Environment variable(s)
LEPTON_PNG_DIR
make png file(s) in this directory
PullRequestに関する追加情報
Qt 依存低減シンプル版
今回の修正の途中で、Qt を使わず、Lepton(SPI)からデータのみ読み込むだけのブランチを作ってみました。
-
https://github.com/higuchi-toshio-intec/LeptonModule/tree/reduce_qt_dependencies_simple
- 単純に SPI からデータを読み込み
- SegmentNumber を表示
-
実行結果は、こんな感じ
- 規則正しくデータは取得できている
- SegmentNumber は、「0 が4連続」と「1から4までの連続」が交互に繰り返している
$ ./raspberrypi_video -tl 3 -cm 1 -min 30000 -max 32000
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
001234000012340000123400
ちなみに、Qt 版は、こちら
- https://github.com/higuchi-toshio-intec/LeptonModule/tree/support_lepton3_logs
- 実行結果は、こんな感じ
- 繰り返しはみられるが、規則正しくはない
- SegmentNumber は、「0 が4連続」と「何らかの値が4回」が交互に繰り返しているように見える
- SegmentNumber は、「1から4までの連続」することは数少ない
0000234000012340000123400001
11:10:15 : 23000023000023000023000023000023
11:10:16 : 000023000023000023000023000023000023
11:10:16 : 000023000023000023000023000023000023
11:10:17 : 0000230000230000230000200001200001200001
11:10:18 : 200001200001200001200001200001200001
11:10:19 : 200001200001200001200001400001400001
11:10:19 : 400001400001400001400001400001400001
11:10:20 : 40000140000140000123000023400001
11:10:20 : 2300002340000123000023400001
11:10:21 : 2300002300002340000123000023
11:10:21 : 4000012340000123000023400001
11:10:22 : 234000012340000123000023
11:10:22 : 4000012300002340000123000023
11:10:23 : 4000012300002340000123400001
11:10:23 : 2300002340000123000023400001
11:10:24 : 200001234000012340000123
11:10:24 : 0000234000012300002340000123
11:10:24 : 4000012340000123400001200001
最後に
- Qt の処理が何らかの影響を及ぼしていると思われる
- Qt の不具合などではなく、処理負荷などが相互的に悪影響を及ぼしている
- 自分は Qt を必要としないので、とりあえず現状ブランチでOK
- 既存のブランチを整理し、新たにdevelop(my_master)ブランチをつくり育てようと思う。
- いま出している PullRequest が merge されれば、以降の修正も PullRequest する予定です。
- 最新のブランチ(develop)です
https://github.com/higuchi-toshio-intec/LeptonModule/tree/develop