✨ feat(docs): 添加飞拍控制系统宣传文稿与飞拍轨迹规划逻辑图
This commit is contained in:
138
docs/figures/icsp-algorithm-ppt.svg
Normal file
138
docs/figures/icsp-algorithm-ppt.svg
Normal file
@@ -0,0 +1,138 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="900" viewBox="0 0 1600 900" role="img" aria-labelledby="title desc">
|
||||
<title id="title">飞拍轨迹规划逻辑</title>
|
||||
<desc id="desc">用于 PPT 展示的飞拍轨迹规划逻辑图,展示输入、三次样条、约束检查、逐段缩放迭代、输出时间轴与采样层关系。</desc>
|
||||
<defs>
|
||||
<marker id="arrow-blue" markerWidth="14" markerHeight="14" refX="11" refY="7" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M2,2 L12,7 L2,12 Z" fill="#2563eb" />
|
||||
</marker>
|
||||
<marker id="arrow-green" markerWidth="14" markerHeight="14" refX="11" refY="7" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M2,2 L12,7 L2,12 Z" fill="#059669" />
|
||||
</marker>
|
||||
<marker id="arrow-amber" markerWidth="14" markerHeight="14" refX="11" refY="7" orient="auto" markerUnits="strokeWidth">
|
||||
<path d="M2,2 L12,7 L2,12 Z" fill="#d97706" />
|
||||
</marker>
|
||||
<linearGradient id="title-grad" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0" stop-color="#1d4ed8" />
|
||||
<stop offset="0.55" stop-color="#0f766e" />
|
||||
<stop offset="1" stop-color="#7c3aed" />
|
||||
</linearGradient>
|
||||
<filter id="soft-shadow" x="-10%" y="-10%" width="120%" height="130%">
|
||||
<feDropShadow dx="0" dy="8" stdDeviation="8" flood-color="#0f172a" flood-opacity="0.12" />
|
||||
</filter>
|
||||
<style>
|
||||
.bg { fill: #f8fafc; }
|
||||
.title { font: 700 42px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #0f172a; letter-spacing: 0; }
|
||||
.subtitle { font: 400 23px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #475569; letter-spacing: 0; }
|
||||
.section-title { font: 700 25px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #0f172a; letter-spacing: 0; }
|
||||
.label { font: 600 21px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #0f172a; letter-spacing: 0; }
|
||||
.small { font: 400 18px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #334155; letter-spacing: 0; }
|
||||
.tiny { font: 400 15px "Microsoft YaHei", "Segoe UI", Arial, sans-serif; fill: #475569; letter-spacing: 0; }
|
||||
.formula { font: 500 20px "Consolas", "Microsoft YaHei", monospace; fill: #0f172a; letter-spacing: 0; }
|
||||
.math { font: 500 25px "Cambria Math", "Times New Roman", "Microsoft YaHei", serif; fill: #0f172a; letter-spacing: 0; }
|
||||
.math-small { font: 500 21px "Cambria Math", "Times New Roman", "Microsoft YaHei", serif; fill: #0f172a; letter-spacing: 0; }
|
||||
.box { fill: #ffffff; stroke: #cbd5e1; stroke-width: 2; rx: 18; filter: url(#soft-shadow); }
|
||||
.box-blue { fill: #eff6ff; stroke: #93c5fd; stroke-width: 2; rx: 18; }
|
||||
.box-green { fill: #ecfdf5; stroke: #86efac; stroke-width: 2; rx: 18; }
|
||||
.box-amber { fill: #fffbeb; stroke: #fcd34d; stroke-width: 2; rx: 18; }
|
||||
.box-purple { fill: #f5f3ff; stroke: #c4b5fd; stroke-width: 2; rx: 18; }
|
||||
.pill { rx: 22; }
|
||||
.line { fill: none; stroke: #2563eb; stroke-width: 4; marker-end: url(#arrow-blue); }
|
||||
.line-green { fill: none; stroke: #059669; stroke-width: 4; marker-end: url(#arrow-green); }
|
||||
.line-amber { fill: none; stroke: #d97706; stroke-width: 4; marker-end: url(#arrow-amber); }
|
||||
.loop { fill: none; stroke: #d97706; stroke-width: 4; stroke-dasharray: 10 8; marker-end: url(#arrow-amber); }
|
||||
.axis { stroke: #64748b; stroke-width: 2; }
|
||||
.grid { stroke: #e2e8f0; stroke-width: 1; }
|
||||
.curve { fill: none; stroke: #2563eb; stroke-width: 5; stroke-linecap: round; }
|
||||
.curve2 { fill: none; stroke: #0f766e; stroke-width: 4; stroke-linecap: round; }
|
||||
.dot { fill: #1d4ed8; stroke: #ffffff; stroke-width: 4; }
|
||||
.dot-green { fill: #059669; stroke: #ffffff; stroke-width: 4; }
|
||||
.accent-bar { fill: url(#title-grad); rx: 4; }
|
||||
.divider { stroke: #cbd5e1; stroke-width: 2; stroke-dasharray: 8 8; }
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" width="1600" height="900" />
|
||||
<rect class="accent-bar" x="80" y="58" width="540" height="8" />
|
||||
<text class="title" x="80" y="120">飞拍轨迹规划逻辑</text>
|
||||
<text class="subtitle" x="80" y="158">用三次样条连接示教点,通过反复拉长超限段,让整条轨迹满足关节约束。</text>
|
||||
|
||||
<!-- 主流程卡片 -->
|
||||
<rect class="box-blue" x="80" y="215" width="255" height="180" />
|
||||
<text class="section-title" x="112" y="258">输入</text>
|
||||
<text class="small" x="112" y="312">示教点</text>
|
||||
<text class="small" x="112" y="346">关节约束</text>
|
||||
|
||||
<path class="line" d="M335 305 H420" />
|
||||
|
||||
<rect class="box" x="420" y="215" width="285" height="180" />
|
||||
<text class="section-title" x="452" y="258">初始时间轴</text>
|
||||
<text class="small" x="452" y="318">按相邻点距离</text>
|
||||
<text class="small" x="452" y="352">估算每段时长</text>
|
||||
|
||||
<path class="line" d="M705 305 H790" />
|
||||
|
||||
<rect class="box-green" x="790" y="215" width="305" height="180" />
|
||||
<text class="section-title" x="822" y="258">三次样条</text>
|
||||
<text class="small" x="822" y="318">连接所有示教点</text>
|
||||
<text class="small" x="822" y="352">形成连续轨迹</text>
|
||||
|
||||
<path class="line" d="M1095 305 H1180" />
|
||||
|
||||
<rect class="box-amber" x="1180" y="215" width="340" height="180" />
|
||||
<text class="section-title" x="1212" y="258">约束检查</text>
|
||||
<text class="small" x="1212" y="312">速度 / 加速度 / jerk</text>
|
||||
<text class="small" x="1212" y="346">找出超限段</text>
|
||||
|
||||
<!-- 曲线示意 -->
|
||||
<rect class="box" x="105" y="455" width="585" height="285" />
|
||||
<text class="section-title" x="135" y="497">轨迹形状:经过原始示教点</text>
|
||||
<line class="grid" x1="150" y1="680" x2="650" y2="680" />
|
||||
<line class="grid" x1="150" y1="620" x2="650" y2="620" />
|
||||
<line class="grid" x1="150" y1="560" x2="650" y2="560" />
|
||||
<line class="axis" x1="150" y1="690" x2="650" y2="690" />
|
||||
<line class="axis" x1="150" y1="690" x2="150" y2="535" />
|
||||
<path class="curve" d="M165 665 C205 618, 240 565, 285 585 C340 610, 375 695, 425 645 C475 595, 500 515, 558 548 C595 570, 620 625, 640 600" />
|
||||
<circle class="dot" cx="165" cy="665" r="9" />
|
||||
<circle class="dot" cx="285" cy="585" r="9" />
|
||||
<circle class="dot" cx="425" cy="645" r="9" />
|
||||
<circle class="dot" cx="558" cy="548" r="9" />
|
||||
<circle class="dot" cx="640" cy="600" r="9" />
|
||||
<text class="tiny" x="160" y="720">q0</text>
|
||||
<text class="tiny" x="277" y="720">q1</text>
|
||||
<text class="tiny" x="417" y="720">q2</text>
|
||||
<text class="tiny" x="550" y="720">q3</text>
|
||||
<text class="tiny" x="630" y="720">qn</text>
|
||||
<text class="small" x="135" y="777">点位不变,主要调整每段用时。</text>
|
||||
|
||||
<!-- 核心公式卡片 -->
|
||||
<rect class="box-purple" x="735" y="455" width="785" height="285" />
|
||||
<text class="section-title" x="765" y="497">迭代逻辑</text>
|
||||
<text class="label" x="780" y="560">1. 计算每段是否超限</text>
|
||||
<text class="label" x="780" y="620">2. 超限段按比例拉长时间</text>
|
||||
<text class="label" x="780" y="680">3. 重新生成样条,再检查一次</text>
|
||||
<text class="math-small" x="1195" y="590">
|
||||
<tspan>scale</tspan><tspan baseline-shift="sub" font-size="14">i</tspan>
|
||||
<tspan> = max(s</tspan><tspan baseline-shift="sub" font-size="14">v</tspan><tspan>, s</tspan><tspan baseline-shift="sub" font-size="14">a</tspan><tspan>, s</tspan><tspan baseline-shift="sub" font-size="14">j</tspan><tspan>)</tspan>
|
||||
</text>
|
||||
<text class="math-small" x="1195" y="650">
|
||||
<tspan>T</tspan><tspan baseline-shift="sub" font-size="14">i</tspan>
|
||||
<tspan> ← T</tspan><tspan baseline-shift="sub" font-size="14">i</tspan>
|
||||
<tspan> * scale</tspan><tspan baseline-shift="sub" font-size="14">i</tspan>
|
||||
</text>
|
||||
|
||||
<!-- 迭代回路 -->
|
||||
<path class="loop" d="M1350 395 C1350 430, 1270 435, 1190 425 C1075 410, 988 410, 945 397" />
|
||||
<text class="small" x="1015" y="435" fill="#92400e">未收敛就继续拉长、重算</text>
|
||||
|
||||
<!-- 输出层 -->
|
||||
<rect class="box-green" x="80" y="805" width="330" height="58" />
|
||||
<text class="label" x="110" y="842">输出时间轴</text>
|
||||
<path class="line-green" d="M410 834 H515" />
|
||||
<rect class="box" x="515" y="790" width="430" height="88" />
|
||||
<text class="label" x="545" y="826">按周期采样</text>
|
||||
<text class="tiny" x="545" y="856">后续模块生成稠密轨迹点</text>
|
||||
<path class="line-green" d="M945 834 H1050" />
|
||||
<rect class="box-amber" x="1050" y="790" width="470" height="88" />
|
||||
<text class="label" x="1080" y="826">运行时下发</text>
|
||||
<text class="tiny" x="1080" y="856">进入飞拍执行链路</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
Reference in New Issue
Block a user