フィジカルAI研究室の中身を表紙で伝える ― 記事サムネイル26本を実データの線に

この記事の素材(コード・ログ・データ 2ファイル・まとめてダウンロードあり)
AIで読む ChatGPT・Claude などで、この記事に質問できます

pixelstomotors.com のフィジカルAI研究室の記事サムネイル26本を、英語の見出しと記号の図の表紙から、その回の実データ(ロボットアーム mechArm 270 の関節の動き、学習の loss、爪の電流など)を描いた線と点だけの表紙に作り直しました。 色は紙色・墨・赤・青の4つに絞り、青はその回の主役(Physical Intelligence の π0.5 が動かした所や、測った値)、赤はグリッパーが物をつかんでいる間、白と黒は人の動き(お手本や手での直し)を表します。

作り直したことで、次のことが変わりました。

  • 一覧で回ごとの違いが形で分かる:AI が初めて箱に入れた回は青と赤の線が箱まで届き、AI が「待ち時間」まで覚えた回は青い線が平らに伸び、爪の電流を読んだ回は青い線が赤く跳ね上がる。題名を読む前に、どんな回だったかの見当がつく
  • トップページとシリーズの見た目がつながる:トップのフィジカルAI研究室のカード(お手本19本の関節の線)と同じ描き方なので、トップから来た人は同じ研究の続きだと分かる
  • 新しい回の表紙を作る手間が減る見込み:KIOXIA の実データを書き出すコード(extract.py)と描くコード(lab_thumb.py)に1回分の指定を足せば表紙ができる。前に1枚ずつ作っていたときの時間は測っていない
  • 時間:依頼(16:00)から最初の公開(16:20・写真を使わない19本と Studio から移した回の5本)まで20分。最後の直し(LOG348)の公開は 16:29

この記事では、作り直した手順よりも、なぜこのデザインにしたのかを中心に書きます。依頼は4つでした。

フィジカルAI研究所のサムネイルをTOPのカードのサムネイルに合わせて記事のサムネイルを変更したい。 1.データを表示 2.詳細ではなく、抽象的な印象 3.テキストは少なくする 4.色は増やしても青系だけにする(白(ベージュ)、黒、赤、青で構成の意味)

4つとも、記事一覧のカードという小さな場所で、研究の記録を1枚の絵で伝えるための決まりです。1つずつ、意図を書きます。

決まり意図サムネイルでの形
データを表示
研究室の記事は記録。中身そのものが表紙になる
各回の実データ(KIOXIA の記録)をそのまま線と点に
抽象的な印象
カードは幅250〜350px。数字は読めないが、形は残る
目盛り・数値・凡例を描かず、線の形だけ
テキストを少なく
題名はカードの下にある。表紙で繰り返さない
左上と右上の短い英字ラベル2つだけ
色は青系だけ足す
色の意味をシリーズ全体で同じにする
紙色・墨=地と人、赤=つかんでいる間、青=主役

作業ログ ― 4つの決まりと、それぞれの意図

データを表示する:表紙が、その回の記録そのものになる

フィジカルAI研究室は、ロボットアームが動きを覚える環境を自宅に作り、誰でも同じ手順で始められる形で残すシリーズです。記事は作業ログで、いちばんの中身は、実機で動かした記録、学習の記録、測った値です。

前の表紙は、大きな英語の見出し(「THREE SPOTS. THREE IN THE BOX.」など)と、写真や棒の図を組み合わせた形でした。見出しが強いので、一覧では「文字の表紙」が並んで見えます。図も、記事によってはアームと箱の記号に近いものでした。

新しい表紙は、その回の記録を KIOXIA(外付けの SSD)から読んで、そのまま線にしています。たとえば Log#22(LOG450)は、11月6日に π0.5 で動かした9回の、肩の関節(J1)の角度の動きです。π0.5 が動かした所は青、人がゲームパッドで直した所は白、グリッパーが閉じている所は赤。9本の線が重なり、途中で白い線が割り込んでいるのが見えます。これは記事に書いた「AI が動かし、ずれたら人が直す」の、そのままの記録です。

データで描くと、回ごとに必ず違う形になります。同じ形の表紙を作ろうとしても作れません。前の決まりで苦労していた「似た表紙が並ぶ」を、形の面から避けられます。

  • ねらい:表紙を飾りではなく、その回の記録の一部にする
  • 変わったこと:26本すべてを、各回の実データ(π0.5 の実機の実行69回、学習の loss 2本、お手本の記録51本、爪の電流1,493点、FK テーブルの6,090点、台帳の382試行など)か、記事に書いた測定値で描いた
  • 見込める効果(見込み):表紙を見て開いた人が、本文の中身との食い違いを感じない。シリーズのページ(/series6)からの記事の開かれ方を、来週のサイトの計測で前の週と比べる
