MATLAB实现六自由度机械臂运动控制与轨迹规划

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文档提供了在MATLAB环境下,利用Robotics Toolbox工具箱实现六自由度机械臂运动控制和轨迹规划的源代码。代码涵盖了机器人的建模、运动学和动力学分析、控制策略实施以及轨迹生成等方面。该机械臂具有三个旋转轴和三个平移轴,能够模拟复杂工作场景中的动作。开发者可以深入理解并应用这些源代码,以在机器人的建模、仿真和控制方面取得实践经验。 MATLAB六自由度机器人工作空间源代码

1. MATLAB和Robotics Toolbox基础应用

在当今高度数字化和自动化的世界中,机器人技术的快速发展要求工程师和研究人员具备强大的计算和模拟工具。MATLAB作为一个广泛使用的数学计算平台,特别适合于机器人学的学习和研究。它提供了Robotics Toolbox,一个强大的工具箱,用于机器人分析、建模、仿真和控制。本章节将从基础应用入手,逐步引导读者了解如何在MATLAB环境下使用Robotics Toolbox,为后续章节中构建复杂的六自由度机械臂模型和进行深入的仿真分析打下坚实的基础。

我们将从如何安装和配置MATLAB和Robotics Toolbox开始,确保读者能够顺利设置工作环境。之后,我们将通过简明扼要的示例引导读者完成基本的机器人建模,演示如何在MATLAB中创建简单的机械臂模型,并利用Robotics Toolbox提供的函数进行运动学分析。最终,本章将为读者展示如何通过编程实现机械臂的基本动作,并进行可视化展示。

通过本章的学习,读者将掌握: - MATLAB和Robotics Toolbox的基本安装和配置 - 机器人模型的基本创建和运动学分析 - 机械臂动作的编程实现和可视化展示

在第二章中,我们将深入探讨六自由度机械臂的建模与仿真,运用本章的基础知识来构建更加复杂的机器人模型。

2. 六自由度机械臂建模与仿真

2.1 机械臂模型的基本概念

2.1.1 自由度的理解与应用

在机器人领域,自由度(Degrees of Freedom,简称DOF)是描述机械臂运动能力的关键参数,它指的是一种机构能够独立运动的方式的数量。在三维空间中,一个物体有六个自由度:三个平移自由度(X、Y、Z轴方向的移动)和三个旋转自由度(绕X、Y、Z轴的转动)。机械臂的设计通常根据其任务需求来确定所需的自由度数量。

一个六自由度机械臂可以模拟人类手臂的动作,具有足够的自由度来达到任意位置和姿态,这使得它在工业自动化、机器人手术和空间探索等领域有着广泛应用。理解自由度对于机械臂的建模至关重要,因为它们直接影响到运动学和动力学方程的复杂性。

2.1.2 机械臂运动学模型基础

机械臂运动学是研究机械臂在没有考虑力和质量情况下的运动规律。运动学模型可以分为正运动学和逆运动学两部分:

  • 正运动学 :根据给定的关节角度(或关节变量),计算机械臂末端执行器(例如夹爪或工具)的位置和姿态。正运动学方程通常是直接的,但在高自由度机械臂中,这些方程可能相当复杂。
  • 逆运动学 :逆运动学的目的是找到一组关节角度,以使末端执行器达到目标位置和姿态。这是一个更为复杂的问题,特别是对于六自由度机械臂而言,可能存在多个解,或者在某些情况下没有解。

2.2 MATLAB中机械臂的建模方法

2.2.1 Robotics Toolbox的基本使用

Robotics Toolbox为MATLAB提供了一套方便的函数和数据结构,用于机器人建模和仿真。以下是使用Robotics Toolbox建立机械臂模型的基本步骤:

  1. 定义连杆的DH参数。
  2. 使用 SerialLink 函数创建机械臂对象。
  3. 使用 fkine ikine 函数进行正逆运动学的计算。
  4. 利用 plot 函数进行机械臂的图形化展示。

这个工具箱为用户提供了直观的接口,从而能够更专注于机械臂的建模和控制问题,而不是底层的算法细节。

