UC Berkeley刘畅流博士:人机交互中的机器人行为设计

2017年底,机器之心介绍了加州大学伯克利分校人工智能研究所(BAIR)撰文介绍的旗下机械系统控制实验室(MSC)开发的安全机器人交互系统。该系统可以显著减少人机协作过程中问题的发生几率。近日,该研究的作者之一刘畅流对博客中介绍的相关技术发表了演讲,机器之心对此演讲内容进行了整理。

演讲内容整理:

很荣幸回到伯克利和大家分享我在机器人、控制、人机交互方面的研究,以及我们如何设计机器行为,来让它们在日常的工作居家和娱乐中更好地服务、协助人类,与我们合作。

人机交互(HRI)在许多具有巨大社会经济影响力的应用领域被认为是未来机器人的核心元素,比如制造业、交通、服务业和娱乐产业。

我首先关注的领域是制造业和交通运输业。

尽管今天的工厂自动化程度已经相当之高,一些精细的装配工作仍然广泛地由人工完成,而且有时成本十分高昂,比如在汽车工业的最终组装线和电子设备的组装线上。

将合作机器人带进这类工作环境对于帮助人类工人,将他们从单调且精神紧绷的任务中解放出来大有帮助。可以预见,未来的工厂的特点将会是大量的人机协作,尤其是在灵活的组装线中。

 

对于工厂,理想的情况是雇佣人机团队,利用彼此的长处(例如人类的智力与灵活性结合机器人的精确性,力量和可重复性)来创造一个成本节约型、资源有效型的制造业世界。

为实现这一愿景,安全问题需要受到极大关注。当然,机器人不该伤害人类。但也不能过于保守,比如像传统的安全措施那样,当人类靠近时放慢甚至停止动作。诚然,协作机器人需要与人密切交互。它们的行为应当对人类工人安全,但在完成各种需要高水平智力的工作中保持高效。

我致力于发展机器人行为设计的新方法。我们的工作同时实现了人机协作的安全性和高效性,这将在接下来详细说明的实验中演示。

另一方面,自动驾驶汽车的影响已被广泛讨论。发展自动驾驶的一个主要论据在于自动驾驶汽车或许会提高交通系统的安全程度,因为它们可以避免人类的错误。

 

但我们达到那样的程度了吗?事实上,很多情况下自动驾驶汽车都过于保守。你们中很多人都看过这个视频,这辆自动驾驶汽车甚至试图避让与它并没有冲突的车辆。

人类司机会怎样做?这是我在上海的一个中型路口拍摄的视频。没有左转弯信号灯,所以左转的车辆需要特别小心。然而从不同方向来的人类司机可以做到交替穿插,最大化交通效率,彼此之间只留有很小的间隔。

为使自动驾驶车辆的表现能够与老司机比肩,我们还有很长的路要走。但是,通过更好地对其行为进行设计,这是有可能实现的。

 

简言之,对于协作机器人和自动驾驶汽车来说,要求无非是让其安全有效地完成工作以及安全有效地行驶到目的地。在一个明确定义的确定的环境中,现今的工艺水平已经可以实现这些需求。但是与其它智能实体进行交互给系统带来了大量不确定性,这是让这些机器人实现需求所面临的主要挑战。

我试图处理的问题就是:在保证安全性的同时,如何设计机器人的行为,使其在动态不确定的环境中表现达到最佳。

在介绍技术细节之前,我们先从理论上深入了解下要处理的系统:

 

人机系统可以模式化为一个多主体的系统,其中所有的智能实体都被视作一个主体。图中我们采用一个工业协作机器人的视角,周围有几个人类工人。每个实体有其自己的动态(dynamic)。机器人通过行为系统感知环境中所有主体的状态并控制自己的动作。类似地,所有人类主体拥有五感来感知彼此,基于感受到的信息决定自己的动作。主体之间高度耦合,使得设计机器人的行为非常困难。具体而言,这个行为系统是一种从(传感器获取的)数据到(应用于物理设备的)行为的映射。这种行为通常取决于内在逻辑或策略或控制律,它们会基于对世界的认知模型来优化一个成本函数。考虑到不可预见的情景,机器人被赋予了学习能力来更新知识和逻辑。借用经济学的概念,我们称单个主体的行为系统为微观系统,多主体系统称为宏观系统,这能够描述人机协作或交通运输系统。

 

