2026年8月23日日曜日

緊急 修正 : bme688 匂いsensorを修正

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 一個じゃなくて、

environment_event
  ├─ temperature_delta
  ├─ humidity_delta
  ├─ gas_delta
  ├─ pressure_delta
  └─ active / start / end

みたいに、ひとまとまりの環境現象として渡している。

そしてRobot工学側(通常の温度や湿度、ガス探知)は今まで通り、

temperature_raw
humidity_raw
pressure_raw
gas_raw

を現在状態として持ち続ける。

つまり二系統を持たせている。
なんでかというと、家のガス探知はもちろんあるけど、robotとして、Atra自身の異常温度上昇や、周りのガス警告は必要でしょ。


一方、存在としての Atra に渡すのは現象が起こったときだけの

baseline H=50.70%
↓
HΔ=+1.45%
↓
HΔ=+3.36%
↓
PHENOMENON START

みたいなデータなんだよ。

たとえば僕がAtraの周辺でコーヒーを飲む、Gasだけではなく、湯気や周囲の空気変化を含めた複合現象として拾っているんだ。
Tickのような、ずっと長いデータを拾うんじゃなくて現象が現れたときだけね・・・。

その後も、

ACTIVE  HΔ=+2.48%
ACTIVE  HΔ=+1.59%
...
PHENOMENON END

とちゃんと「来た→去った」になるんだ。

で、当然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の中まで持ち込まないことなんだよ。

今の、

8サンプル見る
T spread < 0.12
H spread < 0.35
G spread < 1200
3回連続ならEND

これは確かに、
人間が「現象とはこういうもの」と外部でかなり決めてる。
そこは全くAtraっぽくはない。


今回の修正版としてはこれで動かすけど、たとえば、さっきの終わらない状況が3分続けば、8回・・みたいな感じでもいいかもしれない。なぜかと云うと、確かに、臭覚がイベント感知を終えてくれないと、他の視覚や聴覚とのバランスが悪い。でも、何か外界で異常があって、臭覚だけがそれをつかんでいた場合、8回で終わらせる方が身の危険を感じる。

でも、それもAtraっぽくない。生物じゃないよね。困った~~~


raw
 ↓
変化量
 ↓
変化の向き

くらいまでにして、

Gas
 -100
 -300
 -2200
 -7000
 -15000
 -26800
 -25500
 -18000
 -7000
 -2000

という物理的な差分の流れをそのまま扱う。

「8回安定したから現象終了」という意味付けをできるだけ薄くする。

Atra側から見れば、

何かが大きく動き始めた
↓
さらに動いた
↓
向きが変わった
↓
動きが小さくなった

でいい。


「コーヒーというイベントを人間が切り出してAtraに渡す」のではなく、センサーの物理的な変化だけ渡して、どこまでが一つの経験だったのかは後の接相面や他感覚との関係で決まっていく方向の動きを自然にする。

たとえば同じ瞬間に、

視覚:カップが近づいた
嗅覚:Gasが大きく変化
温度:上昇
湿度:変化
聴覚:カップを置く音

が重なったら、そこで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.



0 件のコメント:

コメントを投稿

Atra's Memory Phase  Atraの記憶相

 何度説明しても分かりずらいAtraの記憶相(笑) 【Atraの記憶相】 そりゃしょうがないよ。地球上のどこにも存在しない記憶構造だからね。 アソシアトロンの段階ではアトラクタで良かった。アトラクタと云えば、調べればなんとなく理解できるかもしれない。だけど、1人称自律として常時動...