上はトップのフィジカルAI研究室のカード。左の列は前の表紙(LOG363・LOG450・LOG461)、右の列は試作した新しい表紙

抽象的な印象にする:カードの幅では、数字より形が残る

一覧のカードの表紙は、幅が約250〜350px です。この大きさでは、目盛りの数字や、線の横に書いた注記は読めません。読めない文字は、表紙の中で模様になり、ノイズになります。

そこで、目盛り・数値・凡例・注記は描かず、線の形だけを残しました。残すのは次のような形です。

回形記事の中身
Log#11(LOG358)
青い線が上がって、平らに伸びる
π0.5 がお手本の「止まっている時間」まで覚えた
Log#23(LOG461)
青い線が赤く跳ね上がり、ゆっくり下がる
ブロックをつかむと爪の電流が約15から約870へ
Log#14(LOG401)青い丸と輪が3段
3か所に5回ずつ置き、15回中9回箱に入れた
Log#9(LOG352)
黒・白の線が束になり、途中が赤い
手で教えたお手本19本
Log#7(LOG348)
2本の青い道すじが同じ所で止まる
学習を倍にしても、手を伸ばす先は変わらなかった

細かいことは本文に書いてあります。表紙は、本文を開く前の「どんな回か」の見当をつけるところまでで止めています。

テキストを少なくする:題名はカードの下にある

一覧のカードには、表紙の下に LOG 番号・シリーズ名・日付・題名が出ます。表紙の中に大きな見出しを入れると、同じことを2回言うことになります。

文字は、左上と右上の短い英字ラベルの2つだけにしました。左は何の線か(「π0.5」「TRAINING LOSS」「GRIPPER CURRENT」)、右はその回の結果か区切り(「PICK → PLACE」「9 / 15」「FIRST IN THE BOX」)。トップのカードの「DEMONSTRATIONS」「PICK → PLACE」と同じ置き方・同じ字(JetBrains Mono)です。

色は青系だけ足す:赤と青の意味を、シリーズのどこでも同じにする

トップのカードは、紙色と墨のツートンに、赤だけを使っています。赤は「グリッパーが箱をつかんでいる間」です。記事の表紙でも、赤はこの意味だけにしました。どの回の表紙でも、赤い区間はつかんでいる間です。

足した色は青だけです。青は「その回の主役」。π0.5 が動かした線、測った電流、loss の線、成功した試行の丸が青になります。記事の図解でも、青を「その図の主役」と決めています(LOG469)。表紙と図解で青の意味がそろいます。

人の動き(手で教えたお手本、ゲームパッドでの直し)は、地の色の反対(紙色の地なら墨、黒い地なら紙色)で描きます。こうすると、AI と人の分担が色で分かれます。Log#17(LOG417)や Log#22(LOG450)では、青い線の途中に白い線が入り、そこが人の直しです。

