diff --git a/src/components/LabGuide.astro b/src/components/LabGuide.astro
new file mode 100644
index 0000000..51bc453
--- /dev/null
+++ b/src/components/LabGuide.astro
@@ -0,0 +1,238 @@
+---
+// /series6（フィジカルAI研究室）の見出しの下に置く解説（2026-11-07）
+// 1 研究室の構成：机の上・Mac・借りた GPU の3か所と、その間を行き来するもの（図は HTML で組む。AI も読めるように）
+// 2 いま回している実験：お手本 → 学習 → 実機 → 人の直し → 直した成功を学習に足す、のループと各段の数字
+// 3 使っている技術：π0.5・追加学習（LoRA）・借りる GPU・推論サーバー・巻き戻しと人の直し
+// 写真は public/site/lab/（desk.webp は 2026-10-29 の横からの録画 IMG_4215.MOV の80秒目、
+// top-camera.webp は corr_v5 のお手本 pi05_20261106_183926 の真ん中のコマ。元は iCloud の
+// フィジカルAI研究室を作る/series6_guide_images/）
+// 数字はどれも LOG の記録の値。新しい LOG で数字が変わったら、ここも書き換える
+type Link = { log: string; slug: string; t: string };
+
+const zones = [
+  { key: 'desk', name: '机の上', img: true, items: [
+    { h: 'mechArm 270', p: '6つの関節を持つ小型のロボットアーム。中の Raspberry Pi が指令を受けて関節を動かします。' },
+    { h: '上のカメラ', p: 'スマホを真上に付けて、マットとブロックと箱を撮ります。π0.5 が見るのはこの画像だけです。' },
+    { h: 'ゲームパッド', p: 'AI が失敗しかけたとき、人が関節を直すのに使います。3,198円の互換品です。' },
+  ] },
+  { key: 'mac', name: '手元の Mac', items: [
+    { h: '記録と中継', p: 'カメラの画像と関節の角度を1秒10コマで記録し、借りた GPU に送り、返ってきた動きをアームへ渡します。' },
+    { h: 'AI と組み立てる', p: '手順と分析は Claude、アームを動かすプログラムは Claude Code と一緒に書いています。' },
+  ] },
+  { key: 'gpu', name: '時間で借りる GPU', items: [
+    { h: 'Runpod の A40', p: 'GPU のメモリは 48GB、1時間あたり約98円。π0.5 の学習と推論は、すべてここで行います。' },
+    { h: 'Hugging Face', p: '学習済みのモデル（6.3GB）の置き場所。GPU を借りるたびに、ここから13秒で取ってきます。' },
+  ] },
+];
+
+const loop: { h: string; num: string; unit: string; p: string; links: Link[] }[] = [
+  { h: 'お手本を集める', num: '19', unit: '本',
+    p: '要所の姿勢だけ手でアームに教え、間は再生でつないで録りました。ブロックの置き場所は5か所です。',
+    links: [
+      { log: 'LOG349', slug: 'drag-teach-waypoint-replay', t: '手で教えた動きを再生' },
+      { log: 'LOG352', slug: 'teach-replay-19-demos', t: 'お手本19本' },
+    ] },
+  { h: 'π0.5 に覚えさせる', num: '4,000', unit: 'ステップ',
+    p: '借りた A40 で追加学習し、学習の誤差（loss）は 0.0858 から 0.0037 に下がりました。',
+    links: [
+      { log: 'LOG341', slug: 'pi05-mecharm-lora-2000-steps', t: '最初の学習' },
+      { log: 'LOG355', slug: 'pi05-retrain-five-positions', t: '5か所で学習し直す' },
+      { log: 'LOG358', slug: 'pi05-learned-the-pauses', t: '待ち時間まで覚えた' },
+    ] },
+  { h: '実機で動かす', num: '9/15', unit: '回',
+    p: '3か所に5回ずつブロックを置き、人が手を出さずに箱へ入れた回数です。腕を伸ばしきる位置は5回中1回でした。',
+    links: [
+      { log: 'LOG361', slug: 'pi05-first-block-in-box', t: '初めて箱に入れた' },
+      { log: 'LOG401', slug: 'pi05-weak-position-d', t: '回数で測る' },
+    ] },
+  { h: '失敗しかけたら人が直す', num: '13', unit: '秒',
+    p: '動きを巻き戻し、ゲームパッドで関節を直して AI に戻すまでの、1回あたりの中央の値です。キーで直していた頃は41〜51秒でした。',
+    links: [
+      { log: 'LOG403', slug: 'rewind-and-correct-pi05', t: '巻き戻しの仕組み' },
+      { log: 'LOG446', slug: 'gamepad-correction-mecharm-270-settled', t: 'ゲームパッドの形' },
+      { log: 'LOG450', slug: 'gamepad-fixes-mecharm-270-ai-in-13-seconds', t: '1回13秒に' },
+    ] },
+  { h: '直した成功を学習に足す', num: '11', unit: '本',
+    p: '人が直して成功した記録をお手本に足し、前のモデルから1,500ステップ続けて学び直します。',
+    links: [
+      { log: 'LOG417', slug: 'retrain-pi05-with-human-corrections', t: '直した5回で学び直す' },
+      { log: 'LOG422', slug: 'retrained-pi05-still-needs-human-corrections', t: 'それでも直しが要った' },
+    ] },
+];
+
+const tech: { name: string; sub: string; p: string; fig?: boolean; links: Link[] }[] = [
+  { name: 'π0.5', sub: 'Physical Intelligence', fig: true,
+    p: '米国の Physical Intelligence 社が公開している、ロボット用の AI のモデルです。上のカメラの画像、6つの関節と爪の角度、指示文（赤いブロックを白い箱に入れる）を受け取り、次の1秒ぶん（10コマ）の関節の角度を返します。どの順番で動くかを書いたプログラムはありません。',
+    links: [{ log: 'LOG337', slug: 'pi05-mecharm-demo-to-inference', t: 'mechArm 270 で動かすまでの流れ' }] },
+  { name: '追加学習', sub: 'LoRA',
+    p: 'たくさんのロボットのデータで学習済みの π0.5 に、mechArm 270 のお手本だけを足して覚えさせます。モデル全体ではなく、足した小さな部品だけを学習するので、A40 を1枚借りれば足ります。',
+    links: [{ log: 'LOG341', slug: 'pi05-mecharm-lora-2000-steps', t: '予測がお手本とほぼ一致' }] },
+  { name: '時間で借りる GPU', sub: 'Runpod',
+    p: 'π0.5 は NVIDIA の GPU を積んだ Linux のマシンでしか動かず、Mac では動きません。そこで GPU を時間単位で借ります。学習は自動で回し、終わるとモデルを持ち帰って、借りたマシンを消します。',
+    links: [{ log: 'LOG401', slug: 'pi05-weak-position-d', t: 'モデルを Hugging Face に置いた' }] },
+  { name: '推論サーバー', sub: 'Remote inference',
+    p: '借りたマシンの上で π0.5 を起動し、Mac とは SSH の中継でつなぎます。π0.5 の計算は1回平均97ミリ秒、Mac から送って答えが返るまでの往復は391ミリ秒でした（A40）。',
+    links: [{ log: 'LOG326', slug: 'openpi-remote-inference-first-run', t: '借りた GPU で初めて動かした' }] },
+  { name: '巻き戻しと人の直し', sub: 'Human correction',
+    p: '米国の MicroFactory の卓上ロボットを参考にしました。失敗しかけた区間をアームごと巻き戻し、人が関節を直してから AI に戻します。直す人の手はカメラに写らないので、直した動きをそのまま学習データにできます。',
+    links: [{ log: 'LOG403', slug: 'rewind-and-correct-pi05', t: '直した動きだけを学習データにする' }] },
+];
+---
+<section class="sec lg"><div class="panel">
+  <h2 class="sec-h">研究室の構成 | Setup</h2>
+  <p class="lg-lead">机の上のアーム、手元の Mac、時間で借りる GPU の3か所でできています。AI の学習と推論は、すべて借りた GPU の上で行っています。</p>
+  <div class="lg-map">
+    {zones.map((z, i) => (
+      <>
+        {i > 0 && (
+          <div class="lg-flow" aria-hidden="true">
+            <span class="lg-flow-go"><i class="ms">arrow_forward</i>{i === 1 ? '画像と関節の角度' : '画像・角度・指示文'}</span>
+            <span class="lg-flow-back"><i class="ms">arrow_back</i>次の1秒の動き</span>
+          </div>
+        )}
+        <div class={`lg-zone lg-zone-${z.key}`}>
+          <p class="lg-zone-name">{z.name}</p>
+          {z.img && <img class="lg-desk" src="/site/lab/desk.webp" alt="マットの上の mechArm 270 が赤いブロックをつかみ、右に白い箱が置いてある" width="1200" height="681" loading="lazy" />}
+          <dl class="lg-items">
+            {z.items.map((it) => (<div><dt>{it.h}</dt><dd>{it.p}</dd></div>))}
+          </dl>
+        </div>
+      </>
+    ))}
+  </div>
+  <p class="lg-flow-text">Mac は上のカメラの画像と関節の角度を、指示文と一緒に借りた GPU へ送ります。π0.5 は次の1秒ぶんの関節の角度を返し、Mac がそれをアームへ渡します。</p>
+</div></section>
+
+<section class="sec lg"><div class="panel">
+  <h2 class="sec-h">いま回している実験 | Experiment</h2>
+  <p class="lg-lead">赤いブロックをつかんで、白い箱に入れる。この1つの作業を π0.5 に覚えさせ、失敗しかけた所を人が直し、直した動きをまた学習に回しています。人の直しが要らなくなるまで、このループを回します。</p>
+  <ol class="lg-loop">
+    {loop.map((s, i) => (
+      <li class="lg-step">
+        <span class="lg-step-no">{String(i + 1).padStart(2, '0')}</span>
+        <h3 class="lg-step-h">{s.h}</h3>
+        <p class="lg-num">{s.num}<small>{s.unit}</small></p>
+        <p class="lg-p">{s.p}</p>
+        <ul class="lg-links">
+          {s.links.map((l) => <li><a href={`/record/${l.slug}`} title={l.t} aria-label={`${l.log} ${l.t}`}><b>{l.log}</b><i class="ms">arrow_forward</i></a></li>)}
+        </ul>
+      </li>
+    ))}
+  </ol>
+  <p class="lg-return"><i class="ms" aria-hidden="true">replay</i>05 のあとは 03 に戻り、学び直したモデルで実機をもう一度動かします</p>
+  <p class="lg-note">数字は 2026年11月6日（LOG450）までの記録の値です。</p>
+</div></section>
+
+<section class="sec lg"><div class="panel">
+  <h2 class="sec-h">使っている技術 | Technology</h2>
+  <dl class="lg-tech">
+    {tech.map((t) => (
+      <div class="lg-tech-row">
+        <dt><span class="lg-tech-name">{t.name}</span><span class="lg-tech-sub">{t.sub}</span></dt>
+        <dd>
+          <div class={t.fig ? 'lg-tech-body has-fig' : 'lg-tech-body'}>
+            <div>
+              <p class="lg-p">{t.p}</p>
+              <ul class="lg-links">
+                {t.links.map((l) => <li><a href={`/record/${l.slug}`}><b>{l.log}</b>{l.t}<i class="ms">arrow_forward</i></a></li>)}
+              </ul>
+            </div>
+            {t.fig && (
+              <figure class="lg-fig">
+                <img src="/site/lab/top-camera.webp" alt="真上のカメラの画像。mechArm 270 の爪が赤いブロックをつかみ、右に白い箱がある" width="384" height="216" loading="lazy" />
+                <figcaption>π0.5 に渡している、上のカメラの画像（384×216）</figcaption>
+              </figure>
+            )}
+          </div>
+        </dd>
+      </div>
+    ))}
+  </dl>
+</div></section>
+
+<style>
+  .lg { padding-bottom: 0; }
+  .lg-lead { margin: -16px 0 32px; max-width: 46em; font: 400 16px/28px var(--sans); color: var(--ink-2); }
+  .lg-p { margin: 0; font: 400 15px/27px var(--sans); color: var(--ink-2); word-break: auto-phrase; text-wrap: pretty; }
+
+  /* 1 構成：3つの場所と、その間を行き来するもの */
+  .lg-map { display: grid; grid-template-columns: minmax(0, 1.35fr) 112px minmax(0, 1fr) 112px minmax(0, 1fr); align-items: start; }
+  .lg-zone { padding: 24px; border-radius: 8px; background: var(--bg); }
+  .lg-zone-gpu { background: var(--dark); color: #fff; }
+  .lg-zone-name { margin: 0 0 16px; font: 700 18px/28px var(--sans); color: var(--ink); }
+  .lg-zone-gpu .lg-zone-name { color: #fff; }
+  .lg-desk { display: block; width: 100%; height: auto; margin: 0 0 16px; border-radius: 6px; }
+  .lg-items { margin: 0; display: grid; gap: 14px; }
+  .lg-items dt { font: 700 15px/24px var(--sans); color: var(--ink); }
+  .lg-items dd { margin: 2px 0 0; font: 400 14px/24px var(--sans); color: var(--ink-2); word-break: auto-phrase; }
+  .lg-zone-gpu .lg-items dt { color: #fff; }
+  .lg-zone-gpu .lg-items dd { color: #c8c8c2; }
+  .lg-flow { display: grid; align-content: start; gap: 28px; padding: 72px 8px 0; }
+  .lg-flow span { display: grid; justify-items: center; gap: 4px; text-align: center; font: 500 12px/18px var(--sans); color: var(--ink-2); word-break: auto-phrase; }
+  .lg-flow .ms { font-size: 28px; color: var(--ink); }
+  .lg-flow-back .ms { color: var(--ink-3); }
+  .lg-flow-text { margin: 24px 0 0; max-width: 46em; font: 400 14px/24px var(--sans); color: var(--ink-3); }
+
+  /* 2 実験のループ */
+  .lg-loop { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; }
+  .lg-step { display: flex; flex-direction: column; padding: 20px; border-radius: 8px; border-top: 4px solid var(--dark); background: var(--bg); }
+  .lg-step-no { font: 700 13px/20px var(--sans); color: var(--ink-3); font-variant-numeric: tabular-nums; }
+  .lg-step-h { margin: 4px 0 12px; font: 700 16px/24px var(--sans); color: var(--ink); word-break: auto-phrase; }
+  .lg-num { margin: 0 0 12px; font: 700 40px/1 var(--sans); color: var(--ink); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
+  .lg-num small { margin-left: 4px; font: 600 14px/1 var(--sans); color: var(--ink-2); letter-spacing: 0; }
+  .lg-step .lg-p { font-size: 14px; line-height: 24px; }
+  .lg-step .lg-links { margin-top: auto; padding-top: 16px; gap: 6px; }
+  .lg-step .lg-links a { gap: 4px; padding: 5px 8px 5px 10px; }
+  .lg-step .lg-links a { background: #fff; }
+  .lg-step .lg-links a:hover { background: #e6e6e6; }
+  .lg-return { display: flex; align-items: center; gap: 10px; margin: 12px 0 0; padding: 14px 20px; border-radius: 8px; background: var(--dark); color: #fff; font: 600 15px/24px var(--sans); }
+  .lg-return .ms { font-size: 22px; }
+  .lg-note { margin: 16px 0 0; font: 400 13px/22px var(--sans); color: var(--ink-3); }
+
+  /* 3 技術 */
+  .lg-tech { margin: 0; display: grid; }
+  .lg-tech-row { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 32px; padding: 28px 0; border-top: 1px solid #e6e6e6; }
+  .lg-tech-row:last-child { padding-bottom: 0; }
+  .lg-tech-row dt { display: grid; align-content: start; gap: 2px; }
+  .lg-tech-name { font: 700 20px/30px var(--sans); color: var(--ink); }
+  .lg-tech-sub { font: 400 13px/20px var(--sans); color: var(--ink-3); }
+  .lg-tech-row dd { margin: 0; }
+  .lg-tech-body { max-width: 52em; }
+  .lg-tech-body.has-fig { max-width: none; display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 32px; align-items: start; }
+  .lg-fig { margin: 0; }
+  .lg-fig img { display: block; width: 100%; height: auto; border-radius: 6px; }
+  .lg-fig figcaption { margin: 8px 0 0; font: 400 12px/18px var(--sans); color: var(--ink-3); }
+
+  /* 記録へのリンク（/series7 の解説と同じ形） */
+  .lg-links { list-style: none; margin: 14px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
+  .lg-links a { display: inline-flex; align-items: center; gap: 8px; padding: 7px 10px 7px 12px; border-radius: 4px; background: #f2f2f2;
+    color: var(--ink); font: 500 13px/20px var(--sans); text-decoration: none; transition: background .15s; }
+  .lg-links a b { font-weight: 700; font-variant-numeric: tabular-nums; }
+  .lg-links a .ms { font-size: 15px; color: var(--ink-3); transition: transform .2s; }
+  .lg-links a:hover { background: #e6e6e6; }
+  .lg-links a:hover .ms { transform: translateX(2px); }
+
+  @media (max-width: 1199px) {
+    .lg-loop { grid-template-columns: repeat(3, minmax(0, 1fr)); }
+  }
+  @media (max-width: 1023px) {
+    .lg-map { grid-template-columns: minmax(0, 1fr); }
+    .lg-flow { grid-auto-flow: column; justify-content: center; gap: 32px; padding: 12px 0; }
+    .lg-zone { align-self: stretch; }
+    .lg-flow span { display: flex; align-items: center; gap: 6px; }
+    .lg-flow .ms { font-size: 22px; transform: rotate(90deg); }
+    .lg-loop { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+    .lg-tech-row { grid-template-columns: minmax(0, 1fr); gap: 8px; }
+    .lg-tech-body.has-fig { grid-template-columns: minmax(0, 1fr); gap: 20px; }
+    .lg-fig { max-width: 384px; }
+  }
+  @media (max-width: 599px) {
+    .lg-lead { margin: -16px 0 24px; font-size: 15px; line-height: 26px; }
+    .lg-zone { padding: 20px 18px; }
+    .lg-flow { gap: 16px; }
+    .lg-loop { grid-template-columns: minmax(0, 1fr); }
+    .lg-num { font-size: 36px; }
+    .lg-tech-row { padding: 22px 0; }
+    .lg-tech-name { font-size: 18px; line-height: 28px; }
+  }
+</style>
diff --git a/src/lib/records.ts b/src/lib/records.ts
index 991477d..440d586 100644
--- a/src/lib/records.ts
+++ b/src/lib/records.ts
@@ -44,7 +44,7 @@ export type SimTab = { id: string; task: string; place: string; src: string; tit
 
 // シリーズのページ（URL → 記事のシリーズ名）。Studio の一覧の絞り込み条件と同じ
 // intro はシリーズのページの見出しの下に出す説明（ないシリーズは出さない）
-export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; points?: { h: string; items: string[] }[]; guide?: boolean; thinking?: boolean; serving?: boolean; vision?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
+export const SERIES_PAGES: Record<string, { series: string; title: string; pageTitle: string; limit: number; intro?: string; points?: { h: string; items: string[] }[]; guide?: boolean; thinking?: boolean; serving?: boolean; vision?: boolean; lab?: boolean; sim?: { src: string; title: string; note: string; obs?: { src: string; title: string; label: string; note: string; points: string[] }; tabs?: SimTab[] } }> = {
   series1: { series: 'HRI', title: 'Drug Delivery Robot | 薬剤搬送ロボットハコブくん', pageTitle: 'Series1 | 薬剤搬送ロボット', limit: 12,
     intro: '病院で薬を運ぶロボット「ハコブくん」を題材に、人とロボットの関わり（HRI）を設計している記録です。病院で使う画面（UI）の設計、Unity での自律移動、Fusion での形づくり、分身ロボット（アバター）の考察までを、4コママンガと一緒に残しています。' },
   series2: { series: 'R2R2R', title: 'R2R2R | デジタルツイン学習-R2R2R（Real to Render to Real）', pageTitle: 'Series2 | R2R2R', limit: 12,
@@ -59,7 +59,7 @@ export const SERIES_PAGES: Record<string, { series: string; title: string; pageT
     intro: 'フィジカルAIの研究をひとりで続けるために、AIと一緒に作ってきた仕組みの記録です。サイトの移行、動画の制作、記録の整理など、研究の外側の作業をどう回しているかを残しています。' },
   series5: { series: '考察記事', title: 'Deep Dive | 考察記事', pageTitle: 'Series5 | 考察記事', limit: 12, thinking: true,
     intro: '実装の記録とは別に、フィジカルAIやロボットについて、なぜそうなるのか、何を意味するのかを考えた記事です。論文や企業の発表、市場の動きを読み、対話の形で考えたことを、外れた議論も含めてそのまま残しています。' },
-  series6: { series: 'フィジカルAI研究室', title: 'Physical AI Lab | フィジカルAI研究室', pageTitle: 'Series6 | フィジカルAI研究室', limit: 12, guide: true,
+  series6: { series: 'フィジカルAI研究室', title: 'Physical AI Lab | フィジカルAI研究室', pageTitle: 'Series6 | フィジカルAI研究室', limit: 12, guide: true, lab: true,
     intro: 'ロボットアームが動きを覚える環境を、自宅にひとりで作っている記録です。机の上のアームでお手本の動きを集め、ロボット用のAI（Physical Intelligence の π0.5 など）に学習させ、実機で動かして確かめます。借りたGPUの種類・時間・費用も含めて、誰でも同じ手順で始められる形で残しています。' },
   series7: { series: '画像認識・物体検出', title: 'Image recognition and Object detection | 画像認識と物体検出', pageTitle: 'Series7 | 画像認識と物体検出', limit: 12, vision: true,
     intro: 'ロボットのカメラが物を見つける仕組みを、下の層から学び直している記録です。画素の数字、色の見分け方、しきい値、輪郭、特徴点といった昔からの手法を、机の上のアームを撮った写真で1つずつ測って確かめ、その上で SAM 3 のような新しいモデルも試します。評価の物差し（IoU・適合率・再現率など）を先に決め、結果は数字で残しています。' },
diff --git a/src/pages/[series].astro b/src/pages/[series].astro
index e760a06..8cb7246 100644
--- a/src/pages/[series].astro
+++ b/src/pages/[series].astro
@@ -9,6 +9,7 @@ import ServingBanner from '../components/ServingBanner.astro';
 import SeriesSheet from '../components/SeriesSheet.astro';
 import SeriesDoc from '../components/SeriesDoc.astro';
 import VisionGuide from '../components/VisionGuide.astro';
+import LabGuide from '../components/LabGuide.astro';
 import { seriesCards, SERIES_PAGES } from '../lib/records';
 import { media } from '../lib/media';
 import staticPages from '../data/static.json';
@@ -56,6 +57,7 @@ const jsonLd = {
     ))}
   </div></section>
   {conf.vision && <VisionGuide />}
+  {conf.lab && <LabGuide />}
   {conf.sim && (
     <section class="sec s-sim" data-ev-area="sim"><div class="panel">
       <h2 class="sec-h">試算を試す | Simulator</h2>
