mechArm 270 Pi · データアーキテクチャ リファレンス

mechArm に使っているデータの全体図

live(入力)/ twin(変換器)/ real(出力)の3系統と、それを束ねる pose_id。「イメージ図」で関係を絵で掴み、「全体解説」で絶対パスと根拠を確認する。件数・行数などデータ増加で変わる数値は載せない。パスは実機調査とコード根拠で確定(省略なし)。 LOG257 の新設計=補正記憶(実機で測ったズレを位置ごとに貯め、次の狙いを補正する学習層)も破線で併記。これは現行コードには未実装・コード未確認。

①三系統アーキテクチャ ── live / twin / real

読む 書く 採用姿勢 live · 入力 · 読む j0_sweep_adopted/*.json Mac 内蔵 / scripts run_pick_place アーム本体 run_pick_place.py / j0_lookup.py 試行台帳・run記録 real · 出力 · 書く pick_place_ledger_v3.csv KIOXIA SSD FKテーブル twin · 変換器 · 読まない fk_scan_motion_based_v2.csv Mac 内蔵 + Unity pose_id 補正記憶 学習層 · 設計(未実装) 位置 → Δ(x,z) 保存先 未定 狙い補正 / Δ更新

各ボックス下段が実体ファイル:live=j0_sweep_adopted/*.json(Mac内蔵)、twin=fk_scan_motion_based_v2.csv(Mac内蔵+Unity)、real=pick_place_ledger_v3.csv(KIOXIA SSD)。アーム本体のコード=run_pick_place.py+j0_lookup.py。live の生成は j0_sweep_scan.py(オフライン)。pose_id(赤)が三系統をつなぐ。絶対パスは全体解説③。 破線の補正記憶(位置→Δ(x,z))は新設計(LOG257)の学習層で、現行コードには未実装・保存先未定。

②実行時データフロー ── 1試行のフローチャート

pose_id を返す no yes 次の stage / phase へ live j0_sweep_adopted/ *.json 読む real pick_place_ledger_v3.csv 書く run_pick_place 起動 j0_lookup(phase を渡す) j0_lookup.py 送角 → アーム動作 run_pick_place.py post_actual 取得(実測角) run_pick_place.py 次の stage / phase ? _append_ledger pose_id・実測角を記録 run_pick_place.py 完了 / 次試行へ twin(FKテーブル) fk_scan_motion_based_v2.csv runtime では読まない 突合は事後に pose_id で
開始 / 終了 処理 分岐 データ入出力 赤=pose_id

使用ファイルを各ノードに併記。データ:live=j0_sweep_adopted/*.json、twin=fk_scan_motion_based_v2.csv(runtime非参照)、real=pick_place_ledger_v3.csv。コード:起動〜記録=run_pick_place.py、採用JSON選択=j0_lookup.py(ともに .../place/place_modules/)。出力先は KIOXIA runs/(台帳+run JSON)。未マウント時は冒頭 ABORT。絶対パスは全体解説③。

②+新設計 ── 補正記憶で狙いを補正するループ LOG257 · 設計(未実装)

no yes 次試行へ 記憶に書く ① ブロック検出 (x,z) 上カメラ fk_lookup 理想姿勢 (x,z) → 6関節 · 残差±2mm 狙いを補正 → 送角 狙い = (x,z) − 記憶Δ 実機 tip のズレを測る Δ(x,z) = 爪先 − ブロック 掴めた / しきい内? |Δx|,|Δz| ≤ th ? grip 掴む 補正記憶を更新 記憶Δ ← 測ったΔ(次試行へ) 補正記憶 位置 → Δ(x,z) 学習層 設計・未実装

これは新設計(LOG257)で、現行コードには未実装。 現行の実装フローは上の②(j0_lookup → 送角 → 実測 → 台帳)。新設計は fk_lookup の理想姿勢を土台に、その上へ「実機で測ったズレ Δ を位置ごとに 補正記憶 へ貯め、次の狙いから差し引く」学習層を載せる。補正記憶(位置→Δ(x,z))の保存先・実体ファイルは未定。実装とパスが確定したらこの図と③④に正式反映する。

③実体パス一覧 ── 絶対パス・省略なし(実機調査+コード根拠で確定)

系統絶対パス読む書く変更メモ
live /Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/logs/j0_sweep/j0_sweep_adopted/ j0_lookup
(ADOPTED_DIR.glob)
採用キュレーション
(scanから選定配置)
追記 採用JSON 5本。pose_id 保有。place_noblock は存在するが lookup 不可(下記)
live /Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/logs/j0_sweep/ (採用元プール) j0_sweep_scan.py
(DEFAULT_OUTPUT_ROOT)
追記 raw sweep j0_sweep_{phase}_{NN}.json+frames。classified/ に分類。adopted/ はここから選定
twin /Users/shimazueiichi/r2r2r-scripts/fk_scan_motion_based_v2.csv Unity / planning Unity FKScanner
(生成のみ)
変更禁止 現行。runtime のアーム制御は読まない(run_pick_place / j0_lookup に FK 参照なし)
twin /Users/shimazueiichi/Robotics_UX/Robotics_UX_New/Assets/Data/fk_scan_motion_based_v2.csv Unity Unity FKScanner 変更禁止 Mac 側と md5 一致必須(二重配置)
旧twin /Users/shimazueiichi/r2r2r-scripts/fk_scan_motion_based.csv
(+ Unity Assets/Data に同名)
(戻り先・温存) — 変更禁止 v2 不調時のロールバック先
real /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv (分析・突合) run_pick_place
._append_ledger
追記のみ 台帳。LEDGER_CSV_PATH(L139)。完走/中断とも1行。pose_id 記録。KIOXIA専用・未マウントABORT
real /Volumes/KIOXIA/r2r2r-data/runs/run_pick_place/{run_stem}/ (事後参照) run_pick_place
(LOG_ROOT, L134)
追記 1試行=1フォルダ。run JSON+frames
新設計 (未定・実体ファイル未作成) ③ 狙い補正で読む
(設計)
⑥ 結果で Δ 更新
(設計)
未実装 補正記憶 位置→Δ(x,z)。LOG257 設計(②+ 図)。現行コードに該当処理なし。保存先(KIOXIA 想定)も未定。実装後に確定パスを追記
code /Users/shimazueiichi/r2r2r-scripts/dynamic_tracking_limits/place/place_modules/ — — 改修済 gem✅ run_pick_place.py / j0_lookup.py / j0_sweep_scan.py の3本

採用JSON(5本・実ファイル名) ── adopted/ 直下:

├ approach_pick_NA_20pt_adopted_DAY235_01.json
├ pick_NA_20pt_adopted_DAY235_01.json
├ approach_place_NA_20pt_adopted_DAY235_01.json
├ place_withblock_NA_20pt_adopted_DAY235_01.json
└ place_noblock_20pt_adopted_DAY232_01.json ← 存在するが lookup 対象外

コード根拠(誰がどこを読み書きするか=コードが正)

twin の構造詳細:列は ee_x,ee_y,ee_z,j0..j5(ee=Unity 座標 m・関節=度)。ee は Unity 内グリッパー先端 Brep の位置で ikpy では再現不可。点追加は Unity FKScanner 再実行のみ。

解決:real は「二重化」していなかった

以前「Mac working v3 と KIOXIA v2 が二重化」と疑っていた件は誤り。~/r2r2r-scripts/ 配下に ledger は 0 件(find 確認)。台帳の実体は KIOXIA の /Volumes/KIOXIA/r2r2r-data/runs/pick_place_ledger_v3.csv 単一で、コード(run_pick_place L139)もここを直書き。KIOXIA 専用・ローカル fallback なし。real は単一ソース・v3で確定。

④残務 ── 確定後に残るもの

論点状態内容
MASTER の台帳パス記述済LOG256 で MASTER を v3 に更新済(保存先テーブル・フォルダ構成・保管ルール2箇所)。過去の更新履歴の v2 表記は当時の事実として保持
place_noblock の扱い明確化済ファイルは adopted/ に存在するが j0_lookup が設計上拒否(ValueError)。place = withblock
実機のスクリプト構成確定.../place/place_modules/ の3本(調査済)
pose_id 付与位置の不揃い保留遡及分=末尾/自動付与=phase直後(今回未調査)。機能上は問題なし
補正記憶レイヤーの実装未着手LOG257 設計(②+ 図)。fk_lookup の上に位置→Δ(x,z) を貯めて狙いを補正する学習層。現行コードに該当処理なし。実装が入るまで blueprint 上は破線扱い
補正記憶の保存先・実体ファイル未定測定由来データのため KIOXIA 配下を想定。MASTER「データ保管」の種類→場所テーブルに追記してから実装する(場所のルール更新が実装より先)