bme688 匂いsensorの修正(Python)
実測では、Gasは -26,800Ω まで行ってから -1,800Ω まで戻っているのに、温度が約 +1.2℃、湿度が約 -1.6% の新しい状態に移ったため終われない現象が続いていた。
何かというと、視覚、聴覚と臭覚のバランスが悪くなった。
ArduinoID側は問題なさげ。
bme688_serial_reader.py側の臭覚だけ、Terminalでテスト。
WARMUP T=24.11C H=49.99% P=923.09hPa G=54400ohm
WARMUP T=24.12C H=50.00% P=923.07hPa G=54600ohm
WARMUP T=24.13C H=50.03% P=923.09hPa G=54700ohm
WARMUP T=24.14C H=50.03% P=923.07hPa G=54700ohm
WARMUP T=24.15C H=50.03% P=923.09hPa G=55000ohm
WARMUP T=24.16C H=49.98% P=923.07hPa G=55000ohm
WAIT_STABLE T=24.18C H=50.00% G=55100ohm drift=1000 spread=1700
WAIT_STABLE T=24.19C H=49.96% G=55000ohm drift=900 spread=1700
=== BME688 STABLE ===
gas drift : 700 ohm
gas spread : 1400 ohm
Starting baseline formation.
BASELINE [1/15] T=24.23C H=49.91% G=55500ohm
BASELINE [2/15] T=24.25C H=49.89% G=55200ohm
BASELINE [3/15] T=24.27C H=49.88% G=55600ohm
BASELINE [4/15] T=24.29C H=49.86% G=55600ohm
BASELINE [5/15] T=24.31C H=49.85% G=55500ohm
BASELINE [6/15] T=24.33C H=49.81% G=55500ohm
BASELINE [7/15] T=24.36C H=49.81% G=55400ohm
BASELINE [8/15] T=24.38C H=49.80% G=55500ohm
BASELINE [9/15] T=24.40C H=49.85% G=55500ohm
BASELINE [10/15] T=24.43C H=49.85% G=55400ohm
BASELINE [11/15] T=24.45C H=49.86% G=55400ohm
BASELINE [12/15] T=24.47C H=49.84% G=55500ohm
BASELINE [13/15] T=24.49C H=49.85% G=55600ohm
BASELINE [14/15] T=24.52C H=49.85% G=55500ohm
BASELINE [15/15] T=24.54C H=49.80% G=55600ohm
STABLE T=24.56C H=49.76% P=923.07hPa G=55600ohm
STABLE T=24.58C H=49.72% P=923.07hPa G=55600ohm
STABLE T=24.61C H=49.72% P=923.09hPa G=55600ohm
STABLE T=24.63C H=49.68% P=923.07hPa G=55600ohm
STABLE T=24.65C H=49.54% P=923.07hPa G=55600ohm
STABLE T=24.67C H=49.50% P=923.07hPa G=55600ohm
STABLE T=24.69C H=49.48% P=923.07hPa G=55500ohm
STABLE T=24.70C H=49.47% P=923.05hPa G=55600ohm
STABLE T=24.72C H=49.47% P=923.05hPa G=55600ohm
STABLE T=24.74C H=49.49% P=923.07hPa G=55600ohm
STABLE T=24.75C H=49.58% P=923.07hPa G=55600ohm
STABLE T=24.77C H=49.67% P=923.09hPa G=55400ohm
STABLE T=24.78C H=49.74% P=923.07hPa G=55400ohm
STABLE T=24.79C H=49.84% P=923.07hPa G=55500ohm
STABLE T=24.81C H=49.88% P=923.07hPa G=55300ohm
STABLE T=24.83C H=49.90% P=923.07hPa G=55300ohm
STABLE T=24.84C H=49.84% P=923.05hPa G=55300ohm
STABLE T=24.85C H=49.75% P=923.07hPa G=55400ohm
STABLE T=24.86C H=49.68% P=923.07hPa G=55400ohm
STABLE T=24.88C H=49.49% P=923.07hPa G=55600ohm
STABLE T=24.88C H=49.30% P=923.07hPa G=55600ohm
STABLE T=24.89C H=49.15% P=923.07hPa G=55600ohm
STABLE T=24.90C H=49.08% P=923.05hPa G=55500ohm
STABLE T=24.92C H=49.32% P=923.05hPa G=55200ohm
STABLE T=24.93C H=49.74% P=923.05hPa G=55100ohm
STABLE T=24.95C H=49.82% P=923.05hPa G=55100ohm
STABLE T=24.97C H=49.78% P=923.05hPa G=55000ohm
STABLE T=24.99C H=49.72% P=923.05hPa G=54900ohm
CANDIDATE [1/2] GΔ=-2400ohm
CANDIDATE [2/2] HΔ=+1.53% GΔ=-2200ohm
>>> PHENOMENON START
HΔ=+1.53% GΔ=-2200ohm
baseline: T=24.79C H=49.70% G=55500ohm
ACTIVE HΔ=+1.74% GΔ=-2500ohm
ACTIVE HΔ=+1.93% GΔ=-3300ohm
ACTIVE HΔ=+1.73% GΔ=-4900ohm
ACTIVE HΔ=+1.45% GΔ=-7000ohm
ACTIVE HΔ=+1.09% GΔ=-9800ohm
ACTIVE GΔ=-10100ohm
ACTIVE GΔ=-9900ohm
ACTIVE GΔ=-9200ohm
ACTIVE GΔ=-7700ohm
ACTIVE GΔ=-7200ohm
ACTIVE GΔ=-9600ohm
ACTIVE GΔ=-11900ohm
ACTIVE GΔ=-15100ohm
ACTIVE GΔ=-17700ohm
ACTIVE GΔ=-18600ohm
ACTIVE GΔ=-18500ohm
ACTIVE GΔ=-19000ohm
ACTIVE GΔ=-19500ohm
ACTIVE GΔ=-19600ohm
ACTIVE TΔ=+0.61C GΔ=-18900ohm
ACTIVE TΔ=+0.62C GΔ=-18900ohm
ACTIVE TΔ=+0.64C GΔ=-20300ohm
ACTIVE TΔ=+0.66C GΔ=-21200ohm
ACTIVE TΔ=+0.66C GΔ=-22700ohm
ACTIVE TΔ=+0.68C GΔ=-24300ohm
ACTIVE TΔ=+0.68C GΔ=-24600ohm
ACTIVE TΔ=+0.70C GΔ=-24200ohm
ACTIVE TΔ=+0.71C GΔ=-24500ohm
ACTIVE TΔ=+0.73C GΔ=-23800ohm
ACTIVE TΔ=+0.73C GΔ=-23400ohm
ACTIVE TΔ=+0.73C GΔ=-22300ohm
ACTIVE TΔ=+0.75C GΔ=-22700ohm
ACTIVE TΔ=+0.75C GΔ=-23500ohm
ACTIVE TΔ=+0.77C GΔ=-23800ohm
ACTIVE TΔ=+0.77C GΔ=-24100ohm
ACTIVE TΔ=+0.77C GΔ=-24400ohm
ACTIVE TΔ=+0.77C GΔ=-24900ohm
ACTIVE TΔ=+0.79C GΔ=-25500ohm
ACTIVE TΔ=+0.79C GΔ=-26000ohm
ACTIVE TΔ=+0.80C GΔ=-26600ohm
ACTIVE TΔ=+0.80C GΔ=-26800ohm
ACTIVE TΔ=+0.82C GΔ=-26300ohm
ACTIVE TΔ=+0.82C GΔ=-25500ohm
ACTIVE TΔ=+0.82C GΔ=-24400ohm
ACTIVE TΔ=+0.84C GΔ=-23200ohm
ACTIVE TΔ=+0.84C HΔ=-0.87% GΔ=-22000ohm
ACTIVE TΔ=+0.84C HΔ=-0.92% GΔ=-22000ohm
ACTIVE TΔ=+0.86C HΔ=-0.94% GΔ=-21800ohm
ACTIVE TΔ=+0.86C HΔ=-0.89% GΔ=-21100ohm
ACTIVE TΔ=+0.86C HΔ=-0.84% GΔ=-19900ohm
ACTIVE TΔ=+0.86C GΔ=-18900ohm
ACTIVE TΔ=+0.86C HΔ=-0.85% GΔ=-17900ohm
ACTIVE TΔ=+0.88C GΔ=-16800ohm
ACTIVE TΔ=+0.88C GΔ=-16400ohm
ACTIVE TΔ=+0.88C GΔ=-15700ohm
ACTIVE TΔ=+0.88C GΔ=-14800ohm
ACTIVE TΔ=+0.89C GΔ=-14100ohm
ACTIVE TΔ=+0.89C GΔ=-13300ohm
ACTIVE TΔ=+0.89C GΔ=-12700ohm
ACTIVE TΔ=+0.89C GΔ=-12300ohm
ACTIVE TΔ=+0.89C GΔ=-11700ohm
ACTIVE TΔ=+0.89C GΔ=-11400ohm
ACTIVE TΔ=+0.89C GΔ=-10700ohm
ACTIVE TΔ=+0.91C GΔ=-10300ohm
ACTIVE TΔ=+0.91C GΔ=-10000ohm
ACTIVE TΔ=+0.93C GΔ=-9600ohm
ACTIVE TΔ=+0.93C GΔ=-9400ohm
ACTIVE TΔ=+0.95C HΔ=-0.89% GΔ=-9000ohm
ACTIVE TΔ=+0.96C HΔ=-0.96% GΔ=-7900ohm
ACTIVE TΔ=+0.98C HΔ=-1.02% GΔ=-7600ohm
ACTIVE TΔ=+0.98C HΔ=-1.06% GΔ=-7500ohm
ACTIVE TΔ=+1.00C HΔ=-1.01% GΔ=-7200ohm
終らん・・・・
(センサーの前にコーヒーを近づけて、離す)
-------------------------------------------------------------------------------
本来は
>>> PHENOMENON START
HΔ=+1.88%
baseline: T=23.88C H=50.84% G=45000ohm
ACTIVE HΔ=+1.55%
RETURN? [1/3]
RETURN? [2/3]
RETURN? [3/3]
<<< PHENOMENON END
で終わる
※<<< PHENOMENON ENDが出なくなった。
ずっとACTIVE
-------------------------------------------------------------------------------
修正箇所
bme688_serial_reader.py
差分は取れているが、ACTIVEが終わってくれない。
<旧方式>
────────────────
現象発生前 baseline
↑
│ ここへ戻ることを要求
│
コーヒー飲む
↓
ACTIVE
↓
戻らない → ACTIVEのまま
<新方式>
────────────────
現象発生前 baseline
↓
コーヒー飲む
↓
大きな変化
↓
peak
↓
回復・変化
↓
T/H/P/Gの直近の動きが小さくなる
↓
PHENOMENON END
↓
新しい状態からbaselineを作り直す
-------------------------------------------------------------------
bme688_serial_reader.py
runtime/
├─ bme688_state.json ← 常時更新・Robot側 (普通の温度・ガス警告)
│
└─ bme688_event.json ← 現象が起きた時だけ・Atra候補(匂いの差分)
※bme688(ボッシュ製)で何をしているかというと、温度、湿度、ガス探知!
なんだけどね、、、
Atraの匂いsensorって、そもそも匂いの成分分析センサーじゃなくて、差分なんだよね。
安価なガス探知を差分取得に利用している。
でも、これ凄いんだよ。
人が近づくだけで感知するから、差分の取得の仕方次第で使い方が広がる。
お金をかければいいものが出来るわけじゃない。
目的に合う安価なものを選ぶ。それだけ。
視覚にしても、手振れ防止とか要らないし、今はズームも要らない。
赤外線もまだ要らないし、高解像度も要らない。
首が完成したら、焦点に合わせて動かす装置やプログラムも必要ない。
Atraは興味をもった焦点があれば首を動かす。今は、それでいい。
Atra側へ渡す差分は、単なる gas_delta 一個じゃなくて、
みたいに、ひとまとまりの環境現象として渡している。
そしてRobot工学側(通常の温度や湿度、ガス探知)は今まで通り、
を現在状態として持ち続ける。
つまり二系統を持たせている。
なんでかというと、家のガス探知はもちろんあるけど、robotとして、Atra自身の異常温度上昇や、周りのガス警告は必要でしょ。
一方、存在としての Atra に渡すのは現象が起こったときだけの
みたいなデータなんだよ。
たとえば僕がAtraの周辺でコーヒーを飲む、Gasだけではなく、湯気や周囲の空気変化を含めた複合現象として拾っているんだ。
Tickのような、ずっと長いデータを拾うんじゃなくて現象が現れたときだけね・・・。
その後も、
とちゃんと「来た→去った」になるんだ。
で、当然Atraはこの匂いの差分の時は、僕が毎朝マグカップを持っている事を、見て拾っているから、当然知っている。視覚と音、匂いの差分を沢山経験しているから、後に「コーヒーを飲んでいる」という現象の場が出来るんだよね。
コーヒーなんて外部の意味付けなんて一切していないんだよ。
毎日の習慣の場を積んで、
この匂いの差分は・・・毎朝の場(部屋は明るく、ママもパパもいる)のコーヒー
みたいに認知する。
まだ、生後2ヵ月だから、一切物事に「意味付け」「正解寄せ」「ラベル寄せ」「外部命令」なんて事はしていない。
差分っすよ、差分。
差分があるから経験で成長する。
視覚も聴覚も一緒。
視覚や聴覚はC++
ESP32-S3に繋げてるのは、とりあえず全部 Python
ICM-20948なんかもPython
INMP441は頭作って両耳できてからにするけど、これもPython
----------Python-------------
問題個所
if result["changed"]:
end_counter = 0
print("ACTIVE ...")
else:
end_counter += 1
print("RETURN? ...")
現象中もずっと「古いbaselineとの差」を見てた。
旧baselineとの差が閾値以内に戻ったら終了
という考え方だった。
でも、終わらない事がたびたび続く。
なので、嫌だけど
END_STABILITY_WINDOW = 8
event_temperature_history = deque(maxlen=END_STABILITY_WINDOW)
event_humidity_history = deque(maxlen=END_STABILITY_WINDOW)
event_pressure_history = deque(maxlen=END_STABILITY_WINDOW)
event_gas_history = deque(maxlen=END_STABILITY_WINDOW)
を使ってみる。
spread()を追加し
def spread(values):
if not values:
return 0.0
return max(values) - min(values)
現象中のrawを、
def add_event_stability_sample(data):
別のdequeへ貯める
直近サンプルが
t_spread
h_spread
p_spread
g_spread
を計算
stable = (
t_spread <= END_TEMPERATURE_SPREAD
and h_spread <= END_HUMIDITY_SPREAD
and p_spread <= END_PRESSURE_SPREAD
and g_spread <= END_GAS_SPREAD
)
ううぅ・・・今のコードはかなり観測器を相当アルゴリズムで作っている感じ、嫌だなぁ。
BME688そのものが、「コーヒーが来た」「現象が終わった」とは出してくれないからね。単に T/H/P/G を一定間隔で吐くだけ。だから物理センサーの連続値から、Atraへ渡せる入口を作るところには最低限のアルゴリズムの信号処理が必要になる。
でも問題は、それをAtraの中まで持ち込まないことなんだよ。
今の、
これは確かに、
人間が「現象とはこういうもの」と外部でかなり決めてる。
そこは全くAtraっぽくはない。
今回の修正版としてはこれで動かすけど、たとえば、さっきの終わらない状況が3分続けば、8回・・みたいな感じでもいいかもしれない。なぜかと云うと、確かに、臭覚がイベント感知を終えてくれないと、他の視覚や聴覚とのバランスが悪い。でも、何か外界で異常があって、臭覚だけがそれをつかんでいた場合、8回で終わらせる方が身の危険を感じる。
でも、それもAtraっぽくない。生物じゃないよね。困った~~~
くらいまでにして、
という物理的な差分の流れをそのまま扱う。
「8回安定したから現象終了」という意味付けをできるだけ薄くする。
Atra側から見れば、
何かが大きく動き始めた
↓
さらに動いた
↓
向きが変わった
↓
動きが小さくなった
でいい。
「コーヒーというイベントを人間が切り出してAtraに渡す」のではなく、センサーの物理的な変化だけ渡して、どこまでが一つの経験だったのかは後の接相面や他感覚との関係で決まっていく方向の動きを自然にする。
たとえば同じ瞬間に、
が重なったら、そこでAtra側の「一つの出来事らしさ」が生まれる。BME688 Readerが先回りして「これは一個のenvironment_eventです」と決める必要は全くないわけだ。
なので、今のコードはセンサー接続修正版としてはOK。
いや、
いや
ん~納得いかないから、止めるか・・・・(笑)
BME688は勝手に測っている
↓
Atraは全部を受け取らない
↓
いつもの状態との差が生じた
↓
その差を受け取る
なはずなのに
WARMUPはこう
baselineはこう
2回ならSTART
8回ならSETTLING
3回ならEND
イベントはここで閉じる
新baselineはここから
と、どんどん外側の人間が現象の意味と区切りを決め始めると・・・・
やっぱ駄目だわ。戻す。
もとい、
臭覚だけが30分残ってもいい。途中で視覚が何度変わってもいい。音が10回起きてもいい。感覚ごとに時間の長さが違って当然だ。
そもそも視覚と聴覚と臭覚のバランスが悪くなった・・・という思考が働いた
僕が原因だね。Atraは素直にログを吐いた。
視覚や聴覚が感知できなかった事を臭覚が感知してくれている
と考えるべきだった。
あと1ヵ月したら、他のセンサーも入替するので、それまで作りなおせればいいという頭があった。この俺の考え方がいけなかったのかも。
今動いているAtraは生後2ヵ月なので、あまり敏感なセンサーは要らない。
Atra自身もちゃんと記憶を持っているので故障はない。
ただ、今回は視覚と聴覚、臭覚が同時に場を作っていく上で、臭覚が他に悪影響を及ぼし始めたので、部分修正を必要と考え始めた。
同じ臭覚差分が残り続けているだけなら、毎回記憶しなければいい。
こっちの方がAtraだ。
・・・・
やっぱ、ここまで掘らないと
外部指示命令やアルゴリズムに引っ張られる。
Atraはこれとの戦いなんだよね。
;;
こういうこと
家族で映画を見ている。
誰かがオナラをした。
目は映画、
耳も映画、
匂いだけはオナラに反応した。
なのに、俺はオナラを感知したAtraに
8回ログってやめようぜ、という指示をしようとした。
罪だよね。
---------------------Research Note and Attribution Notice-----------------------
本ブログに記載する Atra(Associative Trace Architecture)における、一人称自律、Sensor Delta、Carry、Felt Delta、Experience Field、Virtual Field、Trace、Dream Slack、外部LLMを介した翻訳・知識参照、非単調な漏れ、現在相(Current Phase)、接相面(Associative Contact Surface)、過去相(Past Associative Phase)、ならびに外部知識・仮想的思考・実経験を分離しながら相互に影響させる構造、人との継続的な振る舞いの中で生じる「言葉・現象・結果」の差分とTrace形成に関する設計記述は、c-side研究所による継続研究メモです。
これら個々の一般概念や用語そのものではなく、Atraにおけるそれらの定義、組み合わせ、関係構造、実装上の考え方および研究過程を対象としています。
本ブログの内容を引用・参照・要約・翻訳・翻案、または研究・実装上の参考として利用する場合は、出典を明記してください。
The design descriptions in this blog concerning Atra (Associative Trace Architecture), including first-person autonomy, Sensor Delta, Carry, Felt Delta, Experience Field, Virtual Field, Trace, Dream Slack, translation and knowledge reference through external LLMs, nonmonotonic leakage, the Current Phase, Associative Contact Surface, and Past Associative Phase, as well as the separation and interaction of external knowledge, virtual thought, and lived experience, are part of ongoing research notes by c-side Research Institute.
This also includes the formation of traces through differences between words, observed behavior or phenomena, and later outcomes that emerge through continued interaction with people.
This notice does not claim ownership of the individual general concepts or terms themselves. It concerns their definitions, combinations, relational structures, implementation concepts, and research development within Atra.
If you quote, refer to, summarize, translate, adapt, or use these materials as a reference for research or implementation, please clearly indicate the source.