简介:本资源是经典机器人学文献《Legged Robots that Balance》的中文译稿(.pdf格式),面向机器人控制、智能体运动规划及AI动力学建模方向的研究者与高年级本科生。聚焦足式机器人主动平衡这一核心挑战,系统梳理了Raibert团队自1974年起在弹跳杆原型、单腿/多腿动态控制、传感器融合与反馈机制等关键路径上的开创性工作,涵盖前言、发展史、动力学建模、运动阶段分解(抬腿/摆动/落地)、三维空间运动实现及实验录像配套说明等内容。资源为单文件PDF,大小7.13MB,结构完整,含详细目录、技术插图与参考文献,便于精读与算法复现。目前已有395人学习下载,读者可直接获取权威学术脉络、经典控制框架设计思路、Leg实验室原始实验方法论,以及对生物弹性机制启发机器人设计的深刻洞见,是理解动态腿部系统控制原理不可多得的基础性资料。
1. 足式机器人平衡算法:不是“让机器人不摔倒”,而是教它像人一样“借力打力”
你有没有试过单脚站立?一开始晃得厉害,但几秒后身体会自动微调——脚踝轻轻拧、膝盖微微屈、腰腹悄悄绷紧,甚至手指都下意识张开一点来辅助平衡。这不是靠死记硬背的姿势,也不是靠肌肉硬扛,而是一套毫秒级响应、多关节协同、边倒边扶的动态策略。
足式机器人平衡算法,说白了,就是把这套“人类单脚站立本能”翻译成机器能听懂的语言:不是给机器人预设一个“绝对垂直”的静止目标,而是教会它在奔跑、跳跃、踩上石头、被风吹歪的每一瞬间,都懂得“顺势一推、借力一收、提前一压”,用腿当弹簧、用身体当杠杆、用误差当信号——在跌倒的边缘反复横跳,却始终不真正倒下。
这和我们日常理解的“防摔程序”有本质区别:防摔是被动兜底(比如检测到倾斜就急刹),而平衡算法是主动造势(比如故意前倾来加速,再用后腿猛蹬拉回)。它诞生于上世纪70年代末的真实工程困境:当机器人第一次被要求在斜坡上小跑、在碎石堆里跨步、在无地图环境下自主落脚时,“站稳”这个朴素目标突然变得无比复杂——因为地面不平、惯性难消、传感器延迟、电机响应滞后……所有这些“不理想”,反而成了算法必须消化的日常输入。读懂这份《Legged Robots that Balance》,就是走进那个没有现成答案、只能靠物理直觉+数学建模+实机试错硬生生蹚出一条路的原始现场。它不讲云端大模型,不谈芯片算力,只聚焦一件事:当机器人腾空离地的0.3秒里,如何用一次精准的腿长调节,把下坠的动能,变成下一次起跳的弹力。
2. 它到底在算什么:从“静态站桩”到“动态借力”的三重认知跃迁
2.1 静态平衡:教机器人当雕塑,还是教它当体操运动员?
很多人初看足式机器人,第一反应是:“它怎么不摔倒?”——这问题本身,就暴露了对平衡算法的根本误解。传统工业机器人(比如焊接臂)追求的是静态稳定:所有关节锁死在精确角度,重心严格落在支撑多边形(所有着地脚连成的区域)中心,像一座铜像。这种模式在工厂里很可靠,但放到野外就寸步难行:一块凸起的石头会让支撑多边形骤然缩小,机器人立刻判定“失稳”,要么僵住,要么瘫倒。
而Raibert团队要解决的,是动态稳定。他们观察动物奔跑发现:猎豹高速转弯时身体大幅侧倾,袋鼠跳跃落地瞬间膝盖深屈缓冲,人踩滑板时上身反向扭动维持平衡……这些动作里,重心常常大幅偏离支撑域,身体持续产生加速度,甚至主动制造“失控感”。但关键在于:每一次“失控”,都被设计成下一次“控制”的起点。
比如书中图1.2展示的“静步态”(static gait):四足机器人像老式机械钟表一样,严格保证每一步都让重心投影落在当前着地脚构成的多边形内。这安全,但慢如蜗牛,且无法跨越障碍——因为要跨过一根木头,必须先抬起一只脚悬空,此时支撑域瞬间只剩三只脚,若按静平衡逻辑,机器人会因“支撑不足”而拒绝抬脚。
提示:静态平衡的数学本质是求解一个不等式组:重心x坐标 ∈ [min(x_i), max(x_i)],y坐标同理。而动态平衡的数学本质,是求解一个微分方程组:mx'' = ΣF_x, my'' = ΣF_y, Iθ'' = Στ,其中力F和力矩τ由实时计算的腿运动反推得出。
2.2 动力学建模:为什么不能只靠“眼睛看+脑子想”?
假设你想让机器人跳过一个0.5米高的台阶。如果只用静态思维,你会让它先走到台阶前,停稳,再抬腿迈过去——这需要精确测距、规划关节轨迹、校验每一步的支撑稳定性。但Raibert发现,动物根本不是这么干的:猫跳上柜子前几乎不“测量”,而是靠前肢触碰感知高度,后肢随即爆发式蹬伸,整个过程身体前倾形成抛物线,落地时前爪已主动屈曲吸能。
这种流畅性,依赖对能量流的实时掌控。书中第1章明确指出:“在跑动周期内,系统会多次改变储存能量的形式:重力势能→动能→腿部弹性势能→动能→重力势能。” 平衡算法的核心任务之一,就是追踪并引导这条能量链。
以单腿跳跃机器人(第2章主角)为例,它的“大脑”其实只做三件事:
- 高度控制:根据当前离地高度和期望腾空时间,计算腿部弹簧需储存的弹性势能(E = ½kx²),反推出腿长压缩量x;
- 速度控制:根据当前水平速度与目标速度差,计算腿部施加的水平冲量(J = Δp = mΔv),决定蹬地角度和力度;
- 姿态控制:根据身体俯仰角速度,计算腿部需产生的矫正力矩(τ = Iα),通过调整落点前后位置实现(落点靠前→产生抬头力矩,反之亦然)。
这三件事看似独立,实则环环相扣:蹬地角度影响水平冲量,也影响腿部压缩量;落点位置影响姿态矫正,也改变支撑点从而影响重心投影……算法必须在一个统一的动力学模型里同步求解。这个模型不是抽象公式,而是直接对应机器人的物理参数:腿质量m、转动惯量I、弹簧刚度k、电机最大扭矩τ_max、传感器采样频率f_s。书中第6章附录6A给出的平面单腿模型运动方程,就是把牛顿第二定律(F=ma)和欧拉方程(τ=Iα)用机器人关节变量(腿长r、俯仰角θ)重新表达的结果。
2.3 实时反馈闭环:传感器数据不是“参考答案”,而是“考试题目”
很多初学者以为,给机器人装上陀螺仪和力传感器,算法就能“看到”状态然后修正。但Raibert在实验中发现,传感器数据永远滞后、永远带噪、永远不完整。例如,单腿机器人落地瞬间,足底六维力传感器会因冲击产生剧烈震荡,陀螺仪因高g值过载而短暂失效——这0.1秒的“数据黑洞”,恰恰是平衡最关键的窗口。
因此,算法必须构建预测-校正双轨机制:
- 预测轨(模型驱动):基于上一时刻状态和控制指令,用动力学模型预估当前应有状态(如:按此蹬地力度,0.05秒后身体应前倾3°);
- 校正轨(数据驱动):用传感器读数与预测值比对,计算残差(residual),仅对残差进行小幅修正(如:实际前倾了5°,比预测多2°,则下一周期提前0.02秒启动姿态矫正)。
这种设计极大降低了对传感器精度的依赖。书中第3章描述3D单腿机器人实验时提到:“即使陀螺仪漂移达0.5°/s,系统仍能维持10分钟连续跳跃”——因为漂移被当作缓慢变化的系统偏差,纳入模型参数在线估计(如用卡尔曼滤波更新陀螺仪零偏),而非当作瞬时错误去激烈纠正。这就像老司机开车:不是死盯仪表盘转速,而是听发动机声浪、感受车身震动、预判弯道弧度,仪表读数只是偶尔扫一眼的验证。
3. 常见误区:那些让新手调试三天却毫无进展的“伪概念”
3.1 误区一:“平衡算法 = PID控制器” → 为什么混?PID是工具,不是思想
很多工程师拿到项目第一反应是:“上个PID吧!” 然后把陀螺仪角度接P,角速度接D,调半天发现机器人要么疯狂抖动,要么迟钝如树懒。
为什么混?因为PID确实出现在书中控制框图里(如第2章图2.5的姿态控制器),但它在这里的角色,是执行层的伺服调节器,而非决策层的平衡策略。Raibert的架构是:高层算法(如状态机)决定“此刻该用多大推力让身体前倾”,底层PID只负责“如何让电机输出这个推力值”。
怎么区分?问自己一个问题:如果把PID参数全调成0,机器人是否彻底失控?如果是,说明你把PID当成了平衡核心;如果只是动作变笨拙但依然能跳(如书中图2.8实验所示),说明PID只是执行器——真正的智能在上层策略里。书中第6章提出的“腿部扫描算法”,本质就是一种非PID的高层策略:它不关心当前姿态误差,而是主动扫描前方地形,预判落点,再反推所需腿长和角度,属于典型的“前馈主导+反馈微调”。
3.2 误区二:“动力学模型越复杂越好” → 为什么混?被教科书带偏了
研究生常陷入一个陷阱:花三个月推导12自由度四足机器人的完整拉格朗日方程,结果仿真里连原地站立都抖。
为什么混?教科书强调“精确建模”,但Raibert在第1章就直言:“使用动力学的控制技术可能非常简单……如果控制系统与被控对象的动态特性相协调,通常可以使控制系统变得更简单。” 他所有成功案例(单腿、双足、四足)都基于简化模型:单腿用弹簧-质点模型(SLIP),双足用倒立摆模型(IPM),四足用虚拟腿模型(VLM)。这些模型故意忽略摩擦、关节柔性、空气阻力等“次要因素”,只为抓住最核心的物理本质——能量交换与动量守恒。
怎么区分?检查你的模型是否满足“Raibert三原则”:① 能解释主要现象(如跳跃高度与腿长压缩量的平方关系);② 参数可物理标定(弹簧刚度k能用砝码实测);③ 计算足够快(单次求解<1ms)。若模型推导占了你90%时间,而实际控制效果提升不到10%,那大概率是过度建模。
3.3 误区三:“传感器越多越稳” → 为什么混?混淆了“感知能力”和“控制鲁棒性”
有人给机器人加激光雷达、深度相机、IMU、足底压力阵列、关节编码器……最后发现数据融合代码比控制代码还长,系统却更易崩溃。
为什么混?误以为“信息丰富=决策可靠”。但Raibert在第4章虚拟腿实验中证明:最鲁棒的平衡,往往源于最少的、最关键的感知。他的单腿机器人只用3个传感器:足底开关(判断是否触地)、编码器(测腿长)、陀螺仪(测俯仰角速度)。所有高级行为(如圆形奔跑)都由这3个信号的状态机驱动。
怎么区分?做个“断感测试”:依次拔掉传感器,看系统何时失效。若拔掉陀螺仪后机器人立即倾倒,说明姿态控制严重依赖它;若拔掉深度相机后只是路径稍偏,说明视觉对基础平衡非必需。书中第7章表格控制法(table-based control)的精髓,正是把复杂感知映射为离散状态(如“地形类型:平整/斜坡/台阶”),再查表调用预存的控制参数——用信息降维换取实时性与鲁棒性。
3.4 误区四:“算法调好就一劳永逸” → 为什么混?忽视了硬件与算法的共生演化
工程师常抱怨:“按论文参数调好了,换台电机就又不行。”
为什么混?把算法当成脱离硬件的纯软件。但Raibert从1974年就开始强调:弹性是控制的一部分。他受Emilio Bizzi启发,刻意在腿中加入弹簧(而非刚性连杆),因为弹簧的储能-释能特性天然匹配奔跑的能量循环。这意味着,算法中的“腿长压缩量x”,直接对应硬件弹簧的物理形变;算法计算的“蹬地力F”,受限于电机通过减速器传递到弹簧的最大力。
怎么区分?检查你的算法是否包含硬件约束项。例如,书中第2章“跳行高度控制”算法,其输出不仅有目标腿长,还有“最大允许压缩速率dx/dt”,这是为防止弹簧过载而设的硬件保护阈值。若你的算法从未出现类似约束,说明它还没真正“长”进机器人身体里。
4. 核心算法拆解:从单腿跳跃到四足奔跑的演进逻辑
4.1 单腿跳跃:所有复杂性的“原子单元”
Raibert选择单腿机器人作为起点,并非偷懒,而是因为它浓缩了足式运动最本质的矛盾:腾空(无支撑)与触地(有支撑)的周期性切换。第2章详细描述了这个“原子单元”的控制分解:
# 单腿跳跃状态机伪代码(基于书中图2.4) class SingleLegController: def __init__(self): self.state = "FLIGHT" # 飞行态 self.target_height = 0.8 # 目标腾空高度(m) self.target_velocity = 2.0 # 目标水平速度(m/s) def update(self, sensor_data): if self.state == "FLIGHT": # 飞行中预测落地点和姿态 predicted_impact_time = self.predict_impact_time() # 提前0.1秒启动姿态准备 if predicted_impact_time < 0.1: self.state = "STANCE_PREP" self.desired_leg_length = self.calc_land_length( sensor_data.pitch_rate, # 俯仰角速度 self.target_velocity # 目标速度 ) elif self.state == "STANCE_PREP": # 触地前微调腿长,确保足底开关触发 self.leg_length = self.desired_leg_length if sensor_data.foot_contact: # 足底开关闭合 self.state = "STANCE" self.stance_start_time = time.time() elif self.state == "STANCE": # 支撑相:同时进行三重控制 # 1. 高度控制:压缩弹簧蓄能 compression = self.calc_compression( current_height=sensor_data.height, target_height=self.target_height ) self.spring_force = 0.5 * self.k * compression**2 # 2. 速度控制:调整蹬地角度 push_angle = self.calc_push_angle( current_velocity=sensor_data.velocity_x, target_velocity=self.target_velocity ) # 3. 姿态控制:通过落点前后偏移 foot_offset = self.calc_foot_offset( current_pitch=sensor_data.pitch, target_pitch=0.0 ) # 合成最终控制指令 self.motor_command = { 'spring_compression': compression, 'push_angle': push_angle, 'foot_offset': foot_offset }这段伪代码揭示了三个关键设计哲学:
①状态驱动而非时间驱动:不依赖固定周期(如“每100ms执行一次”),而是根据传感器事件(足底接触、预测触地)切换状态,适应不同地形下的不规则跳跃节奏;
②解耦但协同:高度、速度、姿态三者分别计算,但最终指令合成时,foot_offset会影响支撑力矩进而影响姿态,push_angle会影响水平分力进而影响速度——解耦便于调试,协同保证物理一致性;
③预测前置:在飞行态就计算desired_leg_length,避免触地瞬间才匆忙响应,这是应对传感器延迟的核心技巧。
4.2 虚拟腿模型:四足奔跑的“降维密码”
当从单腿扩展到四足,自由度爆炸式增长(单腿3DOF,四足至少12DOF),若直接建模将陷入维度灾难。Raibert的破局点是虚拟腿(Virtual Leg)概念(第4章核心):把四条真实腿的合力,等效为一条从躯干质心指向地面某点的“虚拟腿”,其刚度、阻尼、长度由四腿协同控制决定。
提示:虚拟腿不是数学虚构,而是物理可实现的控制目标。书中附录4A证明:当四腿施加的力满足∑F_i = F_virtual 且 ∑τ_i = r_virtual × F_virtual 时,系统动力学等价于单条虚拟腿。
这一等效带来革命性简化:
- 运动规划降维:无需为12个关节单独规划轨迹,只需规划虚拟腿的端点轨迹(即“落点序列”)和刚度曲线;
- 平衡控制统一:四足的动态平衡,退化为单腿的平衡问题——只要虚拟腿端点始终落在“虚拟支撑域”(由当前着地腿构成)内,且虚拟腿力方向指向质心,系统即稳定;
- 步态生成自动化:书中图4.5展示的“对角小跑步态”,本质是虚拟腿端点在身体下方画出的椭圆轨迹,四条真实腿通过相位差(如左前腿相位0°,右后腿180°)轮流承担该虚拟腿功能。
# 虚拟腿落点规划(基于书中图4.6) def virtual_leg_footprint(stance_phase, terrain_slope): """ stance_phase: 当前支撑相进度 (0.0~1.0) terrain_slope: 地面坡度 (rad) 返回虚拟腿端点在机体坐标系下的(x,y)坐标 """ # 在平坦地面,落点沿椭圆轨迹 base_x = 0.3 * cos(2*pi * stance_phase) # ±0.3m前后摆动 base_y = 0.1 * sin(2*pi * stance_phase) # ±0.1m左右摆动 # 坡度补偿:上坡时落点前移,增加支撑力矩 slope_compensation = 0.2 * terrain_slope # 每弧度坡度前移0.2m return (base_x + slope_compensation, base_y) # 四腿相位分配(实现对角步态) leg_phases = { 'LF': 0.0, # 左前腿 'RF': 0.5, # 右前腿 'LH': 0.5, # 左后腿 'RH': 0.0 # 右后腿 } # 当LF腿处于支撑相0.2时,RF腿处于0.7(即摆动相),LH腿处于0.7,RH腿处于0.2 # 自然形成对角支撑(LF+RH 或 RF+LH)这段代码体现了Raibert思想的精妙:用几何直觉替代复杂优化。椭圆轨迹保证了落点平滑过渡,坡度补偿项用线性关系近似了非线性地形交互,相位分配则让生物本能(对角步态抗翻滚)成为代码的自然涌现。
4.3 表格控制法:把“经验”编译成机器语言
第7章提出的表格控制法(Table-Based Control),是Raibert对“算法可解释性”的终极实践。它不追求通用数学公式,而是将大量实验数据(如不同坡度、不同速度下的最优腿长、蹬地角、落点偏移)整理成查找表,运行时直接插值调用。
# 表格控制数据结构(简化示意) CONTROL_TABLE = { 'terrain_type': ['flat', 'uphill_5deg', 'uphill_10deg', 'downhill_5deg'], 'speed_range': [0.0, 0.5, 1.0, 1.5, 2.0], # m/s 'height_range': [0.6, 0.7, 0.8, 0.9], # m 'data': [ # 对应 flat 地形的数据矩阵 [speed_idx][height_idx] = {leg_len, push_angle, ...} [[0.72, 15, 0.0], [0.75, 18, 0.0], ...], [[0.70, 20, 0.05], [0.73, 22, 0.05], ...], ... ] } def get_control_params(terrain, speed, height): # 双线性插值查找 speed_idx = find_closest_index(CONTROL_TABLE['speed_range'], speed) height_idx = find_closest_index(CONTROL_TABLE['height_range'], height) return interpolate_2d(CONTROL_TABLE['data'][terrain_idx], speed_idx, height_idx)这种方法的优势在于:
- 调试直观:工程师可直接修改表格数值,观察机器人行为变化,无需理解背后微分方程;
- 鲁棒性强:表格数据来自实机测试,天然包含硬件非线性(如电机饱和、齿轮间隙);
- 部署极简:嵌入式MCU只需存储几百KB表格,无需浮点运算单元。
书中附录7A提到,该方法在匹兹堡Leg实验室的四足机器人上,实现了在0-15°坡度、0-2m/s速度范围内98%的步态成功率,远超同期基于模型预测控制(MPC)的方案——因为MPC的模型再精确,也难以覆盖所有硬件老化、温度漂移、地面摩擦变异。
5. 什么时候用?什么时候别用?——一份来自1985年的工程血泪清单
5.1 适用场景:当你面对这些“不可妥协”的现实约束时
场景一:硬件资源极度受限的嵌入式系统
想象一台电池供电、主频仅20MHz的微型四足机器人,需要在山林间连续工作8小时。此时,任何需要实时求解非线性方程组的算法(如MPC、强化学习策略网络)都会因计算超时导致控制延迟,引发连锁倾倒。而Raibert的虚拟腿+表格控制组合,仅需查表+线性插值,单次计算耗时<50μs,完美匹配资源瓶颈。某高校学生团队曾复现该方案,在STM32F4芯片上实现0.8m/s稳定奔跑,而移植同等性能的MPC版本时,因浮点运算拖慢至120ms周期,机器人起步即翻。
场景二:环境先验知识匮乏的未知地形
军事侦察机器人突入陌生废墟,激光雷达被瓦砾遮挡,视觉系统因灰尘失效,仅剩足底开关和简易IMU。此时,依赖高精度地形重建的算法(如基于SLAM的步态规划)完全失效。而Raibert的单腿状态机,仅凭“足底是否接触”和“身体是否旋转”两个布尔信号,就能驱动机器人完成“试探-承重-推进”循环。书中第3章“三维空间跳跃实验”明确记录:在完全无视觉反馈、仅靠足底开关和陀螺仪的条件下,3D单腿机器人仍能维持圆形奔跑,证明其对感知缺失的极致鲁棒性。
场景三:需要快速原型验证的科研探索
某实验室想验证“弹性足部对越障能力的影响”,若从头构建完整动力学模型+设计控制器,需3个月。而采用Raibert的SLIP模型(单腿弹簧-质点),1周内即可搭建仿真,2天完成参数辨识(用砝码测弹簧刚度k,用高速摄像测腿长变化率),3次实机测试即获得结论。这种“模型-实验-迭代”的飞轮效应,正是Leg实验室能在1980年代快速产出系列成果的关键——算法不是终点,而是加速探索的杠杆。
5.2 慎用场景:当这些“现代便利”成为你的默认选项时
场景一:已有成熟高保真仿真平台
如果你手握NVIDIA Isaac Gym或PyBullet,能以1000Hz仿真真实电机响应、关节摩擦、地面弹性,那么直接套用Raibert的简化模型反而低效。现代仿真可承载更复杂的“腿-地交互模型”(如考虑土壤塑性变形、岩石尖锐度),此时应优先尝试基于优化的控制(如iLQR)或端到端学习(如PPO),让算法在仿真中自主发现超越人工设计的策略。Raibert方法的价值,在于它告诉你“哪些物理本质不可绕过”,而非提供终极解决方案。
场景二:任务需求远超动态平衡范畴
若你的机器人需在奔跑中精准抓取空中飞盘,或与人类协作搬运重物,此时平衡只是基础能力,上层还需运动规划、多体动力学耦合、人机意图理解等模块。强行将所有功能塞进Raibert框架(如用表格存储抓取参数),会导致表格维度爆炸(地形×速度×目标位置×目标姿态×……),维护成本远超收益。此时应采用分层架构:底层用Raibert式动态平衡保障移动安全,上层用ROS2/Mojo等框架集成高级功能。
场景三:追求极限性能的竞技场景
顶级波士顿动力Atlas机器人后空翻,其控制算法必然融合了Raibert的动态稳定思想,但绝不止于此。它需要:① 毫秒级全身力矩优化(Whole-Body MPC),协调28个关节力矩;② 基于深度强化学习的扰动恢复策略,在被推搡后0.3秒内重建平衡;③ 硬件在环(HIL)训练,用真实电机响应数据训练神经网络。Raibert方法在此类场景中,更多作为“安全边界守护者”——当学习策略输出危险指令时,底层Raibert控制器强制接管,防止硬件损毁。
5.3 我的实战教训:从“抄公式”到“悟物理”的三年爬坑路
2019年我第一次复现Raibert单腿跳跃,照着书中第2章公式推导,把腿长压缩量x算得无比精确,结果机器人在实验室地板上跳了3次就侧翻。折腾两周后,我做了个傻事:把机器人抬起来,用手模拟腿部弹簧,亲自感受“压缩-释放”的力反馈节奏。那一刻突然明白:公式里的x不是长度,而是“能量阀门开度”——压缩太快,弹簧来不及储能就反弹;压缩太慢,腾空时间不够。于是我把控制逻辑从“目标x=0.2m”改成“目标压缩速率dx/dt=0.5m/s”,配合足底开关触发的“触地即停”机制,机器人当晚就稳定跳跃超百次。
后来做四足项目,我迷信“虚拟腿必须严格等效”,花一个月调参让四腿合力完美匹配虚拟腿力矢量,结果在斜坡上频繁失稳。直到重读第4章附录4A,注意到那句被我忽略的话:“虚拟腿刚度k_virtual并非常数,而是随支撑腿数量动态调整”。原来,两腿支撑时k_virtual应设为单腿k的1.8倍(因力臂缩短),四腿支撑时则为2.5倍。把这个动态系数加进代码,斜坡稳定性直接提升40%。
从那以后我每次设计平衡算法,都强制走一遍“Raibert三问”:① 这个参数在物理世界对应什么可测量的量?(如x对应弹簧压缩毫米数,而非无量纲数值);② 这个计算在最坏传感器延迟下是否仍留有安全余量?(如预测触地时间预留0.15秒,而非理论0.1秒);③ 如果砍掉一半传感器,这个算法是否还能保住基础功能?(如仅靠足底开关+编码器能否维持原地弹跳?)
希望帮到你。
本文还有配套的精品资源,点击获取