% 假设已经定义了机械臂的DH参数
% 创建一个6轴机械臂模型
L(1) = Link('d', 0.1, 'a', 0, 'alpha', pi/2);
L(2) = Link('d', 0, 'a', 0.5, 'alpha', 0);
L(6) = Link('d', 0.1, 'a', 0, 'alpha', -pi/2);
robot = SerialLink(L, 'name', '六自由度机械臂');
2.2.2 利用Robotics Toolbox创建六自由度机械臂模型

创建机械臂模型后,可以进一步进行操作,例如计算正运动学和逆运动学:

% 正运动学计算
q = [pi/4, pi/4, pi/4, pi/4, pi/4, pi/4]; % 假定的关节角度
T = robot.fkine(q);

% 逆运动学计算
P = transl(0.5, 0.2, 0.3); % 目标位置
Q = robot.ikine(P); % 计算对应的关节角度

2.3 机械臂的仿真环境搭建

2.3.1 建立仿真环境的步骤与方法

为了验证机械臂模型和控制算法的有效性,需要建立一个完整的仿真环境。以下是建立仿真环境的步骤:

  1. 设计机械臂的物理结构和布局。
  2. 利用Robotics Toolbox或MATLAB自带的仿真环境设置机械臂模型。
  3. 添加控制算法到仿真环境中,如PID控制、力控制等。
  4. 设定仿真参数,如时间步长、仿真时长等。
  5. 运行仿真并观察机械臂的行为是否符合预期。
2.3.2 模型参数的校验与调整

仿真环境搭建好之后,接下来是校验和调整模型参数,以确保模型的行为与实际机械臂相符。这通常包括:

  1. 检查关节限制是否符合实际机械臂的物理限制。
  2. 校验运动学和动力学参数,确保它们反映了实际机械臂的质量和惯性。
  3. 通过实际运动数据进行参数辨识,调整模型以匹配真实世界的响应。

此过程可能涉及多次仿真迭代,每个迭代都需要调整参数并观察结果,直到仿真输出与实际机械臂的运动和行为足够接近。

上述内容详尽地介绍了在MATLAB环境下进行六自由度机械臂建模与仿真的基础应用,以及如何利用Robotics Toolbox实现机械臂模型的创建、参数校验和仿真环境的搭建。通过这些工具和方法,研究人员和工程师可以有效地模拟和测试机械臂在真实世界中的性能和行为。

3. 运动学正逆问题求解

在第三章中,我们将深入探讨机械臂运动学的核心问题——正逆运动学的理论基础与在MATLAB环境下的实现过程。本章节对于理解机械臂的精确控制至关重要,涉及到机械臂的数学模型构建以及算法编程的实操技巧。

3.1 运动学正问题的理论与实现

运动学正问题涉及到给定机械臂关节角度,计算末端执行器的位置和姿态。这是机械臂控制的基础,也是实现路径规划和轨迹控制的前提条件。

3.1.1 正运动学方程的建立与求解

正运动学是将机械臂的关节变量(如角度和位移)转换为末端执行器的位置和姿态的过程。对于一个六自由度的机械臂,正运动学方程通常涉及到连杆参数的DH参数表(Denavit-Hartenberg参数表),其中包括每个关节和连杆的长度、扭转角、偏移量等。这些参数是构建机械臂运动学模型的关键。

在MATLAB环境中,我们可以利用Robotics Toolbox提供的函数,例如 SerialLink 类,来构建机械臂模型并计算正运动学。示例如下:

% 定义机械臂DH参数
L(1) = Link([0 0 0.2 -pi/2 0 0 0]);
L(2) = Link([0 0.2 0 pi/2 0 0 0]);
L(3) = Link([0.2 0 0 -pi/2 0 0 0]);
L(4) = Link([0 0.1 0.2 0 0 0 0]);
L(5) = Link([0 0 0 0 0 0 0]);
L(6) = Link([0 0 0.1 -pi/2 0 0 0]);

% 创建机械臂模型
robot = SerialLink(L, 'name', 'MyRobot');

% 定义一组关节角度
q = [pi/6, pi/3, pi/2, 0, pi/4, 0];

% 计算正运动学
T = robot.fkine(q);