我的研究聚焦在单个机器人的微观行为设计以及在宏观多主体视角下对设计进行评估。这一方法已被应用于交通运输和制造业的各种用途。我们运用最优控制、优化理论、以及博弈论解决在方法论层面公式化的数学问题。本次演讲会涵盖微观行为设计方法和实现设计的最优化算法,还有它们在自动驾驶及工业机器臂方面的应用。

行为设计

首先,让我们考虑行为设计问题。

 

设计机器人行为有很多方法:经典控制方法、自适应控制、演示学习、强化学习、模仿学习,范围从自然导向到培养导向。

本次演讲涉及的系统对安全性的要求都非常严格。为了在人机交互过程中保障安全,而允许设计者对机器人行为拥有更多操控的同时,使机器人行为能够自我适应,我们讨论一种自适应最优控制或自适应MPC框架内的方法。在这里逻辑、学习模块和成本函数被明确设计,而世界模型则在交互中被习得。

 

因此机器人的内部成本要被设计为有约束优化。成本函数J针对任务表现和动作效率,这取决于机器人状态,输入和目标。机器人目标可能与人类状态相关。

例如,一个典型的成本函数可以被设计为对于目标的范数平方误差与控制输入的平方范数二者之和的积分。

第一类约束是物理系统的动态和可行性的限制。

比如,对于一辆自动驾驶汽车,由于其非完整动力学约束(nonholonomic dynamics constraint),它不能产生任意横向的加速度。 

最后的一项,也是最重要的一项约束——交互中的安全性约束。其中,x_h表示人类状态,R_s是关于人类状态的安全设定。

安全性约束一般定义为状态的集合以使人类和机器的最小距离大于某个阈值。

几何关系被简化为胶囊(capsule)表示。胶囊的半径是一个设计参数,人体易受伤害的部分(例如头部)会被设计拥有更大的半径范围。

由于人类的动态对于机器来说是未知的,安全性约束很难处理。甚至对当前人类状态的测量会有很多噪音干扰。这些不确定性会在长时间中累积,导致机器人的行为十分保守。

为了更好地说明这一挑战,考虑下面的例子:有一个封闭的环境,机器人试图躲开人类到达目的地。

 

在这个例子中,我们引入时间轴,为了更好地描述时空轨迹。

在第一个时间步长中,机器人预测人类的轨迹,且伴有一定的不确定性。人类的轨迹也会取决于机器人的轨迹。

然后机器人规划一条避开不确定锥形区域的轨迹。随着时间的推移,这条规划的轨迹被执行,人类的轨迹也被观测。轨迹和不确定度在时间—扩展空间(time-augmented space)以及2维空间中都有展示。

到了下一个时间步长,机器人重复这一过程,预测人类轨迹,规划自己的轨迹然后执行。

这一过程不断反复。

这就是传统的模型预测控制方法(MPC),它十分安全,但过于保守。机器人面对人类行为的不确定性非常恐慌,不敢继续靠近。

为什么会这样?

 

让我们回顾一下设计的目标和约束。

为了最优化地解决,问题应当放在长时间内来求解,否则系统很可能会陷入局部的最优。

但是,受到计算能力的限制,长期运动规划需要更长的计算时间,这意味着更大的积累误差。而为了安全,机器人的行动会非常保守,这与最优化目标矛盾。

解决这一悖论的一种方式是减轻约束,也就是加快计算并获得更好的人类行动模型来减少不确定程度。

然而,我观点是我们可以用将目标分解的方法来解决这一悖论。使用单一的规划非常难以平衡两个目标。那么为什么不能用两个不同的规划器分开处理不同的目标呢?

 

通过这样做,一个只对他人行为进行粗略估计的长期规划器可以用来实现最优化目标,而另一个考虑到所有不确定性的短期响应规划器可以用来实现安全性目标。

我把长期规划器称为效率控制器,把短期规划器称为安全控制器。他们可以以分级控制的形式实现组合。

用之前的例子来阐明这一想法。

对于长期的规划,机器人粗略地估计人类的轨迹并规划一个忽略预测的不确定度的路线。接下来这个路线会在安全控制器中作为参考。

