当前每次提到“具身智能”,讨论最多的往往是“大模型 + 人形机器人”的宏大叙事。但如果你真的想以普通开发者的身份入局,会发现网上大部分内容要么在讲概念,要么在秀 demo,很少有人讲清楚一件事:到底从哪里开始动手?
我在过去一段时间里,陆续接触了协作机械臂、移动底盘、RGB-D 相机、激光雷达和各类传感器,也踩过不少从仿真到实机的坑。结合这些经验,我尝试把“普通人入局具身智能”这件事拆成四个能落地的环节:中试基地、场景落地、数据采集、硬件平台选型。这篇教程会围绕这四个环节展开,适合以下读者:
- 有一定编程基础,想转入具身智能方向的开发者;
- 正在做机器人相关毕设、课题,却不知道买什么设备的同学;
- 公司准备立项机器人项目,需要做硬件选型和技术评估的工程师;
- 对多模态感知和机器人数据采集感兴趣,想自己搭一套数据管线的研究者。
读完这篇文章,你会明白具身智能落地链路中哪些环节真正需要人力,哪些环节是纯烧钱陷阱,以及如何用最小成本完成一次“感知 + 控制 + 数据”的闭环。
1. 入局具身智能前,先理解这套产业逻辑
在讨论怎么选机器人之前,必须先搞清楚一件事:具身智能不是某一款产品,而是一条产业链。
1.1 具身智能的本质是什么
具身智能的核心思想是:智能不能只存在于“大脑”中,它必须通过身体与世界交互才能形成。翻译成技术语言就是:
- 智能体需要有“感知”:通过相机、激光雷达、IMU、力传感器等获取环境信息;
- 智能体需要有“决策”:通过模型或算法决定下一步动作;
- 智能体需要有“执行”:通过电机、机械臂、底盘等硬件完成物理动作。
所以你经常听到的“具身智能 = 大模型 + 机器人”并不是完整定义,它只说明了“决策”这一环。真正难的部分,恰恰是感知与执行之间的闭环。这也是为什么近年来圈子里反复强调“数据采集”的重要性——没有真实世界的数据,再大的模型也只是纸上谈兵。
1.2 普通人能从哪些环节切入
大型机器人公司可能会自己做电机、做灵巧手、做基座模型,但对普通开发者和中小团队来说,更现实的切入点有三个:
| 切入点 | 具体工作 | 对能力的要求 |
|---|---|---|
| 场景落地 | 把机器人部署到具体行业,完成巡检、分拣、抓取等任务 | 熟悉机器人操作、懂行业需求 |
| 数据工程 | 搭建采集环境,处理多传感器数据,做标定与清洗 | 熟悉 Linux、Python、ROS 2、传感器 |
| 硬件集成与二次开发 | 在现成底盘/机械臂上做上层应用开发 | 熟悉 SDK、通信协议、嵌入式基础 |
这里想强调一个观点:不要一上来就想做“人形机器人本体”。本体制造需要电机驱动、结构设计、供应链整合等重资产能力,不适合个人或小团队起步。普通人真正能形成竞争力的是“软件 + 数据 + 场景理解”,而这三者恰好都围绕中试和落地展开。
2. 中试基地:技术与产品之间的“练兵场”
2.1 中试基地是什么
中试基地的全称通常叫“中间试验基地”,它介于实验室和小批量生产之间。简单说,实验室里验证的是“技术能不能跑通”,中试基地验证的是“产品能不能在真实环境下稳定运行”。
具身智能中试基地一般包含以下基础设施:
环境模拟区:模拟工厂产线、仓储通道、家庭客厅、户外道路等场景 设备测试区:部署机械臂、移动底盘、复合机器人、人形机器人等被测对象 数据采集区:铺设相机阵列、动捕系统、力觉传感器、遥操作设备 算力支撑区:边缘计算节点、GPU 服务器、数据存储集群 安全隔离区:围栏、急停系统、监控系统、安全激光雷达2.2 为什么中试对入局者很重要
你在实验室里写的算法,到了真实场景大概率会“水土不服”。比如:
- 仿真环境里光照稳定,真实工厂存在逆光、暗光、反光;
- 实验室地面平坦,真实仓库有减速带、坡道、地面缝隙;
- 仿真模型是理想几何体,真实工件存在公差、变形、油污。
中试基地存在的意义,就是用低成本方式提前暴露这些问题。对普通开发者来说,哪怕没有机会进入大型中试基地,也可以自己搭一个“迷你中试环境”。例如:
- 用纸箱和 PVC 管搭建简易货架,模拟仓库取放货场景;
- 用不同颜色、不同重量的物品测试机械臂抓取鲁棒性;
- 在移动底盘路径上铺设反光条、坡道,测试导航算法的稳定性。
这个思路的核心是:提前验证,不要等到客户现场再暴露问题。
3. 场景落地:从“demo 能跑”到“产线能用”
3.1 先选窄场景,不要做通用机器人
现在市面上很多机器人 demo 看起来很厉害:能拿饮料、能开门、能跳舞。但一放到真实环境,稳定性和效率立刻打折扣。如果你想入局,一定要记住一句话:通用是结果,不是起点。
真正值得关注的是那些足够窄、足够痛、且付费意愿明确的场景:
| 行业 | 典型场景 | 涉及的感知能力 | 涉及的执行能力 |
|---|---|---|---|
| 仓储物流 | 包裹分拣、搬运、盘点 | 3D视觉、二维码识别 | 移动底盘 + 机械臂抓取 |
| 工业制造 | 上下料、螺丝锁付、质检 | 2D/3D视觉、力觉 | 协作机械臂 + 末端执行器 |
| 能源巡检 | 配电房仪表读取、设备测温 | 红外相机、可见光相机、激光雷达 | 轮式/履带式移动平台 |
| 零售餐饮 | 迎宾、配送、清洁 | 激光SLAM、视觉避障 | 移动底盘 + 交互屏幕 |
| 农业 | 果实采摘、喷洒、除草 | 多光谱相机、深度相机 | 农业机器人平台 |
选场景时有一个很实用的判断标准:这个场景是否可以用“感知 + 简单动作”完成。例如“读取仪表盘并上传数据”就比“从货架上随机抓取任意物体”更容易落地。因为前者对机械执行能力要求低,对感知算法要求适中,数据也容易结构化。
3.2 落地验证的最小闭环
在选好场景后,建议按下面步骤走一遍最小闭环:
- 静态数据采集:在真实环境中拍摄图像、点云、IMU 数据,确认传感器能稳定工作;
- 感知算法回放验证:用采集好的数据离线跑目标检测、分割、SLAM 等算法,确认算法在真实数据上的表现;
- 单步动作执行:让机械臂或底盘执行一个固定动作,验证控制链路是否通畅;
- 感知 + 执行联调:让机器人根据实时感知结果做决策并执行动作;
- 长时间压测:连续运行 8 小时以上,统计成功率、故障率和恢复时间。
这五步中,第 1 步最容易被忽略,但恰恰是决定项目生死的关键。如果传感器在目标环境里无法稳定输出有效数据,后续所有算法和应用都无从谈起。
4. 真实机器人怎么选:硬件平台选型指南
4.1 先明确你的任务,再选硬件
很多新手入局时会犯同一个错误:先买设备,再想做什么。结果往往是底盘买回来发现没有合适的感知模块,机械臂买回来发现 SDK 不开放,想二次开发却处处受限。
正确的选型逻辑应该是:
任务场景 → 执行机构 → 感知传感器 → 计算平台 → 软件框架举个例子:如果你想做“配电房巡检”,那么执行机构大概率是轮式移动底盘,而不是机械臂;传感器需要可见光相机、红外相机和激光雷达;计算平台可以用 Jetson Orin 系列;软件框架可以直接基于 ROS 2 开发。
4.2 移动底盘怎么选
移动底盘是具身智能最常用的移动平台,适合巡检、配送、清洁等场景。选型时重点看几个指标:
| 指标 | 说明 | 选型建议 |
|---|---|---|
| 负载能力 | 能承载的设备总重量 | 至少留 30% 余量 |
| 越障能力 | 能否过减速带、坡道、门槛 | 室内用轮式,室外考虑履带式 |
| 定位精度 | 重复定位、停止精度 | 精度要求高时选带编码器/磁条融合方案 |
| 扩展接口 | 是否有串口、USB、CAN、以太网 | 接口越丰富,二次开发越方便 |
| 开源程度 | 是否提供 ROS 2 驱动 | 建议优先选有官方 ROS 2 支持的产品 |
4.3 机械臂怎么选
机械臂是完成抓取、装配、上下料等操作的核心硬件。协作机械臂因为安全性高、部署灵活,是目前具身智能领域的主流选择。
选型时要关注:
- 自由度:常见的 6 轴机械臂可以覆盖大多数工业场景,4 轴适合简单搬运,7 轴适合复杂避障;
- 负载与臂展:根据抓取物体的重量和工作空间半径确定;
- 重复定位精度:一般协作臂在 ±0.02mm 到 ±0.05mm 之间,精度要求越高价格越贵;
- 力控能力:如果需要精密装配或柔性操作,需要支持力/力矩控制接口;
- 二次开发接口:是否提供 TCP/IP、Modbus、ROS 2 驱动、C++/Python SDK。
以国内常见的协作机械臂为例,大部分厂商都会提供 Linux 下的 SDK 和 ROS 2 驱动,这对接入感知算法非常关键。如果某款机械臂只有 Windows 下的上位机软件、不开放底层接口,不建议选作研究平台。
4.4 复合机器人与仿真平台
复合机器人 = 移动底盘 + 机械臂 + 多模态传感器,适合需要“移动 + 操作”的复杂任务,例如实验室样品转运、CNC 上下料。但复合机器人调试难度比单底盘或单臂高一个量级,因为要处理两个运动系统之间的坐标变换和协同控制。
在购买真实硬件之前,强烈建议先通过仿真平台验证方案。常见组合有:
- Gazebo + ROS 2:开源免费,适合验证导航、SLAM 和机械臂控制;
- Isaac Sim + ROS 2:基于 Omniverse,渲染效果强,适合做感知仿真和合成数据生成;
- MoveIt + RViz2:适合做机械臂运动规划与轨迹验证。
仿真不是可选项,而是必选项。先把逻辑在仿真里跑通,再迁移到真实机器人上,能节省大量调试时间。
5. 多模态感知与数据采集:入局者必须跨过的硬门槛
5.1 什么是多模态感知
多模态感知指的是机器人同时使用多种传感器获取环境信息,并把这些信息融合起来形成统一的感知结果。常见的传感器组合如下:
| 传感器类型 | 数据形式 | 主要用途 |
|---|---|---|
| RGB 相机 | 图像 (H×W×3) | 目标检测、语义分割、视觉定位 |
| 深度相机 | 深度图 / 点云 | 三维重建、抓取位姿估计 |
| 激光雷达 | 点云 (x,y,z,intensity) | SLAM、避障、地图构建 |
| IMU | 加速度、角速度 | 运动估计、位姿解算 |
| 力/力矩传感器 | 六维力数据 | 力控、装配、柔顺操作 |
| 触觉传感器 | 压力分布阵列 | 抓取稳定性判断 |
多模态感知的核心价值在于互补与冗余。比如相机在黑暗环境下失效,激光雷达仍然可以工作;激光雷达无法判断物体材质,相机可以补充颜色和纹理信息。
5.2 数据采集的完整流程
如果你打算入局具身智能,数据采集能力是一项硬技能。下面是通用的数据采集流程:
传感器标定 → 时间同步 → 数据录制 → 数据清洗 → 标注 → 格式转换 → 训练/评测第一步:传感器标定
传感器标定是数据采集前最重要的一步。相机内参标定决定图像畸变校正的准确性;相机与激光雷达的外参标定决定点云投影到图像上的位置是否正确;底盘和机械臂之间的手眼标定决定抓取位姿是否准确。
常用的标定工具包括:
- 相机内参标定:OpenCV、Kalibr;
- 相机-激光雷达联合标定:Autoware 标定工具、lidar_camera_calibration;
- 手眼标定:easy_handeye2(ROS 2 版本)。
标定结果一定要保存好,并记录标定时的环境条件。标定参数是数据资产的一部分,而不是临时变量。
第二步:时间同步
多传感器数据必须做到时间对齐,否则融合算法会出现“看到的位置和实际位置不一致”的问题。常见做法:
- 使用 PTP(Precision Time Protocol)或 NTP 同步各传感器的主机时间;
- 使用硬件触发线同步相机曝光时刻与激光雷达扫描时刻;
- 在软件层面对齐时间戳,例如 ROS 2 中的
message_filters时间同步器。
第三步:数据录制与格式
ROS 2 环境下录制数据最直接的方式是使用ros2 bag:
# 录制所有 topic ros2 bag record -a # 录制指定 topic ros2 bag record /camera/color/image_raw /camera/depth/points /imu/data /scan # 指定输出目录 ros2 bag record -o robot_pick_data_20250601 /camera/color/image_raw /imu/data录制完成后,可以通过下面的命令查看 bag 包信息:
ros2 bag info robot_pick_data_20250601输出会包含 topic 列表、消息类型、消息数量、起止时间等信息。这些元信息对后续数据清洗很重要。
下面是使用 Python 读取 ROS 2 bag 中图像和 IMU 数据的示例:
from rosbags.highlevel import AnyReader from rosbags.typesys import Stores, get_typestore import cv2 import numpy as np from pathlib import Path # 创建类型存储 typestore = get_typestore(Stores.ROS2_HUMBLE) bag_path = Path("/path/to/robot_pick_data_20250601") with AnyReader(bag_path, default_typestore=typestore) as reader: connections = [conn for conn in reader.connections if conn.topic in [ "/camera/color/image_raw", "/imu/data" ]] for connection, timestamp, rawdata in reader.messages(connections=connections): if connection.topic == "/camera/color/image_raw": msg = reader.deserialize(rawdata, connection.msgtype) # 根据编码格式解码图像 img = np.frombuffer(msg.data, dtype=np.uint8).reshape(msg.height, msg.width, -1) cv2.imshow("color", img) cv2.waitKey(1) elif connection.topic == "/imu/data": msg = reader.deserialize(rawdata, connection.msgtype) print("IMU linear_acc:", msg.linear_acceleration) print("IMU angular_vel:", msg.angular_velocity)需要说明的是:ROS 2 不同版本的消息类型定义可能有差异,上面的代码以 Humble 版本为例。如果你用的是 Foxy、Galactic 或 Jazzy,请按实际类型结构调整。
第四步:数据清洗与标注
采集到的原始数据往往包含大量无效帧,例如机器人静止时的重复画面、运动模糊严重的图像、被遮挡的点云等。清洗规则建议:
- 剔除时间戳异常的帧;
- 剔除传感器输出为空的帧;
- 剔除机器人急停、故障期间的帧;
- 对图像做亮度异常检测,避免过曝/欠曝数据进入训练集。
标注阶段可以采用人工标注 + 模型预标注结合的方式。常用的标注工具包括 LabelImg(2D 目标框)、LableMe(多边形分割)、CloudCompare(点云标注)等。
5.3 遥操作与示教数据采集
具身智能领域一个非常重要的数据来源是遥操作采集。通过操作员控制机械臂完成动作,记录关节角度、末端位姿、力觉信息和视觉信息,从而形成“专家示范数据”。
常见遥操作方案:
- 主从机械臂:用一台小型机械臂作为主手,控制远端工作机械臂;
- 动捕手套/动捕服:采集人体手部或全身动作,映射到机器人;
- VR 控制器:结合 VR 头显执行远程操作;
- 力觉遥操作:通过操作杆上的力反馈实现精细操作。
采集到的示范数据一般会保存为 HDF5 或 JSON 格式,包含时间戳、图像、关节状态、动作标签等字段。
{ "episode_id": "ep_0001", "timestamp_start": "2025-06-01T10:00:00.123Z", "observations": { "camera_rgb": "path/to/frame_0001.png", "joint_positions": [0.1, -0.5, 0.8, 0.2, 0.0, 0.3], "joint_velocities": [0.01, -0.02, 0.03, 0.0, 0.0, 0.01], "end_effector_pose": [0.4, -0.2, 0.6, 0.0, 0.0, 0.0, 1.0], "force_torque": [2.1, -0.5, 8.3, 0.02, -0.01, 0.05] }, "action": { "target_joint_positions": [0.2, -0.4, 0.7, 0.3, 0.1, 0.4] } }设计数据格式时,建议从一开始就考虑字段的可扩展性。比如后面要增加触觉数据,或者增加语言指令描述,字段设计得够灵活能省掉大量返工时间。
6. 一条适合普通人的入局实操路线
6.1 阶段一:从仿真开始,花小钱验证方向
在购买任何真实硬件之前,先在仿真环境里把技术链路打通。推荐路线:
- 安装 Ubuntu 22.04 + ROS 2 Humble;
- 学习 URDF/Xacro 建模,理解机器人模型结构;
- 在 Gazebo 中搭建一个带机械臂的移动机器人;
- 运行 SLAM 建图与导航;
- 用 MoveIt 完成机械臂运动规划。
这个阶段的核心目标不是“做出多牛的算法”,而是搞懂机器人软件栈的数据流。比如 TF 坐标树是怎么管理的、激光雷达数据怎么转成占据栅格地图、机械臂规划结果是怎样下发给执行器的。
下面是启动 Gazebo 仿真环境和 RViz2 的常用命令:
# 启动仿真世界(示例为 Gazebo 经典版) gazebo --verbose worlds/robot_room.world # 启动 RViz2 查看传感器数据 rviz26.2 阶段二:购买入门级硬件,完成感知闭环
仿真跑通后,可以入手第一台真实机器人。预算有限的情况下,建议优先选择:
- 入门级移动底盘:具备 ROS 2 驱动,自带激光雷达和避障传感器;
- 入门级协作机械臂:负载 1-3kg,支持 ROS 2 和 MoveIt;
- RGB-D 深度相机:如 Intel RealSense 系列或国产同类产品;
- 边缘计算设备:至少能运行 YOLO 级别的目标检测模型。
这个阶段要完成的任务:
- 用底盘自带 SLAM 功能构建一张真实环境地图;
- 实现“点到点导航 + 自动避障”;
- 用 RGB-D 相机完成目标物体的检测与定位;
- 用机械臂完成一次“视觉引导抓取”。
下面是一个用 Python + OpenCV 进行颜色识别并提供目标中心坐标的简单示例:
import cv2 import numpy as np def detect_target_center(frame, lower_color, upper_color): """ 根据颜色范围检测目标物体,返回图像坐标。 """ hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, lower_color, upper_color) mask = cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2) contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if len(contours) == 0: return None largest_contour = max(contours, key=cv2.contourArea) if cv2.contourArea(largest_contour) < 500: return None M = cv2.moments(largest_contour) if M["m00"] == 0: return None cx = int(M["m10"] / M["m00"]) cy = int(M["m01"] / M["m00"]) return (cx, cy) # 使用示例 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break # 以检测蓝色物体为例,HSV 范围需根据实际环境调整 center = detect_target_center(frame, (100, 100, 50), (130, 255, 255)) if center: cv2.circle(frame, center, 5, (0, 0, 255), -1) print("目标中心坐标:", center) cv2.imshow("frame", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()这个示例的重点不是算法本身,而是让读者理解从图像到机器人动作还需要哪些中间步骤:像素坐标需要转换成相机坐标,相机坐标需要转换到机械臂基座坐标,然后才能作为抓取目标点位发送给机械臂。
6.3 阶段三:构建数据采集管线,形成小规模数据集
完成感知闭环后,就可以着手搭建自己的数据采集管线。建议用 Python 写一个简单的多线程数据采集脚本,同时录制图像、IMU 和关节状态。
import threading import time import json import csv import cv2 class SimpleDataCollector: def __init__(self, camera_index=0, save_dir="./dataset"): self.cap = cv2.VideoCapture(camera_index) self.save_dir = save_dir self.running = False self.frame_id = 0 self.rgb_writer = None self.csv_file = None self.csv_writer = None def start(self): self.running = True self.csv_file = open(f"{self.save_dir}/sensor_data.csv", "w", newline="") self.csv_writer = csv.writer(self.csv_file) self.csv_writer.writerow(["frame_id", "timestamp_ms", "image_file", "accel_x", "accel_y", "accel_z"]) # 模拟 IMU 数据采集线程 threading.Thread(target=self._imu_loop, daemon=True).start() self._rgb_loop() def _imu_loop(self): # 这里真实项目中应读取 IMU 串口或 ROS topic import random while self.running: accel = [round(random.uniform(-2, 2), 4) for _ in range(3)] self.csv_writer.writerow([self.frame_id, int(time.time() * 1000), f"frame_{self.frame_id:06d}.png", *accel]) time.sleep(0.03) def _rgb_loop(self): while self.running: ret, frame = self.cap.read() if not ret: continue self.frame_id += 1 cv2.imwrite(f"{self.save_dir}/frame_{self.frame_id:06d}.png", frame) time.sleep(0.03) def stop(self): self.running = False self.cap.release() if self.csv_file: self.csv_file.close() print("数据采集已停止") # 使用示例 collector = SimpleDataCollector(camera_index=0, save_dir="./dataset") try: collector.start() except KeyboardInterrupt: collector.stop()上面这段代码只是一个框架示范,真实使用时需要根据你的传感器类型、通信协议和时间同步方案做较大调整。但它可以帮助你建立“数据采集系统”的整体结构:图像流、IMU 流、时间戳、文件存储、线程管理。
6.4 阶段四:用开源模型做初步行为学习
当数据集达到一定规模后,就可以尝试训练简单的策略模型。对于个人开发者,不建议从零训练大模型,而是利用开源预训练模型做微调或推理:
- 目标检测:YOLOv8、RT-DETR;
- 分割:SAM、MobileSAM;
- 位姿估计:FoundationPose;
- VLA 模型:关注社区开源项目,但不建议个人从零训练。
这个阶段的价值在于理解“数据 → 模型 → 策略 → 控制”的完整链路。即使最终效果一般,你也会对具身智能的核心难点有直观认识。
7. 常见问题与排查思路
7.1 仿真能跑,真机完全动不起来
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 真机执行轨迹与仿真不一致 | 运动学参数、负载、摩擦力存在差异 | 先用关节级控制验证单轴运动,再逐步排查 |
| 机器人启动后抖动 | PID 参数不合适或通信周期不稳定 | 调整控制频率和 PID 参数 |
| 导航时机器人撞到障碍物 | 传感器坐标系未正确配置或地图精度不足 | 检查 TF 树,重新建图 |
| 机械臂抓取位置偏差大 | 手眼标定精度不够 | 重新标定,检查标定板尺寸与算法 |
7.2 数据采集常见问题
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 图像和 IMU 时间戳对不上 | 没有做时间同步 | 使用硬件触发或软件同步器 |
| 数据集太大,磁盘很快占满 | 没有限制录制时间和 topic | 按需录制,使用压缩格式 |
| 点云数据噪声很大 | 激光雷达参数配置不当或环境反光 | 调整滤波参数,避开强反光区域 |
| 数据里有大量重复帧 | 机器人长时间静止 | 设置运动检测,只在移动时录制 |
7.3 硬件选型避坑
| 问题 | 建议 |
|---|---|
| 预算有限,想“一步到位”买高端设备 | 先买入门级跑通流程,再根据需求升级 |
| 厂商宣传“支持 ROS”,但只支持 ROS 1 | 优先选原生支持 ROS 2 的产品 |
| 开源资料很少的商业产品 | 尽量选社区活跃、文档齐全的品牌 |
| 买了设备但不知道怎么开始 | 先跑厂家 demo,再结合 ROS 2 官方教程逐步改造 |
8. 工程建议与避坑经验
8.1 安全永远排在第一位
无论在中试基地还是实验室,机器人都属于“有物理风险的设备”。以下安全措施必须有:
- 安装急停按钮,位置要方便操作员触达;
- 机械臂运行速度应分级管理,调试阶段用低速模式;
- 移动底盘设置安全距离,加装碰撞传感器或安全激光;
- 在试验区域设置物理围栏或安全警戒线;
- 测试无人值守时,必须有远程急停通道。
8.2 数据资产要尽早规范化
数据采集很容易陷入“不断补充新数据”的陷阱。一开始就应制定固定规范:
- 统一数据集目录结构;
- 记录传感器型号、固件版本、标定参数、环境描述;
- 每个 episode 带唯一 ID,并维护 meta 信息文件;
- 定期备份到独立存储设备,避免单点故障。
dataset/ ├── meta.json # 数据集总描述 ├── episode_0001/ │ ├── meta.json # 该序列的传感器信息和环境描述 │ ├── rgb/ │ ├── depth/ │ ├── lidar/ │ ├── imu.csv │ ├── joint_states.csv │ └── action.json # 动作指令或标签 ├── episode_0002/ └── ...8.3 代码与配置需要版本管理
机器人项目代码往往涉及 ROS 2 包、Python 脚本、URDF 模型、标定参数、启动文件等多类内容。建议:
- 使用 Git 管理所有代码和配置文件;
- 标定参数要有单独的配置文件,不要硬编码在源码里;
- 使用
docker或conda固定依赖版本,方便复现实验; - 每次修改完标定参数,记录修改时间和原因。
8.4 算力规划要形成“边缘为主,云端为辅”的思维
真实场景中,机器人不可能永远把数据上传到云端再拿回结果。边缘计算设备要能承担目标检测、SLAM、局部路径规划等实时性任务,云端主要用于模型训练和大规模数据存储。
选择边缘设备时,可以参考以下思路:
- 先确定要跑的模型(YOLO 系、SAM 系、VLA 系);
- 用 PC 上实测模型的推理延迟;
- 根据延迟确定边缘设备的算力等级;
- 保留 30% 以上的算力余量,应对多线程调度和通信开销。
8.5 不要把“多模态”理解为“传感器越多越好”
多模态感知的本质是信息互补,而不是堆叠传感器。每增加一种传感器,都要面对标定、同步、维护、故障排查等额外成本。建议从“单一模态 + 单一传感器”开始,跑通后再逐步加入新模态。比如先只用 RGB-D 相机做抓取,再叠加力传感器提高装配可靠性,最后再加入激光雷达提升环境感知能力。
9. 总结
普通人入局具身智能,真正的机会窗口不在人形机器人本体,而在场景落地、中试验证、数据采集合硬件二次开发这些需要持续深耕的环节。哪怕你只是把一台入门级移动底盘和一个 RGB-D 相机用得足够熟练,把一套“采集 → 标定 → 训练 → 部署”的数据闭环跑通,就已经超过多数停留在“看视频、读文章”阶段的人。
如果顺着这篇教程的思路把仿真环境搭起来,再找一台支持 ROS 2 的入门级机器人实际做一次视觉抓取,你会对“感知”和“执行”之间的差距有非常直观的体会。这个体会比阅读十篇综述文章都更有价值。