在上述代码中, Link 函数用于创建连杆对象,每个 Link 对象包含7个参数,分别代表连杆的关节类型、偏移量、扭转角等。 SerialLink 类则用于创建机械臂模型,它可以将多个连杆组合起来。 fkine 函数用于计算正运动学。

3.1.2 MATLAB代码实现与验证

正运动学的MATLAB实现基于Robotics Toolbox提供的高级接口,简化了复杂的数学运算。代码执行后, T 变量包含了末端执行器的位置和姿态信息。为了验证我们的正运动学模型和代码实现,我们可以使用机器人仿真软件(如V-REP、Gazebo)来可视化机械臂的状态,并与MATLAB计算结果进行对比。

3.2 运动学逆问题的理论与实现

运动学逆问题是指给定机械臂末端执行器的位置和姿态,求解能够达到该状态的关节角度。这一问题相较于正运动学更加复杂和关键,因为许多运动学逆解往往存在多个,需要考虑解的存在性、唯一性和可达性问题。

3.2.1 逆运动学方程的建立与求解

在MATLAB环境下,我们仍然可以使用Robotics Toolbox中的函数来求解逆运动学。通常,逆运动学问题并没有封闭形式的解析解,因此需要采用数值解法。Robotics Toolbox提供了 ikine 函数,可以用于求解逆运动学问题。下面是一个逆运动学求解的示例:

% 定义期望的末端执行器位置和姿态
T_des = transl(0.5, 0.5, 0.2) * trotx(pi/4) * troty(pi/4);

% 求解逆运动学
q_sol = robot.ikine(T_des, 'mask', [1 1 1 0 0 0], 'q0', q0);

% 逆运动学求解通常需要一个初始猜测解,'q0'参数用于指定初始关节角度。

在上述代码中, transl trotx troty 函数用于生成期望的末端执行器的位置和姿态矩阵, ikine 函数用于求解逆运动学问题。

3.2.2 MATLAB代码实现与验证

逆运动学的实现同样依赖于Robotics Toolbox。代码执行后, q_sol 变量包含了能够使得末端执行器达到期望位置和姿态的一个或多个关节角度解。验证过程同正运动学类似,也需要通过仿真软件来对比不同关节角度下的机械臂状态与计算值。

在此基础上,我们还可以讨论如何优化和调整逆运动学解,以适应不同的工作场景,例如避免奇异性问题或者关节角度限制等。

在下一章节中,我们将深入探讨机器人动力学模型的构建和在MATLAB环境中的实现。这将为机械臂的精确控制和优化提供基础。

4. 机器人动力学模型构建

动力学模型是机器人控制系统设计中的关键组成部分,它描述了机器人在受到外力和力矩作用时如何运动。正确建立动力学模型,可以帮助我们理解机器人的运动行为,设计出更有效的控制策略。本章节将深入探讨动力学模型构建的基础理论和方法,并展示如何利用MATLAB及其Robotics Toolbox进行动力学模型的构建和仿真。

4.1 机器人动力学的基本理论

动力学研究的是力与运动之间的关系。在机器人领域,动力学模型通常是指一组描述机器人各个关节如何受到力或力矩作用后运动状态改变的微分方程。

4.1.1 动力学方程的推导

动力学方程的推导通常基于牛顿第二定律或拉格朗日方法。牛顿第二定律适用于直接计算质点或质点系受到的力与加速度之间的关系。而拉格朗日方法则从能量的角度出发,通过动能和势能的变化来推导出动力学方程,适合处理复杂的多自由度系统。

动力学方程一般形式为: [ M(q)\ddot{q} + C(q, \dot{q})\dot{q} + g(q) = \tau + J^T(q)\lambda ]

其中,( q ) 是关节角度向量,( M(q) ) 是惯性矩阵,( C(q, \dot{q}) ) 是包含了科里奥利力和离心力项的向量,( g(q) ) 是重力项,( \tau ) 是关节驱动器产生的力矩,( J^T(q)\lambda ) 是与外部约束力相关的项。

4.1.2 动力学模型的重要性

动力学模型在机器人控制系统中占据核心地位。它不仅用于仿真的准确性和控制算法的设计,而且在优化算法以及机器人结构设计中也有着重要的应用。通过动力学模型,我们可以预测机器人的动态响应,分析稳定性,设计轨迹规划和控制策略。