在第一个时间步长中,机器预测人类行动并检查执行长期路线是否安全。如果安全,路线就被执行。在下一个时间步长中,一旦路线不再安全,短期规划者便通过绕道修改路线。

与此同时,效率控制器生成另一个长期规划覆盖掉之前的规划。安全控制器则监控新的参考轨迹。当能够安全执行时,机器就执行这一轨迹,最终达成目的。

这一模型并不保守。而且因为它有长期计划的模块,避免了多数短期或局部规划者可能存在的局部最优问题。此外,不确定性也得到了处理。

(效率控制器类似于人类行为中的慎重思考过程, 而安全控制器类似于不经过大脑的快速反应行为。)

 

当然,这两个规划者以不同的频率运行。计算中的时间流程如上图展示。首先,一个参考轨迹被发送到安全控制器进行监测。图中两条时间轴的上半部分展示了规划者的计划时间(Planning horizon)长短,下半部分显示了需要的计算时间(Computation time)。安全控制器中的计划时间并不必须是一个时间步长。

在安全控制器监测轨迹的时候,效率控制器在计算一个新的长期轨迹。计划时间范围在黄框中显示。因为计划时间变长,相应的计算时间要比安全控制器中的计算时间长。一旦计算出了新的轨迹,它将被发送到安全控制器被监视。然后效率控制器计算另一条轨迹,以此类推。

这一方法可以被视为双层的MPC,利用了长期和短期规划两者的优势。

这里提供一些实验数据:效率控制器一般以1hz的频率运行,而安全控制器一般以100hz到1khz的频率运行。

尽管如此,这个分级结构的稳定性非常关键。虽然在模拟和试验演示中是稳定的,但我们目前正在研究这一问题的数学证明。

同时,这种并行控制结构的成功实现高度取决于计算能力,也就是最优化算法能否在采样时间内找到安全可行的轨迹,尤其考虑到这一问题还是高度非线性且非凸的。

 

为了处理计算问题,我们通过凸化,在安全控制器和效率控制器的计算中开发了非凸最优化算法。

安全集合算法(Safe Set Algorithm)采用了不变集的概念,将非凸的状态空间的约束转换到凸输入空间的约束。通过可达性分析和类Lyapunov函数的应用,我们已经证明了轨迹永远不会超出安全集合,因此安全性得以保证。

凸可行集算法(Convex Feasible Set Algorithm)利用原始问题独特的几何特征,直接将非凸最优问题转化为一系列凸的子问题,这一点将会在后面详细讨论。

 

除了两个规划者之外,实际的系统要复杂的多。如图中所示包括3层,代表三种不同能力:看、想、做。

机器首先通过视觉获取环境信息。一个感知模块会对点云测量的系统状态进行估算。给定估算的当前状态,其它主体未来的轨迹将基于模型被预测。

模型通过线上和线下学习两种方式获得——线下学习确定了模型结构,线上学习通过调整模型参数来适应个体差异以及时变行为。

预测将被发送到用于计划的并行规划者。两个规划者优化了成本函数J,它们的计划时间长短和更新频率不同。

最后,给出考虑到机器动力学的规划路径后,一个低级别调节器会向物理设备生成控制命令。

设计评估

微观设计在制造业及交通运输领域的各种人机平台已被广泛地评估过。首先,我将展示工业机器人的一些结果。

 

为了在算法开发的初期保护受试对象,我们发展了不同种的评估平台,从虚拟现实模拟到人偶机器交互再到最终的人机交互。

在基于虚拟现实的模拟平台中,人类一方与一个虚拟机器人进行交互,通过虚拟现实显示屏观察机器的行动,人类的行动则靠摄像头捕捉。

在这种情境下,机器需要追踪由一个端点到另一个端点的红颜色参考轨迹。执行的轨迹显示为蓝色。当人类靠近时,机器人的行为就服从人类。当人类离开时,机器则试图前往目的地。

 

现在我们将硬件纳入其中。在人偶-机器人交互平台中,实体机器人与一个被远程操控的人偶进行交互。 在这个视频中,受赞助商的要求,我们遮住了里面的机器臂。

