人形机器人(humanoid robot)是人类的化身,它可以在运动学上穿越崎岖的地形、进入狭窄的通道和狭小的空间,可以移动物体、到达高处,以及完成临时爆炸装置响应(improvised explosive device,IED) 等许多其它任务。本文我们讨论的是 NASA 的 Valkyrie 人形机器人,图 1 是 IEEE Spectrum 实地访问 NASA 的约翰逊航天中心(Johnson Space Center,JSC)所拍摄到的最新的 Valkyrie。
图 1. Valkyrie. Photo: Evan Ackerman/IEEE Spectrum[1]
JSC 成立于 1961 年,JSC 的科学和工程活动一直围绕着 NASA 的载人航天计划。即使在今天,太空飞行仍然是一项极其危险的尝试。因此,近年来 JSC 致力于设计和开发能够与人类进行交互的人形机器人,这种机器人与在太空中工作的人类具有同样的力量和速度。这个机器人将作为宇航员的助手在宇航员附近工作 [12]。
上世纪 90 年代中期,当这个研究项目被构想出来时,人类与机器人一起工作还只是一个刚刚开始在学术实验室探索的新概念。为了证明机器人使用人类工具的有效性,人们构建了一个名为 DART 的双臂试验台。到 1999 年,在美国国防部高级研究计划局 (Defense Advanced Research Projects Agency,DARPA) 的帮助下,「灵巧机器人实验室」(Dexterous Robotics Laboratory,DRL) 建造了它的第一个上肢类人系统——Robonaut 1 (R1)。从这开始,DRL 逐渐成为一个世界著名的机器人实验室,设计和装备了十多个独特的机器人平台。我们最为熟知的要数 Robonaut2(R2)。R2 拥有人类的躯干、头部和臂部,目前正在国际空间站执行被人类熟知的带有高危险度「太空行走」活动,即舱外活动 (EVA) 时可以使用相关工具及工具操作系统等。R2 在太空中的微重力环境下有很多优点,但却不适合在地球上走动。
Robonaut 2 (R2) 是一个诞生于通用汽车 (GM) 和 NASA 之间非常成功的公私合作开发的机器人。R2 全身共包含 42 个自由度(degrees of freedom,DOF)。其中,每只手臂 7 个自由度,颈部 3 个自由度,每只手 12 个自由度,腰部 1 个自由度(见图 2(a))。最近,R2 接受了「攀登腿」形式的移动升级,这将使它能够在国际空间站内活动并扩展其操作能力,这也是 2012 年之前最早期的 Valkyrie 的版本(见图 2(b))。
图 2. R2 图示 [12]
Valkyrie 并不是为太空设计的机器人,而是一个为地球上的灾难场景设计的机器人。关于 Valkyrie 的设计目的,该项目负责人是这样介绍的:
「NASA 的空间探索目标是到达火星,为了到达火星,NASA 很可能会先于人类探险家派出机器人。当人类到达时,这些机器人就能够和人类一起工作。Valkyrie 将会被用于探索火星的项目中」[1]; 「NASA 致力于现在和未来的人形机器人的操作和能力创新,特别是与太空探索任务相关的任务执行。NASA 对人形机器人的兴趣来源于它们潜在的能够高效操作设备的能力,以及它们作为宇航员助手有效运作的能力。NASA 对在极端太空环境中使用人形机器人的兴趣,也与类似机器人在救灾等地面应用中的潜在用途相重叠。」[2]
Valkyrie 远不止是一个有着双腿的 R2 的更新版本。R2 已经开始探索有监督的自主性,而 Valkyrie 则能够在更严格的延迟和带宽限制下完成任务,这意味着它更加智能,拥有大量的嵌入式智能。Valkyrie 是一个全新的机器人,拥有全新的技术、全新的独特的外观。Valkyrie 具有行走、平衡和操纵能力,关于 Valkyrie 的研究集中在发展复杂的行为,从而提高双足人形机器人的自主性。那么,Valkyrie 究竟与 R2 有什么区别呢?
一、Valkyrie 与 R2 的区别
Valkyrie 全身共包含 44 个自由度。其中手臂拥有七个自由度,手腕和手都能完成动作,每个手有三个手指和一个拇指,因此它的手部有六个自由度。它有一个可以倾斜和旋转的三个自由度的头部,一个可以旋转的三个自由度的腰部(躯干),六个自由度的腿,配备有六个轴力扭矩传感器的脚。手臂、躯干和腿部都有串联弹性制动器 (series elastic actuators,SEA)。这些制动器能够实现扭矩控制,带宽高达 70Hz,其中,颈部是由位置控制的,肌腱驱动的手指则是由电流控制的。除了 SEA 中的绝对位置编码器、增量编码器和弹簧偏转传感器,机器人在骨盆和躯干位置使用微应变惯性测量单元 (inertial measurement unit,IMU) 传感器,在每只脚的脚底使用一个 ATI 力扭矩 (F / T) 用于估计压力中心(center-of-pressure,COP),以及用于激光雷达和立体数据的多传感器。
与 NASA 之前的机器人不同,Valkyrie 采用电池供电,无需系电缆即可运行。背包里的可移动电池可以支撑一个小时,更换电池只需要几分钟时间。此外,Valkyrie 的四肢也可以移除,更换手臂只需几分钟,因为左臂和右臂的构造是完全一样的,甚至可以直接将左臂换成右臂。Valkyrie 配备了数量惊人的传感器:摄像头和激光雷达在头部,更多的摄像头和声纳在腹部,还有更多的摄像头在前臂、膝盖和脚上。传感器采集到的数据并不会同时传送给 Valkyrie 的操作员,而是根据当前任务判断哪个传感器的数据最为重要,将最重要的数据尽快传送给操作员,这有助于 Valkyrie 快速、高效的远程完成自主工作。
R2 和 Valkyrie 都选择了分散控制方案,但直到 Valkyrie 项目才产生了分散控制方案所要求的「完美转矩源」。R2 采用比例导数控制回路,获得良好的转矩跟踪结果。然而,它并不能调节每个执行器中监测到的扰动。研究人员在改进 Valkyrie 的嵌入式控制性能方面做了大量的工作,改进了串联弹性驱动 (Series elastic actuation,SEA) 技术。扰动观测器 (Disturbance observers,DOBs) 在面对可变惯性载荷等扰动时,能够显著增强 SEA 的力矩跟踪能力。
R2 中使用了一个定制开发的马达控制板,叫做「超级驾驶员(Superdriver)」。它由现场可编程门阵列 (FPGA) 组成,其中嵌入了与三相逆变器耦合的 PowerPC 处理器。这种在单板上的组合允许它操作电机换向和电流控制、联合数据和命令的序列化和反序列化以及传感器处理。这个设计后来被改进为 R2 移动升级的攀登腿。在此基础上,引入涡轮喷气发动机(Turbordriver)将超级驱动器的功能重新包装成两个独立的印刷电路板,包含高压驱动电路和一个逻辑板来处理传感器、嵌入式控制算法和与中央控制计算机的通信,以及一个 FPGA 来处理电机换相。然后将两块板堆叠在一起,减少了整体的占地面积,并允许每块板适应特定的项目需求。在 Valkyrie 项目中,仍然使用涡轮发动机的模块化设计,动力板经过重新设计,包括一个强制空气冷却的电桥,能够提供超过 30A 连续和 60A 的短时间高扭矩。虽然 R2 的爬升腿的所有关节都专门使用了涡轮驱动器,但 Valkyrie 在大多数主要关节上使用了涡轮驱动器,而在更小的关节 (如手腕、手和脖子) 上使用的是其他定制板。
设计 R2 的航空电子结构是为了减少相互连接,特别是那些跨越自由度的连接,由此创造了 Robonet。Robonet 是一个高速、双线、多点数据网络,遵循主从通信协议。Robonet 将超级或涡轮发动机连接到主节点的通道。其中,一个通道专门用于一个肢体的两线导体。主节点通过 PCI (R2) 和 PCI express (Valkyrie) 连接到主控计算机并在 FPGA 上实现。数据通过 PCI 总线调用 (R2),或者使用直接内存访问(direct memory access,DMA) 和专用共享内存区域从主机 PC 传输到 Valkyrie 的用户空间。Robonet 协议类似内部集成电路(Inter-integrated Circuit,I2C)协议。升级到 Valkyrie 之后,每个内存地址都可以以 1khz 的速度更新,每个通道可以达到 4MB/s。
二、Valkyrie 中的算法和技术
当我们了解了这些区别,就让我们一起再来看看,Valkyrie 中究竟应用了哪些算法和技术。
1、行走和操作
Valkyrie 使用一个二次规划(Quadratic Program, QP)作为基于动量的全身控制算法 [13]。QP 最早被应用于 Boston Dynamics 的 Atlas 机器人的步行算法,其主要目的是:机器人迈出一步以后,基于动量的全身控制算法计算出下一步可用的立足点。QP 的输入是期望的运动动作、可接受的外力、任务空间的加速度,通过跟踪一个期望的质心动量变化率并最小化关节加速度和接触力,实现目标函数优化。QP 算法的目标函数为:
其中 A 为质心动量矩阵(centroidal momentum matrix,CMM),Wg 为重力扳手,W_gr,i 为由于身体和环境的接触而施加在机器人身体上的地面反作用力扳手,W_ext,i 为施加在机器人身上的其它外力。QP 的输出 v 是一个用于计算所需的执行器扭矩的关节加速度矢量和接触扳手。QP 输出后续被用于使用逆动力学算法计算所需的关节力矩。使用 QP 优化全身控制算法,能够在支撑面有限的情况下寻找到机器人稳健的落脚点,从而大大提升了机器人的平衡性。
Atlas 控制行走和平衡是通过瞬时捕获点(Instantaneous Capture Point,ICP)实现的,而 Valkyrie 则是通过捕获点(Capture Point, CP)实现的 [14]。ICP 用于计算 QP 的期望动量率,而基于 CP 的行走控制具有监控轨迹安全执行和暂停潜在不安全行走轨迹的稳定性特性。此外,Valkyrie 还提供了各种高级接口,如任务空间和联合空间的样条轨迹生成、规划工具箱、控制模式改变等,以帮助指挥机器人。
2、感知和导航
Valkyrie 操作员通过放置一个路点来发送移动命令,以明确 Valkyrie 的期望目的地。为了满足临时爆炸装置响应 IED 任务的要求,Valkyrie 需要在不平坦的地形中穿过,例如碎片场、楼梯和岩石壁架等无法使用轮子或架设轨道的地形,需要仔细选择落脚点,以使得人形机器人可以在这些地形中移动。因此 Valkyrie 中利用了一个地形分割(Terrain Segmentation)算法来分割 点云所代表的不同区域:
一、地形分割
首先,算法通过聚合指定时间周期内的 LIDAR 点云数据得到地形数据。然后,分割环境中可遍历的平面区域 [3,11]。地形分割算法包括三个主要步骤,分别为 1)曲面法向估计与滤波;2)平面区域分割;3)多边形形状拟合与排序。具体介绍如下:
1)曲面法向估计与滤波
首先,应用 Voxel grid 体素网格下采样滤波器限定在点云中采样的密度上限。滤波器的输出是一个无组织的点云,其中每个点是输入点云中体素网格每个单元的点的质心。地面(Ground)定义为点云中最低的可见表面,使用高度坐标的第 5 个百分位数进行估计。接下来,使用一种稳健的方法进行曲面法向估计,该方法使用 RANSAC 平面拟合来恢复保留锐角特征的估计。最后,根据曲面法线,过滤这些点以使其仅保持在α水平度范围内。较陡的区域被认为是足迹不可达到的位置,因此可以被过滤掉。图 3 给出了使用有向箭头标注的由两种不同的估计算法(最小二乘法和 RANSAC 平面拟合法)计算的曲面法线图示,其中绿色块表示地面的真实地形几何图 [3]。左图为使用最小二乘法平面拟合法选定邻域内的所有点来估计曲面法线,其结果生成了圆角。右图则为使用 RANSAC 建模的结果,该方法的拟合结果能够保留锐角特征的估计。
图 3. 曲面法线图
2)平面区域分割
平面区域由点云邻域定义,其中点位置和曲面法向估计都在距平面的误差距离内,并共同定义平面。确定平面是一个迭代过程,平面估计随着相邻点添加到集合中而更新
其中 Ri 为平面区域,每个点 p_n 当满足在垂直于平面估计 Pi 的距离小于ε_d 时,添加到集合中。平面区域分割函数返回一个标签映射,该标签映射将输入点云中的点指定给它们各自的平面区域 id。图 4 为地形平面区域分割的实验结果。其中,左图为绘制平面多边形的凸包,主要用于在移除地面并按法线过滤后计算的区域分段,该图中仅保留坡度小于 25 度的区域。右图为进行区域增长处理后的结果,该图无需执行过滤操作,能够生成垂直墙和其他区域的分段。
图 4. 地形平面区域分割的实验结果
3)多边形形状拟合与排序
利用前面分割步骤得到的区域映射来计算三个空间中的平面多边形形状。形状将被处理为凸区域,以便输入到足迹规划器。对于每个区域,点是相对于区域的局部平面估计的坐标系写入的。通过将第三个分量归零,可以将这些点转换为一组二维点。利用卡尺算法计算投影点的二维凸包,用它来拟合最小面积边界矩形。最后,连接凸面外壳和边界矩形弧将其转换回三维表示以进行可视化。使用机器人的站姿框架作为参考框架来定义矩形形状的标准方向。姿态帧是每个脚帧的平均位置和方向,其中 X 轴向前,Z 轴向上。
二、启发式搜索导航
完成平面区域分割后,基于机器人的当前姿态和航路点,使用 A规划寻找到达目的地的脚步序列 [4]。令 s=(x,y,θ),其中θ表示偏航参数。A是一种有限图的搜索算法,通常用于已知 2D 栅格地图中的路径规划。该算法在启发式函数 h 的指导下,通过最优搜索从一个起始状态 s_start 到目标状态 s_target,其中 h(s,s』) 生成从状态 s 到状态 s』的代价函数估计。启发式算法对环境中的实际代价了解得越多,则扩展状态的数目越少,因此 A搜索的效率就越高。
在基于 A的基础上,引入 D算法作为一种计算最优路径的增量式启发式搜索方法。使用 D基于增量进行最优路径搜索,要比从头开始重复规划新路径效率高出几个数量级。D的搜索方向为从目标状态 s_goal 到初始状态 s_start 的反序,通过递归选择提取最优路径 s'如下:
其中 g(s) 为访问各个状态的代价函数,c(s,s』) 表示从状态 s 转移到 s』的代价。每次递归选择时,并不更新全部状态的 g(s),而仅对相关状态进行处理。在处理队列和扩展状态时,D通过连接 s_start 和 s_goal 的状态更新最佳路径的估计成本。使用启发式 h 来估计从每个状态到 s_start 的成本。同样,在每条边的代价改变后更新最优路径的代价。
为了解决在 A+D图搜索时的冲突问题,使用可伸缩的 3D 边界框来模拟机器人,并在边界框和被分割的平面区域之间进行冲突检查。路点导航规划的输出是一个无冲突的脚步序列。
3、高级目标执行
使用 Affordance Theory(AT)定义机器人的编码策略,通过一系列在这些对象帧中定义的末端效应路点轨迹和姿态位置来操作对象 [5]。
首先我们来讨论什么是承担性(Affordance)。承担性最早由 Gibson 提出,所谓承担性理论(Affordance Theory)是一种描述赋予环境功能价值的认知结构的手段,即自然环境中所的物质,本身物理属性的组合能与生物之间存在某种对应关系。他认为物件的所有承担特质是可以被直觉到的,其讯息是直接表现于视觉中的。而大多数的物件拥有一种以上的用途,人们将物件用于何种行为,取决于人们的心理状态。例如,如果感知环境的某一区域提供了「坐」的水平平面,可以让机器人坐在上面。其中机器人可以通过学习,把之前识别的区域和「坐」的 affordance 联系起来。
图 5. AT 图.(a)显示了自动测试系统的一般结构;(b)显示模板缩放方法
图 5 给出一个 AT 的模板结构示例。AT 是一个有向非循环图,每一个路点序列代表一组末端效应器配置,遵循这些配置可实现 AT 的预期任务。如果要将特定模板应用于 Valkyrie 的双手动系统,则该模板中的航路点被分配一个末端效应器 ID「0」或「1」,前者映射到机器人的左手,后者映射到其右手。抓握姿势将类似地映射到常见的配置,如「手闭」或「手开」。如图 6(a) 中,每个路点标记为 wp_<ee_id>:<seq_id>,其中<ee_id>为末端执行器 ID,<seq_id>为末端执行器的路点序列 ID。
操作员使用 AT 将对象的参数化表示注册/对齐到点云数据,使机器人能够在对象上执行操纵轨迹。此外,使用状态机对操作的公共序列和决策过程进行编码。结合 AT 和状态机,操作员只需向机器人发送高级命令,就可以实现所需的操作目标 [6]。
框架方面,Valkyrie 使用 TRACLabs 开发的一个名为 CRAFTSMAN(基于笛卡尔的可视性操作模板套件) 的软件套件,进行任务和物体操作以及工具使用的运动规划。CRAFTSMAN 的整体框架如图 6,其中 Affordace Templates 层为上文分析过的 AT。
图 6. CRAFTSMAN 系统结构
给定一个笛卡尔末端执行器目标、目标公差设置和任务遵从性 (或调节) 要求,TRAC IK 层为一个更高水平的笛卡尔运动规划器提供了反向运动学(Inverse Kinematics, IK)解决方案。Cartesian Motion Planner 层作为输入端执行器的目标位姿,以及这些位姿上的公差、次要目标,迭代调用 TRAC IK 以提供一个有保证的笛卡尔运动工作空间。
Robot Interaction Tools 层的主要目的是弥补 Cartesian Motion Planner 层和应用层之间的差距。Robot Interaction Tools 层允许应用程序指定笛卡尔目标和需求——通过远程操作员 (通过 RViz3D 交互环境) 或通过可视性模板层(AT)实现——并在机器人硬件上执行产生的计划。CRAFTSMAN 还提供了一个交互式控制面板,允许远程操作者指定某些参数,关于交互式控件节点的演示可见 https://youtu.be/COpq03PHdi8。
4、自动对象注册
由于对齐 AT 对操作员来说可能很耗时,因此创建了一个对象注册方案来自动将已知对象网格模型与激光雷达点云数据进行匹配 [7]。Valkyrie 使用 ICP(Iterative Corre-spondingPoint) 算法进行数据匹配。ICP 是以几何和颜色为基础的三维模型对齐的主要方法。ICP 从两个网格和它们的相对刚体变换的初始猜测开始,通过在网格上重复生成对应点对并最小化误差度量来迭代细化变换。可以通过各种方法来完成初始对准匹配,例如跟踪扫描器位置、表面特征的标识和索引、「自旋图像」表面签名、扫描的主轴、穷举搜索对应点或用户输入等。
在对其匹配的过程中,将最小化误差表示为一个非最小二乘优化问题,并输入到 Ceres solver 中(Ceres:http://ceres-solver.org/)。这种方法的优点是使用了拟牛顿梯度下降法(Quasi-Newton Gradient Descent Approach),可以更好地避免局部极小值。
5、任务空间控制和存储姿态
对上述空间规划的结果进一步附加任务空间控制,当移动或操纵计划器发生故障时,此功能尤其必要。对于 Valkyrie 的手,使用了一个快速的在线 IK 解决方案来预览用户指定的末端执行器的姿态 [8]。当给定机器人的配置时,IK 为机器人的末端执行器提供一组达到所需笛卡尔姿势的关节值。IK 的求解有解析求解法和数值求解法两种。其中,解析求解法不适用实际应用以及需要更改机器人配置的场景;数值求解法依赖于局部逆雅可比的频繁运行时间近似,从而生成接近所需笛卡尔解的联合解,数值 IK 方法使用牛顿法或类似方法迭代,具有更好的适用性。目前,应用于机器人的最常用的数值 IK 实现是 Orocos 运动学和动力学库(Kinematics and Dynamics Library,KDL)中的关节极限约束伪逆 Jacobian 算子(KDL: http://www.orocos.org/wiki/orocos/kdl-wiki/.)。
给定种子 q_seed(通常为当前关节值),可以使用正向运动学 (Forward Kinematics) 计算:1)种子的笛卡尔姿势,2)种子姿势和目标姿势之间的笛卡尔误差向量 p_err,3)定义笛卡尔空间中相对于当前关节值的偏导数的雅可比 J。逆 Jacobian(J.^-1) 定义了关节空间相对于笛卡尔空间的偏导数。通过迭代函数求解 IK 解
其中,使用正向动力学 q_next 计算 p_err。当 p_err 中全部值满足终止规则,当前得到的向量 q 为 IK 结果。在真实场景中直接求解上式,仍存在很多问题,可以通过重新实现 KDL 算子来解决,从而提供更可用的 API 和更健壮的计算行为。
对于 Valkyrie 的脚,可以预览和执行一系列用户指定的脚踏着陆配置。骨盆位置和躯干方向的滑块也可以进一步利用全身配置。最后,用户还可以为常见的配置加载存储的姿态。
三、Valkyrie 的任务完成情况
最后,让我们看看 Valkyrie 的任务完成情况吧。基于上面介绍的算法和技术,我们重点来看 Valkyrie 能够完成的临时爆炸装置响应(IED)的任务。图 7 给出的是主要运动任务的拼贴图。最上面一排的子图 (a) 显示了操作人员的视图,其中包含了凹凸不平的地形任务和窄间隙任务的叠加平面区域和规划的步道。通过使用上面介绍的方法,Valkyrie 能够在探测到的平面区域捕捉到想要的脚步,避免不安全的脚踏板,如坑洞等,并规划通过狭窄通道的路径。中间和底部的 (b) 和 (c) 子图分别显示了横过不均匀地形和穿越窄间隙的快照序列。
图 7. 主要运动任务的拼贴图
图 8 给出 IED 响应操作任务的拼贴图,包括 (a) 开门,(b) 开门,(c) 取包,(d) 总安全壳(Total Containment Vessel, TCV)置袋,(e) TCV 托盘推送,(f) TCV 按钮推送序列。
图 8. IED 响应操作任务的拼贴图
展望未来,人形机器人将成为拆弹社区的宝贵资源。目前开展的关于 Valkyrie 机器人的可行性研究奠定了一个有效的性能基准 [9]。关于机器人坠落的稳健性和恢复仍然是最终现场部署的一个重大挑战,这一点可能会危及整个任务的成功。针对时间紧迫的任务,仍需要增加操作人员的吞吐量和附加的板载自主性。现有的研究成果和已经报道的关于 Valkyrie 的能力为人形机器人在 IED 应用中的持续进步提供了坚实的基础。
分析师介绍:仵冀颖,工学博士,毕业于北京交通大学,曾分别于香港中文大学和香港科技大学担任助理研究员和研究助理,现从事电子政务领域信息化新技术研究工作。主要研究方向为模式识别、计算机视觉,爱好科研,希望能保持学习、不断进步。
本文参考引用的文献如下:[1] Evan Ackerman (https://spectrum.ieee.org/author/ackerman-evan-), NASA JSC Unveils Valkyrie DRC Robot, https://spectrum.ieee.org/automaton/robotics/military-robots/nasa-jsc-unveils-valkyrie-drc-robot.[2] Evan Ackerman, NASA Wants Help Training Valkyrie Robots to Go to Mars, https://spectrum.ieee.org/automaton/robotics/humanoids/nasa-wants-help-training-valkyrie-robot-to-go-to-mars.[3]J. P. Marion,「Perception methods for continuous humanoid locomotion over uneven terrain,」Master』s thesis, Massachusetts Institute ofTechnology, 2016.[4] J. Garimort, A. Hornung, and M. Bennewitz,「Humanoid navigation with dynamic footstep plans,」in2011 IEEE International Conferenceon Robotics and Automation. IEEE, 2011, pp. 3982–3987.[18] [5]S. Hart, P. Dinh, and K. Hambuchen,「The affordance template ROS package for robot task programming,」in 2015 IEEE international conference on robotics and automation (ICRA). IEEE, 2015, pp.6227–6234.[6] P. Beeson, S. Hart, and S. Gee,「Cartesian motion planning & task programming with craftsman,」in Robotics: Science and Systems Workshop on Task and Motion Planning, 2016.[7] S. Rusinkiewicz and M. Levoy,「Efficient variants of the icp algorithm.」in 3dim, vol. 1, 2001, pp. 145–152.[8] P. Beeson and B. Ames,「Tracik: An open-source library for improved solving of generic inverse kinematics,」in 2015 IEEE-RAS 15th International Conference on Humanoid Robots (Humanoids). IEEE, 2015, pp. 928–935.[9] Steven Jens Jorgensen, Michael W. Lanighan, Sylvain S. Bertrand, et al. Deploying the NASA Valkyrie Humanoid for IED Response: An Initial Approach and Evaluation Summary https://arxiv.org/pdf/1910.00761.pdf.[10] Russ Tedrake. Drake: A planning, control, and analysis toolbox for nonlinear dynamical systems, 2014.[11] Robin Deits and Russ Tedrake. Footstep planning on uneven terrain with mixed integer convex optimization. In IEEE/RSJ Int. Conf. on Humanoid Robots, Madrid, Spain, 2014.[12] Yamokoski, John, and Nicolaus Radford. "Robonaut, Valkyrie, and NASA Robots." Humanoid Robotics: A Reference (2019): 201-214.[13] T. Koolen, S. Bertrand, G. Thomas, T. De Boer, T. Wu, J. Smith, J. Englsberger, and J. Pratt,「Design of a momentum-based control framework and application to the humanoid robot atlas,」International Journal of Humanoid Robotics, vol. 13, no. 01, p. 1650007, 2016.[14] T. Koolen, T. De Boer, J. Rebula, A. Goswami, and J. Pratt,「Capturability-based analysis and control of legged locomotion, part 1: Theory and application to three simple gait models,」The International Journal of Robotics Research, vol. 31, no. 9, pp. 1094–1113, 2012.