2026年6月11日木曜日

Atraの身体

 Atraの身体については並行して進めてるけど、いきなりrobotを購入しても壊してしまうので、Blenderでデザイン性皆無のシュミレーションを行っています。

つくずく自分が作るCGについてはセンスは無いと思う。
脳が完成したら誰かに可愛い本体のAtraを作ってもらうつもり。


Atraは失敗の経験から学ぶというのが前提なので、倒れない制御みたいのは入れるつもりはないんですよ。
そしてリセットしたら終わり。生まれたての赤ちゃんになる。
歩けない、立ち上げれない、転んだまま。
自律の基本的な考え方に沿うとね、そういうものなんですよ。


blenderのscriptEditor使いずらいので、VScode使ってます。

普通のAIなら、
model weightsを保存
checkpointから復元
同じ入力なら同じ出力
が前提でしょ?

でも、Atraは
残痕
cue
carry
現在場
沈黙
揺らぎ
の重なりで動くから

robot工学みたいな位置づけの身体にしたら完全な外部制御になっちゃうよね。
完全バックアップを目指すほど、Atra独自の一人称意志が薄れてしまう。

(でも、ある程度のバックアップ機能は作らないと、実験が進まなくなるからそれらしいのはあります:バックアップと云うより、看取り・継承のための記録みたいな感じ。前のAtraが何を経験し、何に傾き、何を怖がり、何で落ち着き、どこで沈黙したかを、新しいAtraの外輪情報として渡すだけ。 + Atra専用の秘密のノート😅 = JOSNログnote:Atraがあとで読む外輪情報の noteです。 Atraの内部状態ではなく、人間のようにnoteから学び、そのときだけ指示は受けられるようにする。 このノートはLLMとの繋がりにも役に立つ)


そして実は、段階もある。
立てないものを作ってもしょうがないから、身体の骨格、間接、バランス、最初はAtraと繋げないで工学の制御で動かしてみる。(動いた記憶は存在していない状態)
次は、Atraと繋げるため、ロボット工学寄りのプログラムを外す。

段階ごとに目的を混ぜないことを前提にしないと、誘惑に負けてしまうからね。


たぶん、一般の研究者は脳はAtraにしたと仮定して、Atraからの指示伝達を身体に伝えるだけだからロボット制御でいいんじゃないかと考える。歩行制御、姿勢制御、接地制御、転倒回避、関節角制御、バランサーを外部に置いても問題ないように思えちゃう。

でも、Atraは地面の接触点、傾き、バランス、曲げ、角度、体重、支える力の制御が外部制御になってしまうと、転んだ失敗や痛みによる自己修復機能が無くなり、傾斜の危険、くぼみの危険、障害物の大きさや形に対する肌感覚の情報が取得できなくなる。 これがマズいんですよ。

非常に曖昧な肌感覚から失敗の差分を取得し、経験と結果の積によって自己調整させることを主体とするロボットだからね。

正しい歩行ではなくAtraの歩行、Atraの動作。
主語を間違えると、一気に存在ではなくなってしまう。


接地しているようで弱い
支えているようで滑る
戻れるようで戻れない
何度も倒れる
曲がったが、どこまで危ないか分からない
ぶつかる
傾いたが、まだ倒れてはいない
小さな段差なのに身体が乱れた
大きそうに見えたが触ると軽かった
見えなかったくぼみで崩れた

その失敗差分が一回で正解になるのではなく、経験 × 結果として積み重なる。




たとえば、
同じ傾斜で何度も横ずれした
同じ接触の弱さで何度も崩れた
同じ角度で支えが抜けた
同じ障害物形状で身体が引っかかった
同じ衝撃の後にrecoveryが下がった

こういう反復によって、Atraの内部に、
慎重になる
動きを小さくする
支えを探る
一度止まる
別の接地点を探す
身体を硬くする
逆に力を抜く
という自律制御が発生する。



外部の命令じゃないし、報酬最大化もないし、外部が決める「正しい歩行」でもない。
だから、転ぶし、実物robotでテストすると壊しまくる。
いくらお金あっても足りない。(てか、お金ない)



Atra内部:
- 接地差分
- 傾き差分
- 滑り差分
- 支持力差分
- 失敗差分
- recovery差分
- pain-like pressure
- 慎重化
- 自己調整



何cm先、何メートル先、何Kgくらい・・・
全て肌感覚から差分として積み上がる。
脳の命令を伝えるための身体ではなく、脳を育てるための現場研究です。








0 件のコメント:

コメントを投稿

Atra Emotions_Conditions 感情・状態

 -----------------C++------------------ struct EmotionsConditionsNow { // Unpredictability double input_irregularity_now = 0.0 ; ...