ロボティクス 声の単語帳を分野ごとに ― 記事65本から140枚足した

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

声に出して覚えるロボティクスの復習ページ、ロボティクス 声の単語帳に、LOG443 までの記事65本から作ったカード140枚を足して408枚にし、10の分野を選んでその中だけで練習できる形に作り直した。 記事の読み取りは Claude の作業を分けて受け持つ AI 5つで同時に進め、別の AI 2つが新しいカードを全部、元の記事と照らし合わせて18枚を直した。頼んでから公開まで約15分だった。

このページは ロボティクス 声の単語帳 です(ロボティクスの見直し という名前を、この作り直しで変えました)。カードの文を見て声に出し、押している間だけブラウザが声を文字にして、カードとの一致を出します。作り直して変わったことは3つです。

  • 研究の新しい中身を、自分の口で言える範囲に入れられた。 Physical Intelligence の π0.5 を自分のアームで学ばせた記録、配膳ロボットの導入シミュレーション33本、考察記事の判断が、カードになりました。これまでのカードは10月11日に作った268枚で、LOG326 までの記事しか入っていませんでした
  • 分野ごとに練習し、どこが手薄かが一覧で見える。 開くと10の分野が並び、それぞれに言えた数と苦手の数が出ます。分野を選ぶと、その中だけで 1 単語 → 2 説明 → 3 判断の型 と進みます
  • 時間: 頼んだのが8時13分、カードを足して画面を作り直して公開したのが8時28分。そのあと見た目と名前を7回直し、9時2分に今の形になりました。前の268枚を作ったときの時間は測っていないので、何分浮いたかは比べられません

ロボティクスの言葉は、記事に書いて分かったつもりでも、人に説明しようとすると口から出てきません。このページは、その差を埋めるための自分用の練習の道具です。困っていたのは、研究が進むほどカードが古くなることでした。10月11日から3週間で記事は65本増え、π0.5 も LoRA も配膳ロボットの待ち時間も、カードには1枚もありませんでした。もうひとつ、分野を切り替える仕組みが画面の上の小さな選択肢に埋もれていて、今日はこの分野だけ、という練習がしにくい作りでした。

やったことなぜ結果
新しい記事65本を5つに分け、AI 5つで同時にカードにした
1本ずつ読むと、記事が大きくて時間がかかる
156枚。重なった用語16枚をまとめて140枚
別の AI 2つで、新しいカードを全部元の記事と照らした
カードを作った AI が自分で確かめると、同じ見落としをする
数字の取り違えや合否の語のずれなど18枚を直した
分野に 配膳ロボットの導入 を足した
導入シミュレーションの話の行き先がなかった
分野は10になった
最初の画面を分野の一覧にした
分野ごとの練習が、上の選択肢に埋もれていた
分野を押すと、その中だけで3つの段階を練習できる
一覧を2列・サイトと同じカードの見た目にした
1列だと縦に長く、押せるのか分かりにくかった
PC では2列、マウスを乗せると浮き上がる
名前を ロボティクス 声の単語帳 にし、見出しをパンくずにした
他の人も見る前提で、何のページかとどこにいるかを分かるようにした
分野の中では ロボティクス 声の単語帳 › 分野 と出て、右にサイトのロゴが出る
作り直したロボティクス 声の単語帳の最初の画面。10の分野がカードで2列に並び、単語と判断の型の枚数、言えた数、進み具合の棒が出ている

作業ログ ― 作り直す前のロボティクスの見直しページを確かめた

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

ファイルの一覧(3本)

01_sec03.json ― 分野 配膳ロボットの導入 を足し、データを408枚にした / 足した140枚のデータ(id・分野・種類・表・意味・説明・合否の語・印・出典)・59,299字

02_tools_template.html.txt ― ページの形 _tools/template.html(全文)・51,081字

03_tools_build_review.py.txt ― 書き出すスクリプト _tools/build_review.py(全文・変えていない)・3,339字

ロボティクスの見直し(今の ロボティクス 声の単語帳)は、声で覚えるカードのページ

ロボティクスの見直しは、ブラウザの音声認識(Web Speech API。話した声をブラウザが文字にする仕組み)を使う、自分用の練習ページです。仕事で使っている台本の読み合わせのページと同じ作りで、10月11日の記録 LOG328 で作りました。

言葉このページでの意味
1 単語
用語と短い意味を、一続きで言う(例 LoRA(ローラ)は、モデル本体は固定し、足した小さな部品だけを学習する方法)
2 説明用語の詳しい説明を言う
3 判断の型
困った場面の問いを見て、教訓を自分の言葉で言う。決めた語が言えていれば合格。実際に起きた例は読むだけ
見て言う・見ないで言う
カードの文を読むか、用語や問いだけを見て答えるか
苦手だけ
前回の一致が80%に届かなかったカードだけを出す

公開は GitHub Pages(GitHub に置いたファイルを、そのまま Web ページとして出すサービス)の PixelstoMotors/robotics-review です。声を文字にするには https のページが要るため、iCloud のファイルを直接開かず、公開した URL で開いて使います。

データの元は iCloud の ロボティクス復習 フォルダにある robotics_review.json で、_tools/build_review.py がページの形(_tools/template.html)にデータを埋め込んで HTML を書き出します。書き出した HTML を、robotics-review の index.html として置くと公開されます。

前のカードは268枚・9分野・LOG326 まで

作り直す前のデータを数えると、次のとおりでした。

