Datawhale 具身智能基础与机器人控制(一)

Datawhale 具身智能基础与机器人控制(一)

task1的主线:

理解什么是具身智能,

理解机器人怎么描述空间和运动,

用 PID 这类控制方法让动作稳定下来,

用 Habitat 这样的仿真环境先练导航任务。

一、具身智能是什么

具身智能,就是智能体有一个"身体",并通过身体和环境互动。

这里的身体可以是真实机器人,也可以是仿真里的 Agent。不只输入文字、输出文字,而是要看见环境、理解自己在哪、决定怎么动,并真的执行动作。

普通 AI 更像是在文字和数据里推理;具身智能要面对真实世界的约束,比如距离、角度、碰撞、重力、误差、延迟。它关心的不只是"知道什么",还包括"怎么把事情做成"。

所以具身智能可以简单理解为:

智能的大脑(智能) + 可行动的身体(行动) + 会反馈的环境(感知)。

二、为什么要学机器人基础

机器人里最基础的事,是描述位置和姿态。一个点在相机坐标系里看到的位置,和它在机器人底座坐标系里的位置表示不同,必须做坐标变换。

空间位姿一般拆成两部分:旋转和平移。

绕 Z 轴旋转可以写成:

Rz(θ)=cos⁡θ−sin⁡θ0sin⁡θcos⁡θ0001 R_z(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)= cosθsinθ0−sinθcosθ0001

为了把旋转 RRR 和平移 PPP 放到一起,用齐次变换矩阵:

T=RP01 T= \begin{bmatrix} R & P \\ 0 & 1 \end{bmatrix} T=R0P1

如果点 PPP 在坐标系 B 中的坐标是 PBP_BPB,想换到坐标系 A,就用:

PA=TABPB P_A = T_{AB}P_B PA=TABPB

齐次变换矩阵把旋转和平移统一放到一个矩阵里,方便把一个坐标系里的点换算到另一个坐标系里。

正运动学解决的是:已知关节角度,怎么算机械臂末端的位置和姿态。DH 参数法就是一种标准建模方法,用连杆长度、连杆扭角、关节偏距、关节角度来描述机械臂结构。

DH 参数法就是用来标准化描述机械臂连杆关系的。相邻两个连杆之间用四个量描述:

  • aia_iai:连杆长度
  • αi\alpha_iαi:连杆扭角
  • did_idi:关节偏距
  • θi\theta_iθi:关节角度

相邻连杆的变换矩阵可以写成:
Ti−1i=Rotz(θi)⋅Transz(di)⋅Transx(ai)⋅Rotx(αi) T_{i-1}^{i}=Rot_z(\theta_i) \cdot Trans_z(d_i) \cdot Trans_x(a_i) \cdot Rot_x(\alpha_i) Ti−1i=Rotz(θi)⋅Transz(di)⋅Transx(ai)⋅Rotx(αi)

多个连杆串起来,就是矩阵连乘:

T0n=T01T12...Tn−1n T_0^n = T_0^1T_1^2...T_{n-1}^n T0n=T01T12...Tn−1n

比如二连杆平面机械臂,末端位置可以直观看成:

x=l1cos⁡θ1+l2cos⁡(θ1+θ2) x=l_1\cos\theta_1+l_2\cos(\theta_1+\theta_2) x=l1cosθ1+l2cos(θ1+θ2)

y=l1sin⁡θ1+l2sin⁡(θ1+θ2) y=l_1\sin\theta_1+l_2\sin(\theta_1+\theta_2) y=l1sinθ1+l2sin(θ1+θ2)

机械臂末端的位置不是随便给的,是由关节角和连杆长度共同决定的。

三、为什么要学 PID 控制

运动学"理论上怎么到",控制算法实现"现实里怎么到"。

PID 的核心根据误差调输出。设目标值和当前值的误差为:

e(t)=r(t)−y(t) e(t)=r(t)-y(t) e(t)=r(t)−y(t)

PID 输出为:

u(t)=Kpe(t)+Ki∫e(t)dt+Kdde(t)dt u(t)=K_pe(t)+K_i\int e(t)dt+K_d\frac{de(t)}{dt} u(t)=Kpe(t)+Ki∫e(t)dt+Kddtde(t)

P 看当前误差,误差大就多调;

I 看累计误差,消除长期偏差;

D 看误差变化趋势,抑制震荡和超调。

CartPole 实践实际用的是 PD 控制,主要用 P 和 D。因为倒立摆更关心快速拉回和平稳,不需要积分项。

CartPole 的目标很简单:小车位置保持在 0,杆子角度保持在 0。

状态写成:

X=xx˙θθ˙X= \begin{bmatrix} x \\ \dot{x} \\ \theta \\ \dot{\theta} \end{bmatrix}X= xx˙θθ˙

其中 xxx 是小车位置,θ\thetaθ 是杆子角度。

材料里对倒立摆做了小角度近似:

sin⁡θ≈θ,cos⁡θ≈1 \sin\theta \approx \theta,\quad \cos\theta \approx 1 sinθ≈θ,cosθ≈1