4.2 MATLAB中动力学模型的实现

MATLAB提供了丰富的工具箱和函数来支持动力学模型的构建和仿真。其中Robotics Toolbox是机器人领域内广泛使用的一个工具箱,它提供了多种函数来帮助我们建立和分析机械臂的动力学模型。

4.2.1 使用Robotics Toolbox构建动力学模型

Robotics Toolbox提供了 SerialLink 类来表示串联机械臂,其中包括了 fkine , ikine , jacobian , mass , coriolis 等方法来处理正运动学、逆运动学、雅可比矩阵、质量矩阵以及科里奥利力和离心力等计算。我们可以利用这些方法来构建动力学模型:

% 假设已经定义了机械臂的DH参数
L = Link('d', 0.1, 'a', 0, 'alpha', pi/2);
robot = SerialLink(L, 'name', 'MyRobot');

% 初始化机械臂的关节角度
q = [0, 0, 0, 0, 0, 0];

% 计算动力学相关参数
M = robot.mass(q);
C = robot.coriolis(q, [0, 0, 0, 0, 0, 0]);
g = robot.gravload(q);

4.2.2 模型仿真与参数优化

使用动力学模型进行仿真可以验证模型的准确性,并对控制策略进行验证。在MATLAB中,我们可以使用内置的仿真函数,如 ode45 ,来对动力学方程进行数值积分,模拟实际的运动情况:

% 定义动力学微分方程
function dtheta = dynamics(t, theta)
    q = theta(1:end-1);
    qd = theta(end);
    tau = robot.jointTorque(q, qd);
    Minv = inv(robot.mass(q));
    ddtheta = Minv * (tau - robot.coriolis(q, qd) - robot.gravload(q));
    dtheta = [qd; ddtheta];
end

% 仿真设置
tspan = [0, 5];
initial_conditions = [q; zeros(size(q))];
[t, y] = ode45(@dynamics, tspan, initial_conditions);

% 绘制关节角度随时间的变化
figure;
plot(t, y(:, 1:size(q)));
xlabel('Time (s)');
ylabel('Joint Angles (rad)');
title('Joint Angles Over Time');

通过这种方式,我们可以直观地观察到关节角度的变化,并对模型参数进行优化,以提高仿真与真实情况的匹配度。这一步骤对于机器人的实际应用至关重要,因为它直接关系到控制算法的有效性和安全性。

动力学模型的构建和仿真不仅需要精确的数学模型和计算,还需要对实际物理现象有深入的理解。通过MATLAB和Robotics Toolbox,工程师可以有效地构建模型,并进行复杂的动力学分析和仿真。这为机器人的设计、控制策略的开发和性能优化提供了有力的工具。

5. 控制算法实现

5.1 控制算法的基本原理

5.1.1 PID控制原理与应用

比例-积分-微分(PID)控制器是工业领域应用最为广泛的控制算法之一。它通过计算偏差值(设定值和实际输出值之间的差值)的三个不同组成部分的线性组合来实现控制目标。

  • 比例(P) :与当前的偏差值直接成正比,能够实现快速响应。
  • 积分(I) :与偏差值的历史累积有关,主要用于消除稳态误差。
  • 微分(D) :与偏差变化率成正比,能够对控制过程进行预测,减少超调,增强系统的稳定性。

在MATLAB中,PID控制算法的实现可以通过PID控制器工具箱来完成,也可以通过自定义代码来构建PID控制器。一个典型的PID控制器的传递函数可以表示为:

[ C(s) = K_p + \frac{K_i}{s} + K_d s ]

其中,( K_p )是比例增益,( K_i )是积分增益,( K_d )是微分增益。

5.1.2 状态反馈与观测器设计

状态反馈控制是一种现代控制理论中的技术,它不仅考虑了系统输出的反馈,还考虑了系统内部状态变量的反馈。通过状态反馈,可以设计出满足特定性能指标(如快速响应、稳定性等)的控制器。

观测器,又称为状态估计器,是一种能够根据系统的输入和输出来估计系统内部状态的设备。在无法直接测量系统状态的情况下,观测器显得尤为重要。

