d8a80f6272
이름만 다른(표기 변형) [[위키링크]]를 대상 문서의 canonical 제목으로 치환해 끊겼던 1,200개 링크를 연결. 제목/파일명 정규화 일치만 적용하고 별칭 매칭은 과병합 위험으로 제외(애매성 가드). 원본은 _link_reconcile_backup/ 에 백업. 도구: Datacollect/scripts/link_reconcile_apply.mjs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
209 lines
7.5 KiB
Markdown
209 lines
7.5 KiB
Markdown
---
|
||
id: wiki-2026-0508-robotics
|
||
title: Robotics
|
||
category: 10_Wiki/Topics
|
||
status: verified
|
||
canonical_id: self
|
||
aliases: [Robotic Systems, Robot Engineering, Robotics Foundations]
|
||
duplicate_of: none
|
||
source_trust_level: A
|
||
confidence_score: 0.95
|
||
verification_status: applied
|
||
tags: [robotics, perception, planning, control, foundation-models, embodied-AI]
|
||
raw_sources: []
|
||
last_reinforced: 2026-05-10
|
||
github_commit: pending
|
||
tech_stack:
|
||
language: Python/C++
|
||
framework: ROS2/Isaac/MuJoCo/PyTorch
|
||
---
|
||
|
||
# Robotics
|
||
|
||
## 매 한 줄
|
||
> **"매 sense → think → act 의 closed loop 의 physical world 의 agent."**. Robotics 의 perception (vision/lidar/IMU), planning (motion + task), control (PID → MPC → RL) 의 stack 의, 매 2024-2026 inflection 의 vision-language-action (VLA) foundation models — Google RT-2, Physical Intelligence π0, Figure 02 — 의 generalist embodied AI 의 era 의 driving.
|
||
|
||
## 매 핵심
|
||
|
||
### 매 classical stack
|
||
1. **Perception**: SLAM (ORB-SLAM3, Kimera), object detection, pose estimation.
|
||
2. **State estimation**: Kalman filter, factor graphs (GTSAM).
|
||
3. **Planning**:
|
||
- Task: PDDL, behavior trees, LLM planners.
|
||
- Motion: RRT*, trajectory optimization (TrajOpt, CHOMP).
|
||
4. **Control**: PID, LQR, MPC, impedance control.
|
||
5. **Hardware abstraction**: ROS2, drivers, real-time scheduling.
|
||
|
||
### 매 modern (2026) shift
|
||
- **VLA models**: π0, RT-2, OpenVLA — image+text→action tokens.
|
||
- **Diffusion policies**: Chi et al. 2023 — multimodal action distributions.
|
||
- **Sim2Real**: Isaac Lab, MuJoCo MJX — massive parallel simulation + DR.
|
||
- **Humanoids**: Figure 02, Tesla Optimus, Apptronik Apollo, 1X Neo — commercial pilots.
|
||
- **Whole-body MPC**: real-time on humanoid (Boston Dynamics Atlas).
|
||
|
||
### 매 응용
|
||
1. Industrial automation (pick-and-place, welding).
|
||
2. Autonomous mobile robots (Amazon Proteus, warehouse AGVs).
|
||
3. Surgical robotics (da Vinci, Intuitive Ion).
|
||
4. Humanoid general purpose (Figure, Optimus, BMW pilot 2025).
|
||
5. Self-driving (Waymo, Tesla FSD).
|
||
|
||
## 💻 패턴
|
||
|
||
### ROS2 Node Skeleton
|
||
```python
|
||
import rclpy
|
||
from rclpy.node import Node
|
||
from sensor_msgs.msg import Image
|
||
from geometry_msgs.msg import Twist
|
||
|
||
class Controller(Node):
|
||
def __init__(self):
|
||
super().__init__("controller")
|
||
self.sub = self.create_subscription(Image, "/cam", self.cb_img, 10)
|
||
self.pub = self.create_publisher(Twist, "/cmd_vel", 10)
|
||
|
||
def cb_img(self, msg):
|
||
cmd = Twist()
|
||
cmd.linear.x = 0.5
|
||
self.pub.publish(cmd)
|
||
|
||
def main(): rclpy.init(); rclpy.spin(Controller()); rclpy.shutdown()
|
||
```
|
||
|
||
### Extended Kalman Filter (state estimation)
|
||
```python
|
||
import numpy as np
|
||
|
||
class EKF:
|
||
def __init__(self, x0, P0, Q, R):
|
||
self.x, self.P, self.Q, self.R = x0, P0, Q, R
|
||
|
||
def predict(self, f, F):
|
||
self.x = f(self.x)
|
||
self.P = F @ self.P @ F.T + self.Q
|
||
|
||
def update(self, z, h, H):
|
||
y = z - h(self.x)
|
||
S = H @ self.P @ H.T + self.R
|
||
K = self.P @ H.T @ np.linalg.inv(S)
|
||
self.x = self.x + K @ y
|
||
self.P = (np.eye(len(self.x)) - K @ H) @ self.P
|
||
```
|
||
|
||
### MPC (acados / cvxpy)
|
||
```python
|
||
import cvxpy as cp
|
||
import numpy as np
|
||
|
||
def mpc_step(x0, A, B, Q, R, N=10, u_max=1.0):
|
||
nx, nu = A.shape[0], B.shape[1]
|
||
x = cp.Variable((nx, N+1))
|
||
u = cp.Variable((nu, N))
|
||
cost = sum(cp.quad_form(x[:,k], Q) + cp.quad_form(u[:,k], R) for k in range(N))
|
||
cons = [x[:,0] == x0]
|
||
for k in range(N):
|
||
cons += [x[:,k+1] == A @ x[:,k] + B @ u[:,k],
|
||
cp.norm_inf(u[:,k]) <= u_max]
|
||
cp.Problem(cp.Minimize(cost), cons).solve()
|
||
return u.value[:,0]
|
||
```
|
||
|
||
### RRT* Motion Planning
|
||
```python
|
||
def rrt_star(start, goal, obstacles, max_iter=2000, step=0.5, radius=2.0):
|
||
tree = {tuple(start): {"parent": None, "cost": 0.0}}
|
||
for _ in range(max_iter):
|
||
rnd = sample_free(obstacles)
|
||
nearest = min(tree, key=lambda n: dist(n, rnd))
|
||
new = steer(nearest, rnd, step)
|
||
if collision_free(nearest, new, obstacles):
|
||
neighbors = [n for n in tree if dist(n, new) < radius]
|
||
best = min(neighbors, key=lambda n: tree[n]["cost"] + dist(n, new))
|
||
tree[tuple(new)] = {"parent": best, "cost": tree[best]["cost"] + dist(best, new)}
|
||
if dist(new, goal) < step: return reconstruct_path(tree, tuple(new))
|
||
return None
|
||
```
|
||
|
||
### Diffusion Policy (modern)
|
||
```python
|
||
import torch
|
||
import torch.nn as nn
|
||
|
||
class DiffusionPolicy(nn.Module):
|
||
def __init__(self, obs_dim, action_dim, T=100):
|
||
super().__init__()
|
||
self.net = nn.Sequential(nn.Linear(obs_dim+action_dim+1, 256),
|
||
nn.SiLU(),
|
||
nn.Linear(256, action_dim))
|
||
self.T = T
|
||
|
||
def forward(self, obs, a_t, t):
|
||
return self.net(torch.cat([obs, a_t, t.float().unsqueeze(-1)/self.T], -1))
|
||
|
||
@torch.no_grad()
|
||
def sample(self, obs, scheduler):
|
||
a = torch.randn(obs.shape[0], self.action_dim, device=obs.device)
|
||
for t in reversed(range(self.T)):
|
||
eps = self.forward(obs, a, torch.full((obs.shape[0],), t, device=obs.device))
|
||
a = scheduler.step(eps, t, a)
|
||
return a
|
||
```
|
||
|
||
### VLA Inference (π0-style)
|
||
```python
|
||
def vla_act(model, image, instruction: str):
|
||
"""매 VLA: image + text → action chunk."""
|
||
inputs = model.processor(image=image, text=instruction, return_tensors="pt")
|
||
out = model.generate(**inputs, max_new_tokens=64)
|
||
action_chunk = model.detokenize_actions(out) # e.g. (8, 7) — 8 timesteps × 7 DoF
|
||
return action_chunk
|
||
```
|
||
|
||
### Sim2Real Domain Randomization
|
||
```python
|
||
def randomize_env(env):
|
||
env.set_friction(np.random.uniform(0.5, 1.5))
|
||
env.set_mass_scale(np.random.uniform(0.8, 1.2))
|
||
env.set_lighting(np.random.uniform(0.3, 1.0))
|
||
env.add_observation_noise(scale=np.random.uniform(0.0, 0.05))
|
||
```
|
||
|
||
## 매 결정 기준
|
||
| 상황 | Approach |
|
||
|---|---|
|
||
| Industrial repetitive | Classical: vision + IK + PID |
|
||
| Mobile navigation | SLAM + planning (Nav2) + MPC |
|
||
| Manipulation, varied tasks | Diffusion policy or VLA |
|
||
| Generalist humanoid | VLA (π0/RT-2) + whole-body MPC |
|
||
| Safety-critical (surgery, AV) | Verified controllers + redundant perception |
|
||
|
||
**기본값**: Classical stack for known tasks; VLA + diffusion policy 의 manipulation/general; Sim2Real with massive DR for new skills.
|
||
|
||
## 🔗 Graph
|
||
- 부모: [[Embodied AI]] · [[Control Theory]] · [[Computer Vision]]
|
||
- 변형: [[Surgical-Robotics]]
|
||
- 응용: [[Self-Driving]]
|
||
- Adjacent: [[Reinforcement Learning]] · [[SLAM]] · [[MPC]]
|
||
|
||
## 🤖 LLM 활용
|
||
**언제**: high-level task planning (LLM-as-planner), code generation for robot skills, error diagnosis, sim asset generation.
|
||
**언제 X**: 매 closed-loop control 의 X — latency/safety 의 LLM 의 unsuitable; small specialized policy 의 fast inference 의 use.
|
||
|
||
## ❌ 안티패턴
|
||
- **Open-loop trust**: sensor noise 의 underestimate — 매 always close the loop.
|
||
- **Sim-only training**: no DR / no real fine-tune → fails reality.
|
||
- **VLA for everything**: 매 simple reach-and-place 의 IK 의 better — VLA 의 long-tail 의 reserve.
|
||
- **No safety layer**: ML policy 의 unbounded — torque limits + collision shield 필요.
|
||
- **Real-time on Python only**: critical loop 의 C++/Rust + ROS2 real-time scheduler.
|
||
|
||
## 🧪 검증 / 중복
|
||
- Verified (Siciliano "Robotics: Modelling, Planning and Control"; π0/RT-2 papers; Boston Dynamics Atlas reports 2024-25).
|
||
- 신뢰도 A.
|
||
|
||
## 🕓 Changelog
|
||
| 날짜 | 변경 |
|
||
|---|---|
|
||
| 2026-05-08 | Phase 1 |
|
||
| 2026-05-10 | Manual cleanup — robotics canonical: classical + VLA + diffusion policy + Sim2Real |
|