分野単語判断の型
運動学・座標系1812
実機・サーボ制御1712
シミュレーション・デジタルツイン
1910
画像認識・カメラ1912
視覚サーボ・Pick&Place・受け渡し
1812
ロボット学習1812
評価・データ管理2011
設計原則・進め方1812
社会実装・現場1711
計164104

練習の記録は、練習した端末のブラウザと、iCloud の 練習記録 フォルダにたまっています。集計(練習記録_集計.json)には161件(カード×段階)の前回の一致が入っていて、これはページを書き出すときに埋め込みます。作り直しても、この記録をそのまま引き継ぐことを先に決めました。カードの id は変えず、新しいカードには続きの番号(単語は w165 から、判断の型は k105 から)を振ります。

分野の切り替えは、画面の上の段階の切り替えの下にある、黒い選択肢1つでした。全部・まず覚える・9分野がその中に並んでいて、分野ごとの言えた数はどこにも出ていませんでした。

作業ログ ― 新しい記事65本を、AI 5つに分けてカードにした

対象は、pixelstomotors.com の記事のうち、10月11日のカードに入っていない LOG336〜LOG443 です。サイトの外側の作業(サイト・動画・SNS の仕組みづくり)の記事は外し、ロボットの研究にかかわる3つの流れに絞りました。

同時に動かした AI 5つは、Claude のサブエージェント

ここで使ったのは、Claude のサブエージェントです。Claude が作業の一部を、別の AI に任せて同時に動かす仕組みで、任された AI は渡された依頼文だけを手がかりに作業し、終わると結果を返します。

言葉ここでの意味
サブエージェント
Claude が仕事を分けて任せる、別の AI。1つずつ自分の作業の場を持つ
依頼文(BRIEF.md)
5つ全部に同じものを渡した、カードの形と書き方の決まり
重なり
別の担当が同じ用語のカードを作ること(π0.5・LoRA など)

記事は1本が大きく、全部のコードとログを載せているので、20万字を超えるものもあります。1つの AI が65本を順に読むと時間がかかり、途中で前に読んだ記事の中身も薄れます。そこで、話の流れで5つに分けました。

担当記事本数
A
フィジカルAI研究室 前半(LOG337・LOG341〜LOG363)
10
B
フィジカルAI研究室 後半と道具選び(LOG368・LOG396〜LOG436)
9
C
サービスロボット導入シミュレーション Log#1〜#16(LOG351〜LOG384)
16
D
サービスロボット導入シミュレーション Log#17〜#33(LOG391〜LOG440)
17
E
考察記事(LOG336・LOG375〜LOG443)
13

5つに渡した依頼文は次のとおりです。既存の268枚の用語と意味の一覧(existing.json)も一緒に渡し、同じ用語を作らないようにしました。

依頼文 BRIEF.md

# ロボティクス見直しページに足す項目を、記事から作る

## 何のためか
エイイチ(ロボティクス研究を個人で進めている、29年のデザイナー経験を持つ人)が、声に出して覚える復習カードのページを使っている。
カードは2種類。いまある268枚(DAY102〜DAY326 の記事から作成済み)に、それ以降の新しい記事から作ったカードを足す。

既存カードの一覧(重複させないために必ず読む):/home/claude/work/existing.json
記事の本文:/home/claude/p2m-site/src/content/records/{記事番号}.md (1本が大きいものがある。frontmatter・冒頭・見出し・まとめ・表を中心に読み、必要なところを grep で拾う。実行ログの全文は読み飛ばしてよい)

## カードの形(JSON の1件)

### word(単語)— 一般的なロボティクス・AI の用語
{"category": "...", "type": "word", "front": "用語(別名や読み)", "back": "短い意味(声に出す一言。35字前後まで)", "detail": "詳しい説明(2〜3文。一般的な定義を先に、記事でどう出てきたかを1文。数値は記事にある値だけ)", "key": true/false, "src": "LOG401"}
- front は「用語(読み・別名)」の形。カッコの前後どちらで言っても採点される。例「LoRA(ローラ)」「π0.5(パイレイテンゴ)」— π0.5 の読みは必ず「パイレイテンゴ」
- back は「〜こと」「〜方法」「〜仕組み」のように、用語と続けて一息で言える短い意味
- key=true は「まず覚える」。現場で頻出の基本語だけ(各バッチで3〜5枚まで)
- 記事にしか出てこない社内用語・ファイル名・スクリプト名・変数名は単語にしない。一般に通じる用語だけ
- 既存カードと同じ用語・ほぼ同じ意味のものは作らない(existing.json の front を必ず確認)

### lesson(判断の型)— 記事の実話から得た教訓
{"category": "...", "type": "lesson", "front": "場面(問い)。困った状況を1〜2文で書き「どうする?」「何を疑う?」で終える", "back": "教訓の一言(声に出す。25字前後まで)", "detail": "実例(2〜4文。記事で実際に起きたこと・数値・結果。読むだけ)", "kw": [["語A","言い換え1","ひらがな"],["語B","言い換え"],["語C",...]], "key": true/false, "src": "LOG401,LOG403"}
- 事実の丸暗記ではなく、別の場面でも使える判断にする(場面→教訓)
- kw は2〜3組。教訓の中核の語を組にし、各組に言い換え・ひらがな・漢字違いを並べる(音声認識の聞き違いも見越す)。各組から1語言えれば合格
- key=true は「核心」。特に大事なものだけ(各バッチで2〜3枚)
- detail の数値・固有名詞は記事に書いてある通りに。推測で足さない