近似后可以整理成状态空间方程:

X˙=AX+BF \dot{X}=AX+BF X˙=AX+BF

也就是:

x˙x¨θ˙θ¨=Axx˙θθ˙+BF \begin{bmatrix} \dot{x} \\ \ddot{x} \\ \dot{\theta} \\ \ddot{\theta}\end{bmatrix} =A \begin{bmatrix} x \\ \dot{x} \\ \theta \\ \dot{\theta} \end{bmatrix} + B F x˙x¨θ˙θ¨ =A xx˙θθ˙ +BF

这一步把"倒立摆怎么动"变成了控制器能用的数学模型。PID、LQR、MPC 都是在这个模型基础上想办法算控制输入。

材料里的 PD 思路很朴素:

小车偏离中心,就根据位置误差和误差变化量修正;

杆子偏离竖直,就根据角度误差和误差变化量修正。

代码里的形式是:

u=Kpe+Kd(e−elast) u = K_p e + K_d(e-e_{last}) u=Kpe+Kd(e−elast)

CartPole 讲了控制闭环的实操:看状态,算误差,给力,再看新状态,再修正。

四、为什么要学 Habitat 导航

真实导航实验太贵,所以先在仿真里做。Habitat 这部分就是具身导航的入门环境。

Habitat 分两层:

Habitat-Sim 是仿真引擎,负责底层世界。包括加载 3D 场景、渲染 RGB 图、深度图、语义图,模拟智能体移动和碰撞。

Habitat-Lab 是任务框架,负责上层实验。定义任务、数据集、传感器、动作空间、评估指标。

Habitat-Sim 环境搭建时,教程用的是 habitat-sim=0.2.5

Sim 里最重要的是:

  • 场景:比如 MP3D、HM3D、Gibson、Replica。
  • 传感器:RGB、Depth、Semantic。
  • 动作:前进、左转、右转。
  • 数据集:测试场景、示例对象、后续可能用到 HM3D v0.2。

传感器大概对应:

RGB 看外观;

Depth 看距离和空间结构;

Semantic 看每个像素属于什么类别。

如果语义图显示不正常,通常是因为没有加载 scene_dataset_config.json,语义 ID 没法映射到具体类别。

五、Habitat Lab 解决"导航任务怎么组织"的问题

Habitat-Lab 最大的特点是用 YAML 配置任务。

PointNav 是这里的基础任务:给智能体一个目标点,让它从起点走到目标点。这个任务简单,但包含导航的基本要素:场景、起点、目标、观测、动作、终止条件和评估指标。

habitatlab_test.py 的运行流程可以记成五步:

  1. 加载 YAML 配置;
  2. 初始化环境;
  3. 重置环境拿到观测;
  4. 执行动作控制智能体;
  5. 达到最大步数或任务结束。

YAML 里最重要的几块是:

  • habitat.dataset:数据集路径、场景路径、训练或测试 split。
  • habitat.environment:最大 episode 步数、时间限制。
  • habitat.task:任务类型、奖励、成功条件、测量指标。
  • habitat.simulator:底层模拟器、前进步长、转弯角度。
  • habitat.simulator.agents:智能体高度、半径、RGB/Depth 传感器。

比如材料里的基础配置把最大步数设成:

yaml 复制代码
habitat:
  environment:
    max_episode_steps: 500

传感器分辨率设成:

yaml 复制代码
sim_sensors:
  rgb_sensor:
    width: 256
    height: 256
  depth_sensor:
    width: 256
    height: 256

注意YAML 里看到的不是全部配置。很多默认配置会在 Habitat-Lab 内部补齐,最后再传给 Habitat-Sim 创建真正的仿真环境。

教程地址:

https://github.com/datawhalechina/every-embodied/blob/main

相关推荐
沫儿笙7 小时前
库卡弧焊机器人白车身焊接节气装置
人工智能·机器人
四方云13 小时前
2026电销外呼机器人选型避坑指南:技术维度拆解企业电销拓客痛点解决方案
机器人
中讯慧通13 小时前
无人机靠什么实时传画面?图传电台传输数据全明细
大数据·机器人·无人机
今日综合14 小时前
激光雷达的机器人市场竞争,谁在“吃透”六个场景?
大数据·机器人
数智工坊14 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
某林21214 小时前
跨越底层与AI的鸿沟:ROS2+多模态大模型(Qwen-VL)机器人全链路排障实录
人工智能·stm32·机器人·人机交互·ros2·技术复盘
数智工坊16 小时前
【ROS 2 全栈入门指南一】:从本质认知到环境搭建与核心原理解析
学习·机器人
AImatters16 小时前
原力灵机并购Atomix:让机器人在真实业务中长出数据飞轮
机器人·大模型·具身智能·atomix·原力灵机
数智工坊17 小时前
【ROS 2 全栈入门指南三】:Action、参数与Launch文件全链路指南
android·stm32·嵌入式硬件·学习·机器人
Agilex松灵机器人17 小时前
ROS 机械臂开发效率低?用 Agent + 具身智能重构开发流程
重构·机器人·自动驾驶