想象你走进一家特别的餐厅:后厨没有传统厨师长,只有一个“总厨大脑”。它不是只会背固定菜谱的老厨师,而是一个读过几百万本菜谱、看过无数做菜视频的大模型。顾客喊一句“来盘鱼香肉丝,少放辣”,总厨大脑立刻把这句话翻译成一套做菜流程:切肉、备菜、热锅、下料、颠勺、装盘。厨房里的机械臂学徒们,就在这个大脑的指挥下忙活起来。 这篇文章就用“总厨带学徒”的故事,讲清大模型如何驱动机器人:从读懂自然语言指令(看菜单),到规划动作(列做菜步骤),再到力觉反馈(掂锅尝味的手感),最后是仿真到真机的迁移(在家练功到餐厅实战)。你会发现,机器人“听懂人话、动手干活”的背后,是一整套环环相扣的工程学问。
掌握大模型驱动机器人控制的原理与工程方法,是从事具身智能、VLA 模型与机器人系统开发的 AI 工程师的核心竞争力,也是从“能聊天的 AI”迈向“能干活的 AI”的关键一跃。
可视化演示
展示大模型机器人控制三大核心环节:自然语言指令解析、轨迹规划与动作生成、力觉反馈闭环控制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
指令解析流程 自然语言指令输入大模型 LLM解析为结构化动作序列 动作指令发送至执行器
具身智能基础
学徒第一天进厨房,师傅只教一件事:先搞清楚“身体”和“大脑”怎么配合。光会背菜谱、不会颠勺,不是好厨子;光会颠勺、看不懂菜谱,也成不了大厨。这就是“具身智能”的核心思想——AI 不能只活在对话框里,它需要一具身体,并且通过这具身体在真实世界里摸爬滚打地学本领。
传统工业机器人像“只能照本宣科的学徒”,每个动作都被工程师提前编死。而具身智能机器人更像“会临场发挥的学徒”:它的眼睛(摄像头)看世界,耳朵(麦克风)听指令,总厨大脑做决策,手和脚去执行,执行完再看一眼结果,决定下一步怎么办。这个“感知—思考—行动”的闭环不断转圈,机器人就慢慢学会了干活。
用数学的语言来说,这个闭环就是一个状态转移过程。机器人在每个时刻都处于某个“状态”,它根据状态选择一个“动作”,动作又推动世界进入新状态,如此循环往复。
所以,学徒每颠一次勺,锅里的菜就换一个状态;总厨根据新状态决定下一步火候。这个循环转得越熟练,机器人就越像一个真正的“厨房老手”。
- 状态 $s_t$机器人在时刻 $t$ 对世界的“快照”,比如手臂角度、物体位置、夹爪开合。
- 动作 $a_t$机器人依据状态做出的一个行为,例如“前移 5 厘米”或“张开夹爪”。
- 转移函数 $f$描述“做了动作之后世界会变成什么样”的规则,是环境物理规律的抽象。
- 新状态 $s_{t+1}$动作执行后进入的下一个世界快照,闭环由此继续滚动。
大模型指令解析
顾客喊“少放辣”,总厨不能把这三个字原封不动端进厨房,而要把它翻译成后厨能执行的具体指令:不放干辣椒、不放辣油、花椒减半。这正是大模型的看家本领——把模糊的自然语言,变成明确的任务清单。
指令解析在工程上拆成三步。第一步是“自然语言理解”:判断顾客到底想要什么菜式、什么口味;第二步是“任务分解”:把一个大目标拆成有序的小步骤,比如“切肉→备菜→热锅→下料”;第三步是“语义对齐”:把“少放辣”这样的口语,映射到机器人能识别的对象和参数上,比如“辣椒用量=0”。
从数学上看,大模型做的事是计算“在给定指令下,哪条动作序列最合理”。它把整个任务当成一句“动作版的句子”,逐个词(逐个动作)地预测,再把所有预测概率乘起来,选出最通顺的那一句。
就像总厨把一句“少放辣”落成一张清楚的配料清单,大模型把自然语言落成机器人可以一步步执行的动作序列。解析得越准,后面的烹饪环节就越省心。
- 指令 $x$顾客(人类)说出的自然语言,比如“少放辣”。
- 动作序列 $A$总厨(大模型)产出的有序动作列表,比如“不放辣椒、不放辣油、正常放盐”。
- 条件概率 $P(a_i \mid a_{<i}, x)$已知顾客指令和前面 $i-1$ 个动作的条件下,下一步选择动作 $a_i$ 的概率。
- 连乘 $\prod$把每一步的条件概率相乘,得到整条序列的总概率;模型挑选总概率最高的序列作为最终计划。
动作规划
菜谱有了,步骤清楚了,但新问题来了:先切肉还是先热锅?机械臂从灶台到案板,手要怎么抬、怎么绕开头顶的吊灯?这就是动作规划要回答的问题——在“现在在哪”和“要去哪”之间,找一条能走、高效、不撞东西的路。
动作规划通常分三层来想。首先是“轨迹生成”:在起点和终点之间插值出一条平滑路径,就像用圆规在图纸上画线;其次是“抓取策略”:决定手张开多大、从哪个角度靠近物体最稳;最后是“约束满足”:保证路径全程不碰倒酱油瓶、不超出机械臂的关节极限。三个问题一起解,才算是“心里有谱”。
规划的本质是一个最优化问题:在所有候选轨迹里,挑一条能让“累计收益”最大的。收益可以是省时间、省能量、离障碍远。数学上写成对奖励总和的“最大化”。
总厨规划做菜顺序时,脑子里也在“打分”:先烧水再切菜能省时间,顺手拿调料少走弯路。机器人的动作规划,就是把总厨这套“精打细算”变成了可计算的数学问题。
- 轨迹 $\tau$一条完整的状态-动作序列,相当于一份“从案板到灶台的走位方案”。
- 奖励 $R(s_k, a_k)$评价在某状态做了某动作“划不划算”,比如贴墙走减分、撞瓶子重罚。
- 累加 $\sum_{k=0}^{T}$把整条轨迹上每一步的得分加起来,得到这条路的总分。
- 最大化 $\mathop{\arg\max}_{\tau}$在所有候选轨迹中挑出总分最高的那一条,记为 $\tau^{*}$。
力觉反馈处理
炒菜不能只靠眼睛。掂锅时手上的分量、锅铲碰到锅底的阻力、鸡蛋壳裂开时那一下微妙的触感——这些都是“手感”。机器人要做出精细动作,光有摄像头远远不够,它需要力觉反馈来充当“皮肤上的神经”。
力觉反馈有两层含义。第一层是“测量”:力传感器贴在机械臂手腕上,实时报告“我现在承受了多大的力、什么方向”;第二层是“响应”:控制系统根据这个力动态调整动作。最有名的响应策略叫“阻抗控制”,它让机械臂表现得像一根有弹性的弹簧——碰到硬物会顺着让一让,而不是死命硬顶。
阻抗控制的核心公式,把机械臂的“手感”建模成三个物理量的平衡:惯性(想不想动)、阻尼(会不会晃)、刚度(有多犟)。当实际位姿跟期望位姿出现偏差,或者外界施加了力,系统就按这个方程去调节。
有了这层“弹性手腕”,学徒打鸡蛋再也不会把蛋捏碎,机器人拧螺丝、插接口、装配零件时,也能像老师傅一样“凭手感找位置”,而不是蛮力硬来。
- 质量矩阵 $M$代表手臂的惯性——越“重”的手臂越难被外力迅速推动。
- 阻尼系数 $B$像在油里挥手的阻力,负责把来回震荡慢慢耗掉。
- 刚度 $K$像弹簧的硬度,决定机器人“多犟”地要回到目标位置。
- 位姿偏差 $x - x_d$机器人实际位置与期望位置之间的差距,是“偏了多少”。
- 外力 $F_{ext}$机械臂接触环境时受到的反馈力,是“手感”的入口。
仿真迁移
学徒在家用一锅沙子练颠勺,练得再熟练,一到餐厅面对真材实料还是手忙脚乱:真锅更重、真油会溅、真火更旺。这就是“仿真到现实”的鸿沟。在仿真环境里跑得飞快的机器人策略,放到真实机器人上往往当场翻车。
为什么会有鸿沟?因为仿真永远无法 100% 复刻真实世界——摩擦力、光照、线缆刚度、电机延迟,处处有细微差别。业界的主流对策是“域随机化”:训练时故意把仿真的物理参数(摩擦系数、物体重量、相机噪声)随机乱改,逼机器人在各种“变幻莫测”的厨房里都练过一遍,实战时反而见怪不怪。此外,“数字孪生”用真实数据精修仿真场景,让虚拟厨房尽量逼近实体厨房。
域随机化的数学本质,是把“参数不确定”直接写进训练目标:不再优化某一个固定仿真环境的损失,而是优化“所有可能的仿真环境”上的平均损失。
换句话说,聪明的学徒在家练功时,会故意把锅换成不同大小、不同轻重,甚至蒙上眼睛练手感。等他走进真正的餐厅,无论遇到什么锅,都能稳稳颠勺——域随机化就是这个道理。
- 随机参数 $\xi$仿真的可变物理参数,比如摩擦系数、物体重量、光照强度。
- 损失函数 $\mathcal{L}(\theta, \xi)$在某个特定仿真环境下,策略参数 $\theta$ 的表现有多差。
- 期望 $\mathbb{E}_{\xi}$对所有随机参数取值求平均,代表“平均厨房”上的表现。
- 最小化 $\mathop{\arg\min}_{\theta}$找到一组参数,让“平均厨房”上的损失最小,这个参数就是最终部署的策略。
VLA端到端控制
前面讲的流程像是“总厨下达步骤、学徒分步执行”——总厨和学徒是两个人。VLA 模型则更进一步:直接把总厨的大脑装进学徒的身体,看见、听见、动手一气呵成,中间不再需要翻译官。
VLA 是“视觉-语言-动作”(Vision-Language-Action)的缩写。它把三种信息塞进同一个神经网络:摄像头画面告诉它“东西长什么样、在哪”,自然语言告诉它“要干什么”,动作输出告诉它“手该怎么动”。三者融合训练后,模型学会了一种条件反射式的技能:看到某个画面、听到某句话,就直接输出对应的动作。
训练 VLA 最主流的方法是“行为克隆”——收集大量人类示教数据(人看着屏幕遥控机械臂干活,同时录下画面、指令和动作),然后让模型模仿。数学上,行为克隆就是在最大化“给定画面和指令时,模型输出与人类动作一致”的概率,等价于最小化下面的损失。
VLA 让机器人从“听指令办事”进化到“看一眼就懂、一听话就动”。不过总厨再厉害,也不可能包办一切——工程上还得靠底层控制器和安全机制兜底,这就引出最后一节。
- 样本三元组 $(v, l, a)$一条示教数据,包含画面 $v$、语言指令 $l$、人类动作 $a$。
- 策略 $\pi_{\theta}(a \mid v, l)$模型在给定画面和指令时选择动作 $a$ 的概率。
- 负对数似然 $-\log \pi_{\theta}$预测越准,概率越接近 1,$\log$ 后越接近 0,损失越小。
- 期望 $\mathbb{E}$对数据集里所有示教样本求平均,求出“整体模仿得好不好”。
工程落地实践
再绝妙的菜谱,真要开餐厅运营,还要操心进货渠道、食品安全、翻台率。把大模型机器人从实验室搬进工厂和家庭,同样有一堆“烟火气”的工程问题要解决。
第一是数据采集。机器人的本领上限,很大程度上由示教数据决定——数据像食材,食材不新鲜,总厨再牛也做不出好菜。工业界会用遥操作设备让人“手把手”教机器人,并给数据打上质量标签。第二是安全冗余。神经网络偶尔会“走神”,所以急停开关必须保留、关节力矩必须限幅、人工远程接管通道必须随时可用——这是不可妥协的底线。第三是性能评估:不能只看“偶尔成功一次”,要统计成功率、节拍时间、故障率,用数字决定能否上线。
评估线上表现最直白的指标是成功率——一百次任务里成功了多少次。
一家餐厅能不能活下去,不看某一道菜惊艳,而看每天稳定出餐的可靠性。大模型机器人要真正落地,同样得靠扎实的数据、可靠的安全和严格的评估——这也是从“实验室 demo”走向“生产力工具”的最后一公里。
- 成功次数 $N_{\text{success}}$在测试中任务完成且未触发安全事件的次数。
- 总次数 $N_{\text{total}}$参与测试的全部任务次数,包括失败的。
- 比值与百分比 $S$成功数除以总数再乘 100,得到一个可横向对比的分数。
AI 应用场景
家庭服务机器人:听懂人话的“万能跑腿学徒”
阶段:指令解析 + 动作规划
解决的问题:传统扫地机器人、机械臂只能执行预设按键或固定程序,用户说“帮我把沙发上的毯子拿过来”这类自然语言,它们完全听不懂。大模型驱动后,机器人先把这句话解析为“找到毯子→规划路径→抓取→送过去”的任务链,再逐段执行。
具体案例:某家居机器人团队用 VLA 模型替换原来的规则引擎:用户用自然语言下达 50 种家务指令,机器人端到端输出动作。实测客厅场景下“取物-递送”类任务成功率从 61% 提升到 89%,其中指令解析环节贡献了大部分提升。
工业柔性装配:凭手感干活的机械臂
阶段:力觉反馈 + 柔顺操作
解决的问题:手机摄像头模组装配里,零件公差极小,纯位置控制会硬碰硬导致划伤或卡死。传统方案靠昂贵的精密夹具,换产线就要重新设计。引入阻抗控制后,机械臂自身变成“弹性手腕”,靠力觉反馈自动找正。
具体案例:某 3C 工厂把装配工位的机械臂控制从“位置模式”切换为“力位混合模式”:末端力传感器以 1kHz 频率采样,阻抗控制器实时调节下压力。装配良率从 96.2% 提升到 99.1%,且换产线时只需改软件参数,不再重做硬件。
仓储搬运机器人:仿真练功、实战上岗
阶段:仿真迁移 + 域随机化
解决的问题:在真实仓库里训练抓取策略,成本高、风险大、还会占用生产时间。纯仿真训练又因为物理差异导致部署后性能跳水。域随机化让机器人在“虚拟百变仓库”里先练出鲁棒的本领。
具体案例:某电商仓储项目在仿真中随机化包裹重量、摆放角度、光照条件,训练出的抓取策略未经真实数据微调直接部署到 200 台分拣机器人上,抓取成功率保持在 95% 以上,部署周期从 3 个月压缩到 2 周。
Python 演示
# -*- coding: utf-8 -*-# 大模型驱动的机器人控制模拟: 从指令到动作的完整流程import random class SimRobot: def __init__(self): self.arm_angle = 0.0 # 机械臂当前角度 self.gripper_open = True # 夹爪是否张开 self.force_error = 0.0 # 接触力误差 self.episode_count = 0 # 完成回合数 self.free_lists = [] # 空闲目标位列表 def parse_instruction(self, text): # 模拟大模型把自然语言指令解析为结构化任务 if "抓" in text or "pick" in text: return {"skill": "grasp", "target": "目标物"} if "放" in text or "place" in text: return {"skill": "place", "target": "托盘"} return {"skill": "idle", "target": None} def plan_trajectory(self, start, end, steps=5): # 线性插值生成一条从起点到终点的轨迹点序列 path = [] for i in range(steps + 1): t = i / float(steps) x = start[0] + (end[0] - start[0]) * t y = start[1] + (end[1] - start[1]) * t path.append((x, y)) return path def apply_force_feedback(self, contact_force, target_force=2.0): # 力觉反馈: 比较接触力与目标力, 决定是否调整 self.force_error = contact_force - target_force if abs(self.force_error) < 0.3: return "ok" return "adjust" def sim_to_real_transfer(self, damping, randomized=True): # 域随机化: 给物理参数加扰动, 模拟仿真到真实的差距 if randomized: damping *= random.uniform(0.8, 1.2) return max(0.1, damping) def main(): robot = SimRobot() orders = ["抓取桌上的苹果", "把苹果放到托盘"] for order in orders: print("顾客指令:", order) task = robot.parse_instruction(order) print("总厨解析:", task) if task["skill"] == "grasp": path = robot.plan_trajectory((0, 0), (1, 2)) print("规划轨迹点数:", len(path)) for pt in path[:3]: print(" 轨迹点 (%.2f, %.2f)" % pt) print("力觉反馈:", robot.apply_force_feedback(2.1)) robot.episode_count += 1 damping = robot.sim_to_real_transfer(0.5) print("仿真迁移后阻尼:", round(damping, 3)) print("完成回合数:", robot.episode_count) if __name__ == "__main__": main()
def parse_instruction(self, text):模拟大模型读菜单,把自然语言变成结构化任务if "抓" in text or "pick" in text:关键词匹配充当意图识别,命中就返回 grasp 技能t = i / float(steps)归一化插值进度,float防止整数除法截断path.append((x, y))把每个轨迹点收集进路径列表,形成完整路线self.force_error = contact_force - target_force计算接触力与目标力的偏差,这是手感的核心if abs(self.force_error) < 0.3:误差在阈值内就认为接触合格,否则需要调整damping *= random.uniform(0.8, 1.2)域随机化给阻尼参数加 20% 扰动,模拟仿真与真实差异return max(0.1, damping)限制阻尼最小值,避免迁移后出现非法物理参数
常见误区
误区我以为只要把大模型接上机器人,它就能直接输出电机电流或者关节力矩,像遥控器一样精细控制每一个马达,完全不需要传统控制算法了。
正解大模型更像“总厨”,输出的是高层的动作意图和任务序列(“去抓苹果”“往前挪 10 厘米”),而不是底层 PWM 波形或电流指令。电机级的精确控制仍由传统控制算法(PID、阻抗控制)完成。总厨喊“颠勺”和手腕实际用多大力气,是两码事。
为何常见:因为“端到端”这个词太有迷惑性,让人误以为全链路都被神经网络接管了,忽略了工程上分层分工的现实。
误区我花了几周在仿真环境里把策略训练得近乎完美,结果一部署到真实机器人上就乱套,我第一反应是代码写错了,反复排查了好久。
正解这是典型的“仿真到现实鸿沟”。仿真永远无法 100% 复刻真实物理(摩擦力、光照、线缆刚度、电机延迟都有偏差)。业界用域随机化、数字孪生、策略蒸馏等手段,主动在训练时“制造”差异来提升鲁棒性,而不是追求仿真绝对逼真。
为何常见:因为现代仿真引擎渲染出来的画面太逼真了,视觉上的真实感让人忽略了物理引擎与真实世界之间那些看不见的细微差异。
误区我觉得只要给机器人装一个高精度的六维力传感器,它自然就有了“手感”,立刻能柔顺地打鸡蛋、拧螺丝。
正解传感器只是“手感”的入口,真正关键的是背后的控制策略。阻抗控制让机械臂表现出“弹性手腕”,碰到硬物会顺着让开而不是死顶;没有这套控制策略,传感器读数只是一串没用的数字。硬件负责“感知”,算法负责“会做”。
为何常见:因为大众习惯把能力归因于硬件升级,忽略了软件算法才是把传感器数据变成灵巧动作的灵魂。
误区VLA 模型那么强,直接输出动作序列,底层那些 PID、阻抗控制是不是就该淘汰了?我觉得以后一个神经网络就能包办所有机器人控制。
正解工程上 VLA 负责“做什么、朝哪走”的高层决策,底层仍需 PID、阻抗控制保证执行平滑与安全;而且急停开关、力矩上限这类安全冗余绝不应该交给神经网络。总厨再厉害,也不能让他替跑堂的端盘子——各层各司其职才可靠。
为何常见:因为论文里展示的端到端效果太惊艳,让人只看到“一个模型搞定一切”的表象,忽略了工业部署中“层层冗余、逐级兜底”的工程现实。
面试题
Q1. VLA 模型名称中的三个字母分别代表什么?
- A.视频-学习-算法网络
- B.视觉-语言-动作模型← 正确答案
- C.语言-视觉-网络架构
- D.动作-语言-价值估计
答案:B。VLA 是 Vision-Language-Action 的缩写,即“视觉-语言-动作”三模态融合模型。就像总厨同时看菜色(视觉)、听点单(语言)、指挥颠勺(动作)。A、C、D 都是拼凑的干扰项,不符合学界通用定义。
Q2. 大模型驱动机器人时,主要把自然语言指令“翻译”成什么?
- A.底层电机需要的具体扭矩值
- B.高层语义的抽象动作意图← 正确答案
- C.摄像头采集的原始像素点
- D.路由器转发的网络数据帧
答案:B。大模型扮演“总厨”角色,输出的是“抓苹果”“往前走”这类高层动作意图,底层扭矩由传统控制器承担。A 错在越级,C 是输入不是输出,D 与机器人控制无关。
Q3. 阻抗控制主要用于解决机器人的什么问题?
- A.让机械臂动作变得柔顺可退让← 正确答案
- B.提升图像渲染的流畅帧率
- C.增大电池驱动的续航里程
- D.压缩语音模型的参数量
答案:A。阻抗控制给机械臂建模出“弹性手腕”——碰到硬物会顺着让开,这是柔顺操作的关键。就像总厨掂锅时手腕有弹性,能感知分量又不伤锅。B、C、D 分别是渲染、能源、模型压缩问题,与力觉控制无关。
Q4. 域随机化解决仿真迁移问题的核心思路是什么?
- A.用真实数据全部替换仿真数据
- B.训练时随机改变仿真物理参数← 正确答案
- C.完全取消仿真只靠实物训练
- D.把真实环境精确复刻成仿真
答案:B。域随机化故意在训练时随机改摩擦、重量、光照等参数,让机器人在“百变厨房”里练出鲁棒性。A 成本过高且不现实,C 违背仿真低成本的初衷,D 是数字孪生的思路而非域随机化。
Q5. 具身智能机器人与普通聊天机器人的最大区别是什么?
- A.能够在物理世界中执行动作← 正确答案
- B.能够生成更长的对话文本
- C.能够识别更多的语言种类
- D.能够提供更快的网络服务
答案:A。具身智能的核心是“有身体、能干活”——感知-思考-行动的闭环落在物理世界。聊天机器人再能说,也像只会背菜谱不会颠勺的学徒。B、C、D 都是纯软件能力的比拼,不是具身差异。
Q6. 下列哪些场景适合应用力觉反馈技术?
- A.精密轴承的柔顺装配← 正确答案
- B.生鸡蛋的轻拿轻放抓取← 正确答案
- C.文档的自动排版与打印
- D.门窗开合过程中的阻力感知← 正确答案
答案:ABD。力觉反馈用在“需要感知接触力”的操作上:装配要柔顺找正(A)、抓鸡蛋要控制力度(B)、开门要感知阻力变化(D)。C 是纯软件办公场景,不涉及物理接触力,故选 0、1、3。
Q7. 仿真训练好的策略部署到真实机器人后性能下降,最核心的原因是什么?
- A.仿真与真实的物理参数存在差异← 正确答案
- B.真实机器人的外观颜色不同
- C.训练代码的注释写得不够完整
- D.网络带宽存在传输延迟问题
答案:A。这就是“仿真到现实鸿沟”:摩擦力、重量、延迟等物理参数在仿真里被简化,真实环境总有偏差,就像沙子练颠勺遇到真锅会手忙脚乱。B、C 与物理差异无关,D 属于部署环境问题而非仿真迁移主因。
Q8. 下列哪些属于大模型驱动机器人的典型优势?
- A.理解复杂的自然语言指令← 正确答案
- B.跨任务复用已有的知识← 正确答案
- C.完全替代所有硬件设备
- D.自动组合长任务动作序列← 正确答案
答案:ABD。大模型的优势在于语言理解(A)、知识泛化复用(B)和长序列任务组合(D),就像总厨既能看懂菜单又能举一反三。C 是错误的绝对化表述——大模型离不开机器人硬件,故选 0、1、3。
Q9. 行为克隆训练 VLA 模型时,监督信号主要来源于哪里?
- A.随机生成的噪声信号序列
- B.天气预报的历史记录数据
- C.人类示教时记录的动作数据← 正确答案
- D.游戏画面中的像素颜色值
答案:C。行为克隆就是“模仿学习”——录下人类遥控操作时画面、指令与动作的对应关系,让模型照着学,相当于让学徒看一万遍老师傅做菜。A 是噪声没有信息量,B、D 与机器人动作监督无关。
Q10. 工程化部署大模型机器人时,需要具备哪些安全冗余措施?
- A.保留底层急停开关的物理通路← 正确答案
- B.对关节力矩设置硬性上限← 正确答案
- C.移除全部传感器以简化系统
- D.保留人工远程接管的控制通道← 正确答案
答案:ABD。安全冗余的底线是:急停必须物理可靠(A)、力矩限幅防止伤人毁机(B)、人工随时可以接管(D)。C 恰恰相反——移除传感器会让机器人“又瞎又聋”,丧失感知与反馈能力,故选 0、1、3。