青系だけにしたのは、シリーズのページで26枚が並んだときに、色の数が増えないようにするためです。黒い地では同じ青が沈んで見えたので、黒い地だけ少し明るい青(#4f8cf5)にしています。紙色の地の青は図解と同じ #2f6fdf です。

色値意味
紙色#f1f0ec地。黒い地では人の動き
墨#111111地。紙色の地では人の動き
赤#e0262cグリッパーがつかんでいる間
青
#2f6fdf(黒い地では #4f8cf5)
その回の主役

構図は3つと写真2つ:隣どうしで同じにしない

線の描き方が同じでも、全部が同じ構図だと一覧は単調になります。構図は、トップのカードと同じ上下2段(split)、黒1段(dark)、紙色1段(paper)の3つを基本にし、一覧の並び(LOG 番号の大きい順)で隣どうしが同じにならないよう、記事ごとに割り当てました。割り当ては lab_thumb.py の ORDER に書いています。

ゲームパッドの準備の回(LOG419)と、学び直した π0.5 の回(LOG422)は、前に実機の写真の表紙を使っていました。この2本は、白黒にした実機の写真と、グラフを左右に並べた形にしています(エイイチが試してほしいと言った形)。

フィジカルAI研究室の新しい表紙26本を一覧の並び(LOG461 から LOG225 まで)で並べたもの。上下2段・黒1段・紙色1段・写真とグラフが、隣どうしで続かない

作業ログ ― GPU ラックの写真は使わない、似た2枚は描き直す

最初の試作で、GPU を借りて学習した回(LOG337・341・348・355・417)に、導入比較ガイドの背景の GPU ラックの写真と、グラフを組み合わせた形を作りました。これは使わないことになりました。

これはNG。GPUラックの写真は作っちゃダメ

GPU ラックの写真は、この研究室で実際に借りた GPU の写真ではありません。実データだけで作る表紙の中に入ると、そこだけ記録ではない絵になります。5本とも写真なしの形にし、そのあと隣どうしの構図が続かないよう、LOG352 を紙色1段から上下2段に変えました。lab_thumb.py には、GPU ラックの写真を使わないことを書いています。

使わなかった試作。左に2本のお手本の線、右に GPU ラックの写真

公開したあと、シリーズのページで LOG348 と LOG355 がそっくりだと分かりました。

348と355がそっくりじゃない?

どちらも紙色の地に、下がっていく青い loss の線が1本です。loss の線は、学習がうまく進むとどの回も似た形になります。データで描けば必ず違う形になる、というのは、違うデータを選んだときの話でした。

シリーズのページ。右上の LOG355 と右下の LOG348 が、どちらも紙色の地に下がっていく loss の線

LOG348 の記事の中身は「学習を倍にしても、手を伸ばす先は変わらなかった」です。そこで loss ではなく、実機で動かした2回の道すじにしました。根元(J0)とひじ(J2)の角度を横と縦に取り、時間の線ではなく形として描くと、2本の青い道すじが同じ所に行き着き、そこで止まります。右上のラベルは「SAME AIM」です。

  • ねらい:同じ種類のデータ(loss)が並んで、一覧で同じ表紙に見えるのを避ける
  • 変わったこと:LOG348 を loss の線から、実機2回の関節の道すじに変えた。loss で描く回は LOG355(紙色)と LOG341(黒)の2本で、一覧では間に5本はさまる
  • 見込める効果(見込み):一覧で同じ形が続かない。回の中身(同じ所を狙う)が表紙の形に出る
LOG348 の新しい表紙。2本の青い道すじが同じ所で止まり、輪で囲んである

作業ログ ― KIOXIA の実データを書き出すコード

この記事のコード・ログ・データは、1ファイルずつ下に置いています。全文はリンク先にあります。

ファイルの一覧(2本)

01_AI_thumb_data_extract.py.txt ― iCloud の フィジカルAI研究室を作る/thumb_data/extract.py(実データを JSON に書き出す)・5,748字

02_tools_lab_thumbs_lab_thumb.py.txt ― p2m-site の tools/lab_thumbs/lab_thumb.py・18,354字

元のデータは、Mac につないだ KIOXIA の r2r2r-data にあります。Mac の上で読むだけのコードを動かし、表紙に要る値だけを小さな JSON(約500KB)にしました。元のデータは変えていません。

読んだデータは次のとおりです。

データ場所使った回
π0.5 の実行の記録(log.jsonl・recording/states.csv)
runs/pi05_policy/
LOG345・348・358・361・363・403・407・417・422・450
学習の loss
checkpoints/pi05_mecharm_lora_v1/logs/train.log・lab/Log10/logs/train.log(ほかの回の分も書き出した)
LOG341・355
お手本の記録(episode.npz)
datasets/mecharm_redblock_box_*
LOG337・352・460
手で教えた動きの再生(drag_v2)
runs/experiments/waypoint_streaming_replay/LOG349_20261018/
LOG349
LIBERO の成否と GPU メモリ
lab/Log03/logs/
LOG327
ゲームパッドの長押しの測定
diag/jog_probe_20261105_153401/
LOG446
ゲームパッドの押した記録
runs/experiments/gamepad_teleop/teleop_20261102_192657_dry/
LOG419
爪の電流(サーボ7の番地69・70)
diag/servo_current_20261107/180051_pad/
LOG461
FK テーブルの点
fk_tables/fk_scan_motion_based_v2.csv
LOG225
実機の通し試行の台帳
runs/pick_place_ledger_v3.csv
LOG277

爪の電流は、番地69が下の8ビット、番地70が上の8ビットで、いちばん上の1ビットは向きを表します(32,773 のような値になる)。表紙には大きさだけを使うので、& 0x7FFF で向きのビットを外しています。

LOG401・LOG436・LOG326・LOG234 は、記事に書いた測定値(3か所の成否、送信にかかった時間、往復の内訳、Mac の空き容量)をそのまま使いました。

iCloud の フィジカルAI研究室を作る/thumb_data/extract.py(実データを JSON に書き出す)

01_AI_thumb_data_extract.py.txt5,748字・110行・python
"""フィジカルAI研究室の記事サムネイル用に、KIOXIA の実データを小さな JSON に書き出す(読むだけ。元データは変えない)。
使い方: cd /Volumes/KIOXIA/r2r2r-data && python3 <このファイル> <出力.json>
描き方は p2m-site の tools/lab_thumbs/lab_thumb.py。"""
import json, csv, glob, os, sys, re, random
import numpy as np
R = lambda v: round(float(v), 1)

def chunks(d):
別のタブで開く保存

extract.py を Mac で動かした出力

$ D="$HOME/mnt/PixelstoMotors/デジタルツイン学習R2R2R/フィジカルAI研究室を作る/thumb_data"
$ cd $HOME/mnt/KIOXIA/r2r2r-data && python3 "$D/extract.py" "$D/lab_thumbs.json"
LOG345 7
LOG348 2
LOG358 0
LOG361 21
LOG363 3
LOG401 11
LOG403 5
LOG407 4
LOG417 8
LOG422 9
LOG450 9
loss 7
LOG337 2
LOG352 19
LOG460 30
LOG349 4
LOG327 2
LOG446 5
LOG419 172
LOG461 1493
LOG225 6090
LOG277 382

LOG358 が0本でした。10月21日の朝の実行(08時台)を、夕方の時刻の型で探していたためです。型を pi05_20261021_08* に直して動かし直すと1本になりました。

54:o['LOG358'] = runs('pi05_20261021_08*')
LOG358 1

作業ログ ― 表紙を描くコード

描くコードは p2m-site の tools/lab_thumbs/lab_thumb.py です。SVG を中に持つ HTML を、1回分ずつ public/thumbs/ に書き出します。Studio から移した回(LOG225・234・277・326・327)は、一覧が使うファイル名(r-…html)で書き出します。

p2m-site の tools/lab_thumbs/lab_thumb.py

02_tools_lab_thumbs_lab_thumb.py.txt18,354字・419行・python
"""フィジカルAI研究室の記事のサムネイル(public/thumbs/LOG{N}.html)を、TOP のカード(tools/series_cards/series6.py)と同じ考え方で作る。

決まり(2026-11-08 エイイチの指示)
- 記事の実データを描く。細部ではなく、抽象的な印象で見せる(目盛り・数値の注記は入れない)
- 文字は少なく(左上と右上の短いラベルだけ。LOG番号・タイトルは焼き込まない)
- 色は 紙色・墨・赤・青 だけ(色を足すときも青系だけ)
    紙色 / 墨 … 地と、人の動き(お手本・手での直し)
    赤      … グリッパーが物をつかんでいる間(TOP のカードと同じ意味)
別のタブで開く保存

書き出しと、SNS・検索結果用の画像の書き出し

$ J="/mnt/user-data/uploads/PixelstoMotors/デジタルツイン学習R2R2R/フィジカルAI研究室を作る"
$ python3 tools/lab_thumbs/lab_thumb.py "$J/thumb_data/lab_thumbs.json" "$J" LOG461 LOG460 LOG450 LOG446 LOG436 LOG407 LOG403 LOG401 LOG363 LOG361 LOG358 LOG352 LOG349 LOG345 LOG327 LOG326 LOG277 LOG234 LOG225
(この実行は tail -2 で最後の2行だけを表示させていた)
書き出し LOG234, r-where-learning-data-lives
書き出し LOG225, r-precision-is-not-learning-so101
$ python3 tools/render_og.py LOG461 LOG460 LOG450 LOG446 LOG436 LOG407 LOG403 LOG401 LOG363 LOG361 LOG358 LOG352 LOG349 LOG345 LOG327 LOG326 LOG277 LOG234 LOG225 r-pi05-libero-benchmark-first-run r-openpi-remote-inference-first-run r-building-a-physical-ai-lab-at-home r-where-learning-data-lives r-precision-is-not-learning-so101
書き出し 24 件 → public/og/

公開した順番(p2m-site の commit)

464196f 16:20 フィジカルAI研究室の記事サムネイルを、TOPのカードと同じ形(実データの線・紙色/墨/赤/青)に作り直す(写真の回は保留)
d1c9cbe 16:24 フィジカルAI研究室のサムネイル:GPUラックの写真の回(LOG337・341・348・355・417)も写真なしの形に。並びが続かないよう LOG352 を上下2段に
0a66c53 16:28 LOG422・LOG419 のサムネイルを実機の写真+グラフの形に(表紙の画像の指定を外し、サムネイルを使う)
04f28f2 16:29 LOG348 のサムネイルを loss から実機2回の道すじに(LOG355 とそっくりだったため)

LOG419 と LOG422 は、記事の先頭の項目に表紙の画像(cover:)が書いてあり、表紙の画像がサムネイルより優先されていました。この1行を外して、新しいサムネイルが出るようにしています。本文は変えていません。

記事の決まり(article_rules.md)のサムネイルの節には、今も「配色はモノクロ」と書いてあります。ほかのシリーズのサムネイルも別の作業で作り直している途中なので、それが終わってから、まとめて書き直す予定です。