## category(このどれか)
kinematics 運動学・座標系 / hardware 実機・サーボ制御 / sim シミュレーション・デジタルツイン / vision 画像認識・カメラ / servo 視覚サーボ・Pick&Place・受け渡し / learning ロボット学習 / eval 評価・データ管理 / principles 設計原則・進め方 / society 社会実装・現場 / service 配膳ロボット・導入シミュレーション(新設。配膳・サービスロボットの導入の試算や Unity の店のシミュレーションの話)

## 文体(厳守)
- 日本語だけ。英語の文を混ぜない(用語の英字表記は可)
- 鉤括弧「」は使わない。説明くさい言い回しを避け、短く言い切る
- 撮影機種などの具体的な機種名は出さない(スマホで撮影 など)。費用は円で書く
- 公開済み記事の誤りを指摘したり直したりはしない。記事に書いてある内容をそのまま使う

## 出すもの
指定のファイルに JSON 配列で書く(items のみ。id は付けない)。
最後の返答は、作った枚数(word / lesson)と、記事どうしで結論が食い違っていて新しい方を採った所があればその一言だけ。

5つの担当に出した指示(担当ごとの部分)

【担当 A】
/home/claude/work/BRIEF.md を読んで、その通りに作業してください。
担当の記事:DAY337, LOG341, LOG345, LOG348, LOG349, LOG352, LOG355, LOG358, LOG361, LOG363(フィジカルAI研究室シリーズ前半。π0.5・Runpod・LoRA・お手本収集など)
目安:word 12〜16枚、lesson 10〜14枚。
出力ファイル:/home/claude/work/out_A.json

【担当 B】
/home/claude/work/BRIEF.md を読んで、その通りに作業してください。
担当の記事:LOG368, LOG396, LOG401, LOG403, LOG407, LOG417, LOG419, LOG422, LOG436(フィジカルAI研究室シリーズ後半・GPU選び・道具選び。回数での評価、失敗の巻き戻し、人の修正、ゲームパッドでの補正など)
目安:word 12〜16枚、lesson 10〜14枚。
出力ファイル:/home/claude/work/out_B.json

