--- 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 |