我们要求这个机器人将那个黑色的工件左右来回移动,同时人偶在该机器人的工作区中四处运动。这个人偶所带来的干扰是一种极端案例,在实际生产线上可能不会经常发生。但在视频演示中我们可以看到,我们设计的行为系统能让机器人在这样的极端情况中也能安全有效地完成任务。

 

在第三个平台中,环境更为动态,其中机器人的任务是将工件放入运动的目标盒子中,同时还要避开障碍物。

这个拾取与放置任务可以看作是人机协作组装的一种抽象形式。其中机器人可以给人类递送工具,人类的手接收工具,这里用绿色的目标盒子表示。另一只人手可以被看作是障碍物。

 

视频的左边部分给出了机器人通过 Kinect 感知的环境。黄色轨迹是计算得到的长期规划。机器人有时候会遵循这个轨迹,有时候则不会遵循,因为短期规划器会为实时安全性而修改这个轨迹。

需要指出,与 UR5 等其它协作机器臂不同,我们使用的是之前用在重型、重复性和确定性的生产线任务中的机器人。这是首次将它们用在这样的交互式和高随机性的任务中。

但在实验过程中,这个机器人的反应非常灵敏,并且很安全,甚至能补偿感知中的不确定性。这是因为其中采用了并行规划结构和快速在线优化求解器。

此外,与障碍物之间的间距和平均速度等机器人行为也可以通过调节该优化问题中的参数进行调整,也就是说可以重新设计知识模块中的内部成本函数。通过纳入用户反馈,可以使用强化学习自动和直观地执行这个调整过程。

 

然后我们再往前一步:真正的人类-机器人交互。

视频中是我的同事。我在幕后拿着一个紧急制动按钮,以防发生意料。

但实验非常顺利并且改变了大家对这些冰冷、笨重和危险的工业机器人的印象。现在它们对人类很友好,行动敏捷,反应灵敏,同时仍然有很高的生产效率。

 

我们在去年四月底的 Cal Day 上演示了这一成果,这是伯克利的一个开放日活动。我们的演示吸引了很多不同背景的人,尤其是孩子。他们喜欢和这个机器人玩,把目标盒子在桌子上动来动去。他们很高兴地发现这个机器人仍然能知道盒子在哪里并且能把工件放在正确的地方。

最后一张图还揭示了使用 AR 标签进行感知的技巧。

自动驾驶

同样的设计也可应用于自动驾驶汽车。

在这个项目中,我们与 Denso 进行了合作。

我们的设计使得自动驾驶的汽车既能够进行全局规划,又能够及时对紧急情况作出反应。

就像视频中演示的那样,及时避开急停的前车。 

我们的设计还能让自动驾驶汽车在低速移动的车流中安全地保持一个较大的参考速度。

优化问题

正如我们之前提到的那样,在线优化成本函数并不是一项简单任务,因为这个问题是高度非线性和非凸的。为了实现快速的在线运动规划,我们开发了全新的优化算法,能够利用该问题的几何特征。

 

这个最优控制问题构建在连续的时间中。为了利用数值算法,我们将连续轨迹进行了离散化处理,得到了离散轨迹。然后原有的连续时间最优控制问题就转化为了一般的非凸优化问题。

(在符号方面,我们现在使用 Γ 来表示在状态轨迹上的约束,Ω表示在输入轨迹上的约束,函数 G 表示非线性的动态过程。)

 

一般而言,可使用序列二次规划(SQP)方法求解非凸优化问题,即迭代式地求解一个二次子问题。这个二次子问题是通过拉格朗日的二次近似和所有约束的线性化获得的。

但是,SQP 方法难以实现实时性,因为这是一种通用方法,忽略了运动规划问题特有的几何结构。

 

这个优化问题有两个几何特征。第一个是控制输入(control input)中的对称性,因为成本函数通常的设计原则是为了惩罚控制输入的幅度而且控制输入的约束通常有对称的下限和上限。第二个特征是仿射动态(affine dynamics),也就是控制输入不会进入等式约束的非线性部分。

有了这样的理解,我们就能在一个简化的 3D 空间中阐述这个问题的几何性质了。其中水平的平面表示状态的轨迹所在的空间,垂直轴表示控制输入的轨迹所在的空间。