【担当 C】
/home/claude/work/BRIEF.md を読んで、その通りに作業してください。
担当の記事:LOG351, LOG353, LOG356, LOG357, LOG359, LOG360, LOG362, LOG364, LOG366, LOG367, LOG370, LOG374, LOG379, LOG382, LOG383, LOG384(サービスロボット導入シミュレーション Log#1〜#16。配膳ロボットの試算と Unity の店)
目安:word 12〜16枚、lesson 12〜16枚。category は主に service(一般的なシミュレーション用語は sim、評価の考え方は eval でもよい)。
出力ファイル:/home/claude/work/out_C.json

【担当 D】
/home/claude/work/BRIEF.md を読んで、その通りに作業してください。
担当の記事:LOG391, LOG393, LOG397, LOG398, LOG400, LOG402, LOG404, LOG405, LOG409, LOG414, LOG415, LOG418, LOG423, LOG426, LOG434, LOG435, LOG440(サービスロボット導入シミュレーション Log#17〜#33。現場で測った数・画像認識で止まりを見つける話など)
目安:word 12〜16枚、lesson 12〜16枚。category は主に service(画像認識の一般用語は vision なども可)。
※ 同じシリーズの前半(Log#1〜#16)は別の担当が作っている。前半の記事に出てくる基本語(配膳ロボット・待ち時間など)は前半側に任せ、後半で新しく出てくる語と教訓を中心にすること。
出力ファイル:/home/claude/work/out_D.json

【担当 E】
/home/claude/work/BRIEF.md を読んで、その通りに作業してください。
担当の記事:DAY336, LOG375, LOG389, LOG392, LOG406, LOG412, LOG424, LOG433, LOG438, LOG439, LOG441, LOG442, LOG443(考察記事。報酬だけで学ぶ組立、協働ロボットの法律・資格、現場で扱えるか、自分で直す学び方、追加学習、照明、脳の分業、世界モデル、配膳ロボットが止まる理由、遠隔の人による修正、フィジカルAIの定義、LoRA と YOLO など)
目安:word 14〜18枚、lesson 10〜14枚。
出力ファイル:/home/claude/work/out_E.json

5つは3分から4分で返ってきました(A 203秒・B 169秒・C 217秒・D 182秒・E 226秒)。作った枚数と、記事どうしで結論が違っていて新しい方を採った所は次のとおりです。

担当単語判断の型新しい方を採った所
A1614
アームの手首が止まった原因は、発熱の推測(LOG337・LOG341)ではなく、爪がブロックに乗っていた(LOG345)。ずれを直す手は、学習を増やす(LOG345)ではなく、位置の違うお手本(LOG348)
B1614
ゲームパッドの1押しの刻みは、0.5°(LOG419)ではなく1°(LOG436)
C1616
試算と Unity のどちらを正とするかは、項目ごとに分ける(LOG362)。ロボットの道は、地図の上で自分で引く(LOG374)。すれ違いは、直したあと2晩比べて標準にした方(LOG384)
D1616
試算と3Dの店で詰まる場所が違った原因は、会計の店員を呼ぶ順番の違い(LOG405)。揺れ続けるロボットの拾い方は、ロボット自身に進み具合を見張らせる形(LOG440)
E1814なし
計8274

重なった16枚をまとめて、140枚にした

5つは別々に作っているので、同じ用語が何枚も出ました。π0.5 は A と B、LoRA は A と B と E が作っていました。用語の名前(カッコの前)が同じものと、名前は違っても同じ中身のもの(乱数シードと乱数の種、稼働率と利用率)を1枚にし、残す方に、外した方の出典の記事番号を足しました。既存の268枚と同じ用語はありませんでした。

重なりをまとめて番号を振ったスクリプト

import json,re
new=[]
for b in 'ABCDE':
    for x in json.load(open(f'out_{b}.json')): x['_b']=b; new.append(x)
# (batch, front) to drop -> merge its src into the kept one
drop={('A','π0.5(パイレイテンゴ)'):('B','π0.5(パイレイテンゴ)'),
 ('B','LoRA(ローラ)'):('A','LoRA(ローラ)'),('E','LoRA(ローラ・低ランク適応)'):('A','LoRA(ローラ)'),
 ('B','アクションチャンク(チャンク)'):('A','アクションチャンク(チャンク)'),
 ('A','損失(ロス・loss)'):('B','損失(ロス・loss)'),
 ('A','チェックポイント'):('B','チェックポイント'),
 ('B','リーダーアーム(リーダーとフォロワー)'):('A','リーダーアーム(リーダーとフォロワー)'),
 ('A','クラウドGPU(GPUの時間借り)'):('B','クラウドGPU(GPUの時間貸し)'),
 ('C','デッドロック(行き詰まり)'):('D','デッドロック(立ち往生・お見合い)'),
 ('D','下げ膳(バッシング)'):('C','下げ膳(下膳)'),
 ('D','中央値(メディアン)'):('C','中央値(メディアン)'),
 ('D','乱数の種(シード)'):('C','乱数シード(種)'),
 ('D','利用率(稼働率)'):('C','稼働率(利用率)'),
 ('B','世界モデル(ワールドモデル)'):('E','世界モデル(ワールドモデル)'),
 ('B','DAgger(ダガー)'):('E','DAgger(ダガー)'),
 ('C','SLAM(スラム)'):('E','SLAM(スラム)')}
idx={(x['_b'],x['front']):x for x in new}
for d,k in drop.items():
    a,b=idx[d],idx[k]
    s=[p.strip() for p in (b['src']+','+a['src']).split(',') if p.strip()]
    b['src']=','.join(sorted(set(s),key=lambda t:int(re.sub(r'\D','',t))))
keep=[x for x in new if (x['_b'],x['front']) not in drop]
w=[x for x in keep if x['type']=='word'];l=[x for x in keep if x['type']=='lesson']
for i,x in enumerate(w): x['id']=f'w{165+i:03d}'
for i,x in enumerate(l): x['id']=f'k{105+i:03d}'
out=[]
for x in w+l:
    x.pop('_b'); out.append({'id':x['id'],'category':x['category'],'sub':'','type':x['type'],'front':x['front'],'back':x['back'],'detail':x['detail'],**({'kw':x['kw']} if x['type']=='lesson' else {}),'key':bool(x.get('key')),'src':x['src']})
json.dump(out,open('new_items.json','w'),ensure_ascii=False,indent=1)
print(len(w),len(l),sum(x['key'] for x in w),sum(x['key'] for x in l))
print([x['detail'] for x in out if x['front'].startswith('π0.5')])
66 74 13 15
['米国の Physical Intelligence 社が重みを公開している視覚言語行動モデル。自分の機体のお手本で追加学習できる。記事では、上から見た画像と6つの関節角を受け取り、次の1秒ぶんの関節角を返すモデルとして使った。']

結果は単語66枚・判断の型74枚の140枚で、まず覚える(単語の印)は13枚、核心(判断の型の印)は15枚です。π0.5 の読みは、記事での書き方にそろえて パイレイテンゴ にしました。

作業ログ ― 別の AI 2つで、新しいカード140枚を元の記事と照らした

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

ファイルの一覧(3本)

01_sec03.json ― 分野 配膳ロボットの導入 を足し、データを408枚にした / 足した140枚のデータ(id・分野・種類・表・意味・説明・合否の語・印・出典)・59,299字

02_tools_template.html.txt ― ページの形 _tools/template.html(全文)・51,081字

03_tools_build_review.py.txt ― 書き出すスクリプト _tools/build_review.py(全文・変えていない)・3,339字

10月11日に前のカードを作ったとき、判断の型104枚を出典と照らすと40枚に直す所がありました。数字の取り違えや、計画を実施済みと書いていたものです。カードは声に出して何度も覚えるものなので、まちがいを覚えると直すのに手間がかかります。今回も、作った AI とは別の AI 2つに、70枚ずつ照らし合わせを任せました。作った側が自分で見直すと、同じ所を見落とすためです。

  • ねらい:記事と違う数字や、記事にない推し量りを、覚える前に取り除く
  • 変わったこと:140枚のうち18枚を直した(前半70枚で5枚、後半70枚で13枚)
  • 見込める効果:前回の判断の型の照らし合わせでは104枚中40枚に直す所があり、今回は140枚中18枚だった。作る段階で、既存の一覧と書き方の決まりを渡したことが効いた見込み。まちがいが残っていないかは、練習で引っかかった所を記録から見て確かめる

照らし合わせの指示(前半と後半で同じ形)

/home/claude/work/new_items.json の配列のうち、先頭から70件(0〜69番目)を、出典の記事と照合してください。記事は /home/claude/p2m-site/src/content/records/{src の記事番号}.md(src はカンマ区切りで複数ある)。書き方の決まりは /home/claude/work/BRIEF.md。

見ること:
- detail・back の数値・固有名詞・起きたことが記事と一致しているか(取り違え、計画を実施済みと書いている、記事にない推測の足し込み)
- word の一般的な定義が正しいか(用語として誤った説明になっていないか)
- lesson の back が、detail の実例から無理なく言える教訓か。kw が back の中核語と合っていて、言い換えが足りているか
- src が実際にその話が出てくる記事か(違えば直す)
- 文体:日本語だけ、鉤括弧なし、機種名なし

直すときは意味を変えずに最小限で。id と category と type は変えない。
結果を /home/claude/work/verified_1.json に、担当の70件だけを同じ形の JSON 配列で書く。
最後の返答は、直した件数と、直した所を1行ずつ(id:何を直したか)。

(後半の担当には、範囲を「70番目から最後まで(70〜139番目の70件)」、書き出し先を /home/claude/work/verified_2.json にした同じ指示を出した)

照らし合わせで直した18枚

id直したこと
w170
最後の文の、0.5秒分を送るか全部送るかで持ち上げの高さが変わった、は記事になかった。LOG345 に書いてある、1秒分を全部送る形に変えると手首が指令に届かなくなった、に直した
w174
出典から LOG419 を外した(リーダーアームが出てこない)。LOG348・LOG403 にした
w195
80cmの通路で床が途切れた、と通路の狭さが原因のように読めた。LOG362 では、前に計算した古い床が消えずに新しい床と重なって残ったのが原因
w200
70回が約1時間で終わる、は数字が違った。LOG383 の表では4本同時で約85分の見込み
k105
合否の語の1組目に、言い換えの つなぐ を足した
k111
合否の語の3組目(実機)を、教訓の中心の 分からない・判断できない の組に替えた
k112
4回続けて箱に入れた理由に、着いたかを確かめる幅を広げたことを足した。合否の語の3組目を、お手本・学習データの組に替えた
k115
実例の英語の FAIL を、不合格に直した
k117
合否の語の3組目(目標)を、不足・足りない の組に替えた
k118
電源を入れたままのたたんだ姿勢、を記事どおり、電源を入れたときのたたんだ姿勢に直した
k123
合否の語の2組目(記録)を、残らない・反映されない の組に替えた
k124
合否の語の1組目に、教訓の語の 決まった を足した
k151
店ごとに配置を動かしても消えなかった、と実施済みのように書いていた。記事どおり、消えない詰まりだったという見立ての形に直した
k152
合否の語の3組目(現場の実感)を、教訓の 仕事の量 の組に替えた
k165
98.2% が実機の結果と読めないよう、シミュレーションの中での結果と足した
k167
合否の語の3組目に、教訓の語の 次の動き を足した
k168
合否の語の3組目(凍結)を、教訓の 0% の組に替えた
k177
合否の語の2組目(関わる領域)を、教訓の 線を引く・線引き の組に替えた

**直した18枚のうち10枚は、判断の型の合否の語(kw)でした。**合否の語は、声に出した教訓の中にその語があるかで合格を決めます。教訓の文に入っていない語が合否の語になっていると、教訓を正しく言っても不合格になります。数字の取り違えより見つけにくく、練習してから気づくと、自分が言えていないのか、カードがおかしいのか分からなくなるところでした。

分野 配膳ロボットの導入 を足し、データを408枚にした

照らし合わせたカードを既存の268枚の後ろに足し、分野に 配膳ロボットの導入 を足しました。最初は 配膳ロボット・導入シミュレーション という名前にしましたが、スマホの画面で見出しが2行に折れたので短くしました。音声認識の聞き違いの補正(homophones)には、新しい用語の読みを足しました。

import json
d=json.load(open('src/robotics_review.json'))
v=json.load(open('verified_1.json'))+json.load(open('verified_2.json'))
ids=[x['id'] for x in v]; assert len(ids)==140==len(set(ids)), len(ids)
old={x['id'] for x in d['items']}; assert not old & set(ids)
d['categories'].append({'key':'service','label':'配膳ロボット・導入シミュレーション'})
cats={c['key'] for c in d['categories']}
assert all(x['category'] in cats for x in v)
d['items']+=v
d['updated']='2026-11-05'
d['note']='単語は一般的なロボティクス用語、判断の型は Pixels to Motors 開発ログ(DAY102〜LOG443)の実話から作成。'
d['homophones']+= [['パイレイテンゴ','パイレイ点5','パイレイテン5','パイ0.5','π0.5'],['ローラ','ローラー','lora'],['ダガー','dagger'],['ヨロ','yolo'],['スラム','slam'],['ルロボット','lerobot','ルーロボット'],['パッチコア','patchcore']]
json.dump(d,open('robotics_review.json','w'),ensure_ascii=False,indent=1)
from collections import Counter
print(len(d['items']),Counter(x['category'] for x in d['items']))

# スマホで見出しが2行に折れたので、分野の名前を短くした(このあと書き出し直し)
d=json.load(open('robotics_review.json'))
for c in d['categories']:
    if c['key']=='service': c['label']='配膳ロボットの導入'
json.dump(d,open('robotics_review.json','w'),ensure_ascii=False,indent=1)
408 Counter({'learning': 66, 'sim': 51, 'eval': 50, 'principles': 41, 'vision': 40, 'hardware': 39, 'society': 34, 'servo': 31, 'kinematics': 30, 'service': 26})

分野ごとの枚数は次のようになりました。

分野単語(前→後)判断の型(前→後)足した枚数
運動学・座標系18 → 1812 → 120
実機・サーボ制御17 → 2212 → 1710
シミュレーション・デジタルツイン
19 → 2910 → 2222
画像認識・カメラ19 → 2512 → 159
視覚サーボ・Pick&Place・受け渡し
18 → 1812 → 131
ロボット学習18 → 4112 → 2536
評価・データ管理20 → 2711 → 2319
設計原則・進め方18 → 1912 → 2211
社会実装・現場17 → 2011 → 146
配膳ロボットの導入0 → 110 → 1526
計164 → 230104 → 178140

ロボット学習が66枚でいちばん多くなりました。フィジカルAI研究室の π0.5 の記録で、学習の言葉(損失・エポック・学習率・チェックポイントなど)が一度に増えたためです。運動学・座標系は、新しい記事に新しい言葉がなく、増えていません。

足した140枚のデータ(id・分野・種類・表・意味・説明・合否の語・印・出典)

01_sec03.json59,299字・2,767行・json
[
 {
  "id": "w165",
  "category": "learning",
  "sub": "",
  "type": "word",
  "front": "LoRA(ローラ)",
  "back": "モデル本体は固定し、足した小さな部品だけを学習する方法",
別のタブで開く保存

作業ログ ― ロボティクス 声の単語帳の最初の画面を、分野の一覧にした

分野を選んでから、その中で3つの段階を練習する形に変えた

前の作りでは、段階(1 単語・2 説明・3 判断の型)を選び、その下の黒い選択肢で分野を選んでいました。分野は選べても、どの分野がどれだけ言えているかは見えませんでした。そこで順番を入れ替え、まず分野を選び、分野の中で段階を選ぶ形にしました。

  • ねらい:今日はこの分野だけ、という練習を1回の操作で始められるようにする。手薄な分野を、練習の前に見て選べるようにする
  • 変わったこと:開くと10の分野がカードで並ぶ。カードには、単語と判断の型の枚数、言えた数(最新の一致が80%以上のカード×段階の数)、苦手の数、進み具合の棒が出る。分野を押すと、見出しがその分野の名前になり、その中だけで3つの段階を練習する。一覧の下に、分野をまたぐ まず覚える・核心 と 全部 を置いた
  • 見込める効果:練習の記録に、分野ごとの回数が残るようになる。分野がかたよっていないか、言えた数が増えたかは、次に練習記録を集計するときに分野ごとに数えて確かめる。今はまだ見込み

言えた数は、単語は 1 単語 と 2 説明 の2回分、判断の型は 3 判断の型 の1回分で数えます。たとえば運動学・座標系は単語18・判断の型12なので、満点は 18×2+12=48 です。引き継いだ記録で、運動学・座標系は48のうち16が言えた状態から始まります。新しい分野の 配膳ロボットの導入 は、まだ0です。

分野を開くと、URL の後ろに #service のように分野の名前が付きます。ブラウザの戻る(iPhone では右へのスワイプ)で一覧に戻れて、読み込み直しても同じ分野が開きます。分野の中のカードからは、分野の名前の表示を外しました。見出しに出ているので、カードごとに同じ名前を出す必要がないためです。

スマホで見た最初の画面。10の分野のカードが1列に並ぶ
スマホで分野 配膳ロボットの導入 を開き、3 判断の型 を選んだところ。見出しが分野の名前になり、配膳ロボットで料理は早く届くのにスタッフを1人減らすと入口の待ちが延びた場面の問いと、教訓、35卓のファミレスでの実例が出ている
同じ分野の 1 単語。稼働率(利用率)のカードに、まず覚える の印が付いている

スマホ幅の画面で、分野の切り替えと戻るを確かめた

公開の前に、クラウドの作業環境のブラウザ(Playwright の Chromium)で、iPhone の画面の大きさにして動きを確かめました。分野を押す → 3 判断の型 → 戻る → まず覚える・核心 → ブラウザの戻る、の順に操作し、画面に出る枚数と URL、エラーが出ないかを見ました。

const {chromium,devices}=require('playwright');
(async()=>{const b=await chromium.launch();const c=await b.newContext({...devices['iPhone 13']});const p=await c.newPage();
const errs=[];p.on('pageerror',e=>errs.push(e.message));p.on('console',m=>{if(m.type()==='error')errs.push(m.text())});
await p.goto('file:///home/claude/work/build/ロボティクス復習.html');await p.waitForTimeout(500);
const S='/tmp/claude-0/-home-claude/9c16c0ef-d68a-5917-bf07-87e3620da361/scratchpad/';
await p.screenshot({path:S+'home.png',fullPage:true});
await p.click('.cat[data-k="service"]');await p.waitForTimeout(300);
await p.screenshot({path:S+'cat1.png'});
await p.click('#s3');await p.waitForTimeout(300);await p.screenshot({path:S+'cat3.png'});
console.log('info',await p.textContent('#info'),'hash',await p.evaluate(()=>location.hash));
await p.click('#back');await p.waitForTimeout(300);
console.log('home visible',await p.isVisible('#home'),'study',await p.isVisible('#study'));
await p.click('.cat[data-k="key"]');await p.click('#s1');console.log('key',await p.textContent('#info'));
await p.goBack();await p.waitForTimeout(200);console.log('after back home',await p.isVisible('#home'));
console.log('errs',errs);await b.close();})();
info 15枚(核心 2)・場面を見て、教訓を自分の言葉で hash #service
home visible true study false
key 66枚・用語から続けて言う
after back home true
errs []

最初に撮った画面では、分野を開いたときにページの見出し ロボティクスの見直し と、その下の小さな行の ロボティクスの見直し、さらに分野の名前が大きく並び、カードとマイクのボタンが画面の下へ押し出されていました。分野の名前をページの見出しに入れ、本文の中の分野の見出しはやめました。その分だけカードとマイクのボタンが上に上がりました。

作業ログ ― 分野のカードを、2列・サイトと同じ見た目にした

公開したあと、PC で開いた画面を見ながら5回直しました。

公開した直後の PC の画面。分野のカードが横に長い1列で縦に並び、1画面に6つしか入らない

カード1カラムで縦並びは見づらいね。2カラムに変更

PC の幅では2列にしました。スマホの幅(560px 未満)では、2列にすると分野の名前が3行に折れるので1列のままです。2列にすると、シミュレーション・デジタルツイン のような長い名前のカードだけ高さが伸び、進み具合の棒の位置が段ごとにずれました。カードの中を、枚数の行と、言えた数の行の2行に分け、棒をカードの下の端にそろえました。PC では一覧の幅を広げ(720px から 960px)、分野の名前が1行に収まるようにしました。

2列にした直後の画面。カードどうしの間隔が10pxで詰まって見える

カード間のギャップが狭いのでもう少し広げて

カードの間隔を、縦横とも10pxから20pxにしました。

カードをマウスオーバーしてもハンドが出ないけど?

カードは押せるボタンなのに、マウスの形が矢印のままでした。前の作りは iPhone で指で押す前提だったので、マウスの形を決めていませんでした。カードだけでなく、ページの中の押せるもの全部(段階・言い方・出す範囲の切り替え、戻る、マイク、保存)を、乗せると指の形にしました。

カードのUIデザインを合わせてほしい(カードにはドリップシャドウをつけて、枠線はなし)

pixelstomotors.com のシリーズのカードの作り(p2m-site の RecordCard.astro)を見ると、枠線はなく、影は 0 8px 16px rgba(0,0,0,.08)、角は 8px の丸みでした。分野のカードを同じ値にしました。ただ、黒い背景のダークモードでは、この薄い影はほとんど見えません。ダークモードのときだけ、影の濃さを .45 にしました。

もう少しマウスオーバーがわかりやすいように改良してください

マウスを乗せたときに、カードが4px 浮き、影が大きく濃くなり(0 16px 32px)、右の矢印が少し右へ動くようにしました。ダークモードでは影だけだと変化が小さかったので、カードの地も少し明るくしました(#1c1d22 → #23242a)。最初は進み具合の棒の地も濃くしましたが、棒の値が変わったように見えたので外しました。押した瞬間は、浮いたカードが少し沈みます。

  • ねらい:PC で、どれが押せるかと、どれを押そうとしているかを、見ただけで分かるようにする
  • 変わったこと:枠線をなくし、サイトのカードと同じ影と角の丸みにした。乗せると浮いて影が濃くなり、矢印が動く。指の形のマウスになる
  • 見込める効果:一覧の見た目が pixelstomotors.com と同じになり、サイトから来たときに別のものに見えない。押しまちがいが減るかは測っていない
ダークモードの PC の画面で、実機・サーボ制御 のカードにマウスを乗せたところ。そのカードだけ少し上に浮き、地が明るく、影が濃い

5回の直しはどれも、ページの形(_tools/template.html)の見た目の決まり(CSS)だけを変え、データは変えていません。直すたびに書き出し、スマホの幅の動きの確かめ(上のスクリプト)を通してから公開しました。

時刻変えたこと
robotics-review の記録
8:28
カードを足し、最初の画面を分野の一覧にした
b4a2ac7
8:31
PC の幅で2列、カードの中を2行に
a8bb768
8:34カードの間隔を20pxに0e5e21a
8:36
押せるもの全部を指の形のマウスに
78e8f2b
8:38
枠線をなくし、サイトのカードの影と角の丸みに
77fcb2b
8:40
乗せると浮く・矢印が動く・ダークモードで地が明るくなる
e30ce25

作業ログ ― ページの名前を ロボティクス 声の単語帳 にし、見出しをパンくずにした

公開した後、他の人も見る前提で名前を考え直しました。

ここをパンクズにした方が使いやすいかな それとヘッダーの右にPTMのロゴを追加してほしい

分野を開いたときのヘッダーは、大きな分野の名前の下に、小さくページの名前が出ていました。どこにいて、どこへ戻れるかが、ひと目では分かりません。上の行をパンくず(今いる場所までの道筋を、上の階層から並べた表示)にし、ページの名前 › の形にしました。ページの名前を押すと分野の一覧に戻ります。本文の中にあった戻るのボタンは、パンくずと役目が同じなので外しました。

ヘッダーの右には、pixelstomotors.com のフッターと同じ白いロゴ(p2m-site の public/site/pixelstomotors-logo-white.svg)を、ページの中に埋め込んで置きました。押すと pixelstomotors.com が新しいタブで開きます。スマホの幅(420px 以下)では、ロゴを少し小さくしています。

名前は、他の人も見る前提で5つの候補を出し、エイイチが ロボティクス 声の単語帳 を選びました。

候補伝わること
声で覚えるロボティクス
声に出すことと分野。いちばん短い
ロボティクスを声で覚えるカード
1つ目に、カードの形を足した
実装ログから学ぶロボティクス
実際の開発の記録から作ったこと。声で練習することは伝わらない
ロボティクス 声の単語帳(選んだ名前)
だれでも知っている単語帳の形
Robotics Speak Drill(声で覚えるロボティクス)
英語と日本語を並べる、サイトの見出しの形

見出し・パンくず・ブラウザのタブを新しい名前にし、分野を開いたときは、タブに 運動学・座標系|ロボティクス 声の単語帳 のように分野の名前も出るようにしました。URL(pixelstomotors.github.io/robotics-review/)と iCloud のフォルダの名前(ロボティクス復習)は変えていません。前に共有したリンクが切れないようにするためです。

  • ねらい:初めて開いた人が、何のページで、今どこにいて、どこへ戻れるかを、ヘッダーだけで分かるようにする
  • 変わったこと:名前が ロボティクス 声の単語帳 になった。分野の中では ロボティクス 声の単語帳 › 分野の名前 と出る。右に Pixels to Motors のロゴが出る
  • 見込める効果:ロゴから pixelstomotors.com へ移れるので、このページだけを開いた人が、元の研究の記録へたどれる。ロゴが押されたかは、まだ測る仕組みがない
PC で分野 運動学・座標系 を開いたところ。ヘッダーの上の行に ロボティクス 声の単語帳 › のパンくず、その下に大きく分野の名前、右に白い Pixels to Motors のロゴが出ている
時刻変えたこと
robotics-review の記録
9:00見出しをパンくずに、右にロゴa8e7b3b
9:02
ページの名前を ロボティクス 声の単語帳 に
8be363f

作業ログ ― 作り直したロボティクス 声の単語帳のコードと公開

ページの形 _tools/template.html(全文)

データ(/DATA/null)と練習記録の集計(/PROGRESS/{})は、書き出すときに build_review.py が埋め込みます。

02_tools_template.html.txt51,081字・520行・html
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="robots" content="noindex, nofollow">
<title>ロボティクス 声の単語帳</title>
<style>
別のタブで開く保存

書き出すスクリプト _tools/build_review.py(全文・変えていない)

03_tools_build_review.py.txt3,339字・73行・python
#!/usr/bin/env python3
"""robotics_review.json(データ)から ロボティクス復習.html(声に出して見直すページ)を作る。

使い方(このファイルがある _tools の1つ上のフォルダで):
    python3 _tools/practice_review.py   # 練習記録があれば先に集計
    python3 _tools/build_review.py

- ページの形は _tools/template.html(仕事で使っている「台本読み合わせ」ページと同じ作り)。データはページの中に埋め込む
別のタブで開く保存
ロボティクス復習.html を書き出しました(408項目・練習記録の集計 161件)

公開と、iCloud の控え

書き出した HTML を robotics-review の index.html として push すると、約1分で公開されます。公開した URL を読み込み、データの更新日が新しくなったことを確かめました。

cd /home/claude/robotics-review
cp /home/claude/work/build/ロボティクス復習.html index.html
git add index.html
git commit -q -m "カテゴリごとに学べる形に(最初にカテゴリの一覧と進み具合)・LOG443 までの記事から単語66・判断の型74を追加・配膳ロボットの導入のカテゴリを新設"
git push -q origin HEAD
git log --oneline -1
# 約1分後
curl -s https://pixelstomotors.github.io/robotics-review/ | grep -o '"updated":"[0-9-]*"' | head -1
b4a2ac7 カテゴリごとに学べる形に(最初にカテゴリの一覧と進み具合)・LOG443 までの記事から単語66・判断の型74を追加・配膳ロボットの導入のカテゴリを新設
"updated":"2026-11-05"

(このあとの見た目の直しの記録)
e30ce25 カテゴリのカードのマウスオーバーを分かりやすく(浮き上がる・影が濃くなる・矢印が右へ動く)
77fcb2b カテゴリのカードをサイトのカードにそろえる(枠線なし・影・角丸8px、乗せると影が濃くなる)
78e8f2b 押せるもの全部にマウスのハンドを出す・カテゴリのカードは乗せると枠が濃くなる
0e5e21a カテゴリの一覧のカードの間隔を広げる
a8bb768 カテゴリの一覧を2列に(PC・タブレットの幅)・件数と言えた数を2行に分けて高さをそろえる
b4a2ac7 カテゴリごとに学べる形に(最初にカテゴリの一覧と進み具合)・LOG443 までの記事から単語66・判断の型74を追加・配膳ロボットの導入のカテゴリを新設

iCloud の ロボティクス復習 フォルダには、robotics_review.json・_tools/template.html・ロボティクス復習.html の3つを書き戻し、README.md の作り方の記録と改善の記録に、この作り直しを1行ずつ足しました。

README.md に足した行(作り方の記録・改善の記録)

- 最初の画面はカテゴリの一覧(言えた数と苦手の数つき)。カテゴリを選ぶと、その中で3つの段階を練習する。まとめて練習するときは一覧の下の「まず覚える・核心」「全部」
- 2026-11-05 LOG443 までの記事(フィジカルAI研究室・導入シミュレーション・考察記事)から単語66・判断の型74を追加(計408枚)。全件を出典と照合し18件を修正。カテゴリ「配膳ロボットの導入」を新設。最初の画面をカテゴリの一覧にし、カテゴリごとに練習する形に変えた(URL の #カテゴリ で直接開ける・戻るで一覧へ)

あわせて、開発ログの範囲を DAY102〜DAY326 から DAY102〜LOG443 に、category の一覧に service を足した。

次は、新しい140枚を練習して練習記録を集計し、分野ごとの言えた数と、新しいカードで聞き違いが多い語を見ます。ロボット学習の66枚が一度に練習するには多ければ、分野の中を π0.5 と LoRA のまとまり、評価と人の直しのまとまりのように分けます。