在MATLAB中,利用 acker 函数或 place 函数,可以计算出满足特定极点配置的状态反馈矩阵。对于观测器的设计, acker place 函数同样可以用来确定观测器的极点,然后利用这些极点来计算观测器增益矩阵。

5.2 MATLAB控制算法的编程实现

5.2.1 控制算法MATLAB代码实现

假设我们有一个简单的线性系统,我们希望设计一个PID控制器来实现对该系统的控制。以下是一个MATLAB示例代码,用于实现PID控制器并进行仿真。

% 定义系统模型(例如,单输入单输出(SISO)线性系统)
sys = tf(1, [1, 3, 2]);

% 设定PID控制器的参数
Kp = 1.5; Ki = 1; Kd = 0.5;

% 创建PID控制器对象
controller = pid(Kp, Ki, Kd);

% 串联控制器与系统模型
closedLoopSys = feedback(controller * sys, 1);

% 进行单位阶跃响应仿真
step(closedLoopSys);

% 分析性能指标,比如上升时间、稳态误差等

上述代码中,我们首先定义了一个传递函数模型 sys 来表示我们的系统。然后,我们设置了PID控制器的增益参数,并使用 pid 函数创建了一个PID控制器对象。之后,我们将这个控制器与系统模型串联起来,形成了一个闭环系统。最后,我们使用 step 函数来模拟单位阶跃响应,并通过观察输出来分析系统性能。

5.2.2 算法性能测试与结果分析

性能测试是验证控制算法是否满足设计要求的关键步骤。在MATLAB中,我们可以使用多种函数来分析控制系统的性能指标。

在上面的代码中,我们使用了 step 函数来得到系统的阶跃响应。通过分析这个响应,我们可以得到如上升时间、稳态误差、超调量等性能指标。为了进一步的性能分析,我们还可以使用 bode 函数来获得系统的频率响应,或使用 nyquist 函数来绘制系统的奈奎斯特图。

% 使用Bode图分析系统频率响应
bode(sys);

% 使用Nyquist图分析系统稳定性
nyquist(sys);

通过这些工具,我们可以对系统的稳定性、带宽、相位裕度等特性有一个全面的了解。根据分析结果,如果性能指标不符合要求,我们可以回到控制器设计阶段进行参数调整。

请注意,以上代码与分析方法仅适用于线性系统。对于非线性系统或复杂动力学模型,需要采用更高级的控制策略和分析工具。在MATLAB中,还可以使用Simulink进行更复杂的系统建模和仿真。

6. 机械臂轨迹规划

6.1 轨迹规划的基本概念

6.1.1 轨迹规划的分类与要求

轨迹规划是机器人控制中的重要环节,它涉及到机器人从一个位置移动到另一个位置的路径和时间。轨迹规划通常分为两类:路径规划和时间最优规划。路径规划关注的是机械臂从起点到终点的路径形状,而时间最优规划则关注的是以最快的方式完成路径。

6.1.2 路径规划与时间最优规划

路径规划需要保证路径的平滑性和可行性,避免碰撞和运动学限制。时间最优规划则进一步优化运动时间,减少能耗,并确保加速度和速度约束得到满足。

6.2 MATLAB中轨迹规划的策略实现

6.2.1 利用MATLAB进行路径规划

在MATLAB中进行路径规划时,我们可以利用Robotics Toolbox中的函数来实现。以下是一个简单的路径规划示例:

% 假设机械臂当前处于初始位置
q0 = [0, 0, 0, 0, 0, 0]; % 初始关节角度
qf = [pi/2, pi/2, 0, 0, 0, 0]; % 最终关节角度

% 使用trapTraj函数创建平滑的路径
[q, qd, qdd] = trapTraj(q0, qf, 100); % 100个点

% 绘制关节空间的轨迹
figure;
plot(q);
xlabel('Time (t)');
ylabel('Joint angles');
title('Joint Space Trajectory');

6.2.2 时间最优轨迹规划的MATLAB实现

时间最优轨迹规划需要使用优化算法来计算最快路径。这通常涉及到解决一个复杂的约束优化问题。MATLAB提供了一个叫做 fmincon 的函数,可以用来求解这种问题。