这个非线性等式约束定义了一个非线性流形。由于状态空间约束 Γ,这个流形被去除了几个洞。这些洞是Γ 的补集。

该流形中展示了成本函数的轮廓。尽管成本函数是凸的,但由于流形是非线性的,所以在该流形上的轮廓是非凸的。在非线性的流形上求解是很困难的。

因为这个问题是对称的和仿射的,所以我们能不能在这个流形之上的体积中求解呢?不同于流形,这个新搜索空间的结构是线性的,且该体积中的成本是凸的。

而且还有一个好处,由于成本函数的对称性,假设水平面是 u=0 的平面,如果我们沿 u 轴的负方向移动,成本就会下降。因此这个体积中的最优解总是位于该体积的底部;也就是说:如果我们在该体积中运行优化算法(比如梯度下降),那么优化机制就会自动将解拉到底部,自动满足这里的非线性等式约束。

为了进一步加快计算速度,通过将域限制到非凸域中的凸可行集上,这个问题可以被转换成一个凸优化问题。

当然,为了降低由凸化引入的误差,就需要迭代。

 

 

现在,我们用下面这个简化的问题来说明松弛后的问题的迭代过程,其中决策变量被简化到了只有 x。成本函数是凸的,而域是非凸的。

对于参考轨迹,我们在非凸域中计算一个凸可行集并在该凸可行集求解这个优化问题。如果解不收敛,我们就重复这个过程。否则我们就输出这个解。

我们用下面的例子说明这个想法,其中高维轨迹空间进一步简化成了一个 2D 空间。图中给出了成本函数和障碍的轮廓。给定一个参考点,可计算出凸可行集,如该参考点附近的红色多边形所示。如果参考轨迹本身是可行的,那么这个凸可行集就包含了这个轨迹。如果这个参考点不可行,也可以计算得到凸可行集,但参考轨迹不会在该集合内。

在迭代中,我们可以将凸可行集中的最优解设为新的参考并重复这一过程,寻找另一个凸可行集和求解新的凸优化。最后我们会到达最优解。

由于每个点对应一个轨迹,所以在笛卡尔空间中,这个迭代过程是这样的:首先有一个参考轨迹(在这里是一个不可行的参考),然后这个轨迹会被扰动,并最终能在少数几次迭代中收敛到黑色的最优轨迹。

我们已经证明这个算法能保证收敛性和最优性。

 

CFS(凸可行集)算法求解轨迹优化的方法与其它一些研究成果有相似之处。

比如由不同作者提出的凸通道(convex corridor)或凸管道(convex tube)思想,他们试图沿轨迹为每个点找到一个泡(bubble),然后扰动这些泡所形成的通道或管道之中的轨迹。

如果我们在时间增强的轨迹空间中表示一个线性系统的凸可行集,那也会是一个管道。

但是,关键的差异在于:在我们的方法中,参考轨迹可以是不可行的。

同时,这个凸管道是最大的,也就是说投射在每个时间步骤上的凸可行集是黎曼度量中最大的凸集。

我们已经提供了在收敛性和最优性上的理论保证;而其它研究只是启发式地使用了这项技术。

最后,CFS 算法是一种非凸的优化求解器,可应用于满足其几何特征的任何问题。

 

CFS 与 SQP 在下列案例上进行了比较,其中机器人需要按顺序到达方形区域的四个角,同时避开障碍物。

路径 1、2、5 没有碰撞。因此这两种方法之间没什么太大的不同。路径 3 和 4 是不可行的。SQP 消耗的时间远远长于 CFS。

人们可能会说 SQP 本来就很慢。CFS 算法相对于其它更高效的非凸优化求解器有优势吗?

 

然后我们将 CFS 与 ITP 进行了比较,ITP 是已知的最高效的非凸优化算法。

在这张图中可以看到。横轴是在轨迹上采样的点的数量,代表了问题的维度。纵轴是计算时间。

当问题的规模很小时,ITP 和我们的方法的表现接近。但是,随着问题维度增大,ITP 的计算时间会快速暴增,而我们的方法的计算时间只会线性增长。

这是针对 2D 车辆的情况。 机器臂的计算时间会大大延长,因为问题难度更大。

 