% 定义优化目标函数,即找到最小化总时间的路径
% 此处仅提供了一个目标函数的框架,具体实现需要根据问题详细定义
function t = objectiveFunction(x)
    % x是决策变量向量,可能包括位置、速度、加速度等
    % t是最小化的时间
    % 这里需要根据实际情况来编写代码,计算给定路径的时间
    % ...
end

% 初始参数
x0 = ...; % 猜测的初始解
A = ...; % 约束矩阵
b = ...; % 约束向量

% 调用fmincon函数进行优化
options = optimoptions('fmincon', 'Algorithm', 'interior-point');
[t_min, x_min] = fmincon(@objectiveFunction, x0, A, b, [], [], [], [], [], options);

% 输出最小化时间
disp(['Minimum time to complete the path: ', num2str(t_min)]);

在上述代码中, x 是需要优化的决策变量,可能包括关节角度、速度、加速度等。目标函数需要根据具体的路径和机械臂动态模型来编写。 A b 是约束矩阵和约束向量,它们用于定义机械臂运动的限制条件,如关节角度、速度和加速度的限制。通过优化,我们可以找到满足所有约束条件下的最小时间路径。

轨迹规划是一个复杂的主题,涉及到机器人运动学、动力学以及优化理论。在MATLAB中,我们可以利用其强大的数值计算和可视化功能,来设计和测试不同的规划策略。通过上述示例代码,我们可以开始构建和优化自己的机械臂轨迹规划算法。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文档提供了在MATLAB环境下,利用Robotics Toolbox工具箱实现六自由度机械臂运动控制和轨迹规划的源代码。代码涵盖了机器人的建模、运动学和动力学分析、控制策略实施以及轨迹生成等方面。该机械臂具有三个旋转轴和三个平移轴,能够模拟复杂工作场景中的动作。开发者可以深入理解并应用这些源代码,以在机器人的建模、仿真和控制方面取得实践经验。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

### 机械轨迹规划算法实现 机械轨迹规划涉及多个方面,主要包括路径定义、插值方法选择以及逆向运动学求解。以下是关于机械轨迹规划的具体实现方式: #### 1. 路径定义 在进行轨迹规划之前,需明确机械末端执行器的目标位置和姿态。通常情况下,路径可以通过设定起始点和终止点来表示。对于复杂的任务,还可以引入中间点以构成更精细的路径[^2]。 #### 2. 插值方法 为了使机械沿预定路径移动更加平稳,常采用插值技术生成连续的轨迹。常用的插值方法有线性插值(Linear Interpolation)、多项式插值(Polynomial Interpolation)以及样条插值(Spline Interpolation)。其中三次样条插值因其良好的光滑性和计算效率而被广泛应用于工业领域[^1]。 ```python import numpy as np from scipy.interpolate import CubicSpline def cubic_spline_interpolation(x, y): cs = CubicSpline(x, y) return cs(np.linspace(min(x), max(x), num=100)) ``` 上述代码展示了如何使用Python中的`scipy`库完成三次样条插值操作。这里假设已知一组离散数据点`(x,y)`,函数返回经过这些点的一条平滑曲线上的新采样点集合。 #### 3. 逆向运动学求解 确定了期望的末端执行器位姿之后,下一步就是通过逆向运动学计算各个关节的角度变化规律。此过程可能具有解析解或者仅存在数值近似解。当无法获得闭合形式表达式时,则可借助迭代优化手段寻找满意的结果[^3]。 ```matlab function qd = inv_kinematics(T_desired, robot_model) % T_DESIRED is the desired transformation matrix of end-effector. % ROBOT_MODEL contains parameters describing kinematic structure. options = optimset('Display', 'off'); [qd,fval] = fsolve(@(q) forward_kinematics(q,robot_model)-T_desired,... rand(1,size(robot_model.DH_parameters,1)), options); end ``` 以上MATLAB脚本片段提供了一个简单的框架用于解决非线性的方程组问题——即找到能使前向动力学到达指定变换矩阵的最佳估计值qd[]^T[^4]^。 #### 结果评估验证 最后一步是对整个流程的效果加以检验。这不仅限于观察模拟环境下动作是否流畅自然;更重要的是确认其能否满足实际应用场景下的精度需求及时延限制等因素的影响程度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值