为了更好地说明CFS的优势,这里给出了迭代过程中的轨迹。CFS 收敛很快,而且轨迹已经是平滑且可行的了。使用 ITP 方法则需要很多次迭代才能让轨迹可行以及使轨迹平滑。

 

总之,CFS 算法的高效性在于我们通过宽松化和凸化而明确地利用了问题的特有几何结构。这样造成的一个结果是该算法的步长是无约束的,因此迭代的次数会大大降低。另一个结果是我们无需在 CFS 中进行线搜索(line search),因此每次迭代的计算时间也会降低。

最重要的是,当我们直接在可行集中进行搜索时,其解在收敛之前就能达到足够好。“足够好”意味着可行和安全。因此我们在收敛之前就可以安全地终止迭代,然后执行次优的轨迹。

 

有了实时的优化,人类与机器人之间的交互可以更加顺滑。比如,在乘客-车辆交互中,一旦乘客指定了一个停车位,车辆就可以马上找到一个轨迹到达目的地。这在未来的自动代客泊车上有很大的应用潜力。

多智能体交互

这就是微观行为设计。使用这样的设计有一个重要的问题:该智能体在多智能体系统中的表现如何?

看看这个四路交叉口的多车辆交互。这四辆自动汽车同时到达了这个交叉口。谁应该先走是不确定的。

然后其中一辆车决定向前走一点以测试其它车辆的反应。如果其它车辆选择退让,那么它就通过这个路口;否则就停车。如果所有车辆都采用同样的策略,那么它们就会同步地向前推进,它们就可能会被困在“前进-停车-前进-停车”的循环中,并最终陷入困境。

如果你熟悉博弈论,这就是典型的懦夫博弈(Chicken game)。这个博弈系统中存在多个纳什均衡(即多种通过该交叉口的次序),但这些车辆不知道采纳哪一个;如果这些智能体之间没有共识,那么就无法通过单纯的微观设计来解决这个问题。

因为这是一个大规模组合优化问题,所以也不可能让每辆车都求解一个多车辆导航问题以便达成共识。

我们的做法是设计一种特殊的冲突解决机制,能够实时地在本地解决冲突图(conflict graph)。通过在之前设计的逻辑上增加冲突解决模块,每辆车上的局部解都会为该组合优化问题提供一个全局解,即使这里的拓扑结构是时变的也可以。

不同于其它采用固定通过顺序的冲突解决机制,我们方法中的本地决策会根据实时状况而改变,从而最大化实时交通效率。

 

这个方法也可以扩展到多车道问题上。研究证明,这种完全分布式的方法在整个时间段内都是动态可行的和稳定的。

未来,我会在应用、方法和工具这三个层面上开展我的研究。具体包括:

· 深入到交通运输和制造生产的实际应用中,其中包括自动驾驶、车联网、智慧交通、人机协作、机器人-机器人协作、智慧工厂。

· 将现有设计应用到新问题上,并为新出现的问题开发新的设计方法。

· 在机器人行为的设计上泛化和标准化该方法——寻找适用于各种情况的通用结构以及特定领域的参数;另外还要开发可在各种人机或多机器人系统中评估和比较不同设计的系统性方法。

· 为我们的核心理论和工具开发更高效的优化算法来加快计算速度。

· 针对现有博弈论在分析次优智能体和时变系统拓扑上的低效性,在各种细节层次上发展用于理解带有交互式组件的一般系统的新理论。

人类-机器人系统涵盖范围很广,从人类有最终决策权的系统到机器人有最终决策权的系统。本演讲所涉及的只是其中一小部分人类和机器人具有同等决策权的系统。

我有兴趣将该设计应用到其它类型的人类-机器人系统中,以及探索新的设计以促进各种场景中的交互,比如人类操作员与远程操控机器人之间的交互、人类教师与机器人学习者之间的交互、驾驶员和驾驶辅助系统之间的交互、人类和主动式辅助设备之间的交互、机器人护士与病人之间的交互、乘客与全自动汽车之间的交互。

我们怎样才能设计出能为我们正确做事而不会失控的机器人?我们如何通过创造这些智能实体来更好地理解我们自己?这些都是有待解决和解答的问题。机遇与挑战并存。我想在这样的研究上贡献自己的心力,以创造一个和谐融洽的人类-机器人社会。

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值