首页 文章 精选 留言 我的

精选列表

搜索[文件分享],共10000篇文章
优秀的个人博客,低调大师

技术分享 | ROS与Gazebo的通信机制

做机器人算法的相信大家对ROS和Gazebo都不陌生,可以说是我们的两大利器,ROS全称机器人操作系统,它为我们提供了软件操作平台,我们可以方便的在ROS的软件框架下编写我们自己的机器人算法。gazebo是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。 那么下面我们一起来认识一下gazebo和ros到底是怎么搭配一起工作的?Gazebo和ros他们的功能完全不一样,内部的消息机制以及驱动也相去甚远,那么它们之间是怎么通信的呢? 这是官方给出的框架图 从图上我们可以看到,当ros的消息传递过来的时候,它并没有给gazebo,而是给了Controller Manager中的一个controller,经过controller中的控制器计算出来相应的值之后,数据流入了JointCommand接口中,然后由这个接口转交给gazebo模块;当gazebo计算数据完成之后,数据也是先流入一个叫做JointState的接口中,随后又流入了一个controller中,这个controller再将消息发布出去。 这个模块就是我们今天要介绍的主角ros_control功能包,它重写ros原有的pr2_mechanism包,使得它能够控制所有机器人,而并不仅止于PR2。下图是ros_control的工作流程,可以看到它将机器人执行器关节状态数据和期望状态作为输入。它使用一般的控制回路反馈机制(通常是PID控制器),来控制输出(通常为力矩)。 ros_control的架构 Controller 控制器:读取硬件资源接口中的状态,发布控制指令。不直接接触硬件,从硬件抽象层请求资源; Controller Manager 控制器管理器:管理不同控制器的通用接口; RobotHW 机器人硬件抽象:直接和硬件资源交互,通过 write 和 read 方法完成硬件操作。管理硬件资源,处理硬件冲突; RobotHW 机器人硬件抽象:直接和硬件资源交互,通过 write 和 read 方法完成硬件操作。管理硬件资源,处理硬件冲突; 下面我们主要了解一下Controller 控制器和Controller Manager 控制器管理器。 控制器 Controller ros_control提供的controller的种类如下: 控制器管理器 Controller Manager 用于管理多个控制器,实现控制器的加载、运行、停止等操作。 1、命令行操作 rosrun controller_manager controller_manager <command> <controller_name> <command> 包括: load unload start stop spawn: load & start kill: stop & unload 查看某个控制器状态 rosrun controller_manager controller_manager <command> <command> 包括: list list-types reload-libraries reload-libraries –restore 2、launch <launch> <node pkg="controller_manager" type="spawner" args="controller_name1 controller_name2" /> </launch> 3、可视化工具 rosrun rqt_controller_manager rqt_controller_manager 以上就是gazebo和ros的通讯机制,希望小编有帮助到您更清晰的了解gazebo和ros。如果想深入了解某个部分可以查看 ros官网:http://wiki.ros.org/ros_control End - 技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

优秀的个人博客,低调大师

技术分享丨集成学习之Bagging思想

我们在生活中做出的许多决定都是基于其他人的意见,而通常情况下由一群人做出的决策比由该群体中的任何一个成员做出的决策会产生更好的结果,这被称为群体的智慧。集成学习(Ensemble Learning)类似于这种思想,集成学习结合了来自多个模型的预测,旨在比集成该学习器的任何成员表现得更好,从而提升预测性能(模型的准确率),预测性能也是许多分类和回归问题的最重要的关注点。 集成学习(Ensemble Learning)是将若干个弱分类器(也可以是回归器)组合从而产生一个新的分类器。(弱分类器是指分类准确率略好于随机猜想的分类器,即error rate < 0.5)。 集成机器学习涉及结合来自多个熟练模型的预测,该算法的成功在于保证弱分类器的多样性。而且集成不稳定的算法也能够得到一个比较明显的性能提升。集成学习是一种思想。当预测建模项目的最佳性能是最重要的结果时,集成学习方法很受欢迎,通常是首选技术。 为什么要使用集成学习 (1) 性能更好:与任何单个模型的贡献相比,集成可以做出更好的预测并获得更好的性能; (2) 鲁棒性更强:集成减少了预测和模型性能的传播或分散,平滑了模型的预期性能。 (3) 更加合理的边界:弱分类器间存在一定差异性,导致分类的边界不同。多个弱分类器合并后,就可以得到更加合理的边界,减少整体的错误率,实现更好的效果; (4) 适应不同样本体量:对于样本的过大或者过小,可分别进行划分和有放回的操作产生不同的样本子集,再使用样本子集训练不同的分类器,最后进行合并; (5) 易于融合:对于多个异构特征数据集,很难进行融合,可以对每个数据集进行建模,再进行模型融合。 机器学习建模的偏差和方差 机器学习模型产生的错误通常用两个属性来描述:偏差和方差。 偏差是衡量模型可以捕获输入和输出之间的映射函数的接近程度。它捕获了模型的刚性:模型对输入和输出之间映射的函数形式的假设强度。 模型的方差是模型在拟合不同训练数据时的性能变化量。它捕获数据的细节对模型的影响。 理想情况下,我们更喜欢低偏差和低方差的模型,事实上,这也是针对给定的预测建模问题应用机器学习的目标。模型性能的偏差和方差是相关的,减少偏差通常可以通过增加方差来轻松实现。相反,通过增加偏差可以很容易地减少方差。 与单个预测模型相比,集成用在预测建模问题上实现更好的预测性能。实现这一点的方式可以理解为模型通过添加偏差来减少预测误差的方差分量(即权衡偏差-方差的情况下)。 集成学习之Bagging思想 Bagging又称自举汇聚法(Bootstrap Aggregating),涉及在同一数据集的不同样本上拟合许多学习器并对预测进行平均,通过改变训练数据来寻找多样化的集成成员。 Bagging思想就是在原始数据集上通过有放回的抽样,重新选择出N个新数据集来分别训练N个分类器的集成技术。模型训练数据中允许存在重复数据。 使用Bagging方法训练出来的模型在预测新样本分类的时候,会使用多数投票或者取平均值的策略来统计最终的分类结果。 基于Bagging的弱学习器(分类器/回归器)可以是基本的算法模型,如Linear、Ridge、Lasso、Logistic、Softmax、ID3、C4.5、CART、SVM、KNN、Naive Bayes等。 随机森林 (Random Forest) 随机森林算法原理 随机森林是在Bagging策略的基础上进行修改后的一种算法,方法如下: (1) 使用Bootstrap策略从样本集中进行数据采样; (2) 从所有特征中随机选择K个特征,构建正常决策树; (3) 重复1,2多次,构建多棵决策树; (4) 集成多棵决策树,形成随机森林,通过投票表决或取平均值对数据进行决策。 随机森林OOB Error 在随机森林中可以发现Bootstrap采样每次约有1/3的样本不会出现在Bootstrap所采样的样本集合中,当然也没有参加决策树的建立,而这部分数据称之为袋外数据OOB(out of bag),它可以用于取代测试集误差估计方法。 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类,因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小为X/O。 优点:这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。 缺点:当数据量较小时,Bootstrap采样产生的数据集改变了初始数据集的分布,这会引入估计偏差。 随机森林算法变种 RF算法在实际应用中具有比较好的特性,应用也比较广泛,主要应用在:分类、归回、特征转换、异常点检测等。以下为常见的RF变种算法: ·Extra Trees (ET) ·Totally Random Trees Embedding (TRTE) ·Isolation Forest (IForest) Extra Trees (ET) Extra-Trees(Extremely randomized trees,极端随机树)是由Pierre Geurts等人于2006年提出。是RF的一个变种,原理基本和RF一样。但该算法与随机森林有两点主要的区别: (1) 随机森林会使用Bootstrap进行随机采样,作为子决策树的训练集,应用的是Bagging模型;而ET使用所有的训练样本对每棵子树进行训练,也就是ET的每个子决策树采用原始样本训练; (2) 随机森林在选择划分特征点的时候会和传统决策树一样(基于信息增益、信息增益率、基尼系数、均方差等),而ET是完全随机的选择划分特征来划分决策树。 对于某棵决策树,由于它的最佳划分特征是随机选择的,因此它的预测结果往往是不准确的,但是多棵决策树组合在一起,就可以达到很好的预测效果。 当ET构建完成,我们也可以应用全部训练样本得到该ET的误差。因为尽管构建决策树和预测应用的都是同一个训练样本集,但由于最佳划分属性是随机选择的,所以我们仍然会得到完全不同的预测结果,用该预测结果就可以与样本的真实响应值比较,从而得到预测误差。如果与随机森林相类比的话,在ET中,全部训练样本都是OOB样本,所以计算ET的预测误差,也就是计算这个OOB误差。 由于Extra Trees是随机选择特征值的划分点,会导致决策树的规模一般大于RF所生成的决策树。也就是说Extra Trees模型的方差相对于RF进一步减少。在某些情况下,ET具有比随机森林更强的泛化能力。 Totally Random Trees Embedding (TRTE) TRTE是一种非监督学习的数据转化方式。它将低维的数据映射到高维,从而让映射到高维的数据更好的应用于分类回归模型。 TRTE算法的转换过程类似RF算法的方法,建立T个决策树来拟合数据。当决策树构建完成后,数据集里的每个数据在T个决策子树中叶子节点的位置就定下来了,将位置信息转换为向量就完成了特征转换操作。 例如,有3棵决策树,每棵决策树有5个叶子节点,某个数据特征x划分到第一个决策树的第3个叶子节点,第二个决策树的第1个叶子节点,第三个决策树的第5个叶子节点。则x映射后的特征编码为(0,0,1,0,0 1,0,0,0,0 0,0,0,0,1),有15维的高维特征。特征映射到高维之后,就可以进一步进行监督学习。 Isolation Forest (IForest) IForest是一种异常点检测算法,使用类似RF的方式来检测异常点;IForest算法和RF算法的区别在于: (1) 在随机采样的过程中,一般只需要少量数据即可; (2) 在进行决策树构建过程中,IForest算法会随机选择一个划分特征,并对划分特征随机选择一个划分阈值; (3) IForest算法构建的决策树一般深度max_depth是比较小的。 IForest的目的是异常点检测,所以只要能够区分异常数据即可,不需要大量数据;另外在异常点检测的过程中,一般不需要太大规模的决策树。 对于异常点的判断,则是将测试样本x拟合到T棵决策树上。计算在每棵树上该样本的叶子结点的深度ht(x)。从而计算出平均深度h(x);然后就可以使用下列公式计算样本点x的异常概率值,p(s,m)的取值范围为[0,1],越接近于1,则是异常点的概率越大。 m为样本个数,ξ 为欧拉常数 随机森林优缺点总结 本期AI小课堂我们一起了解了Bagging思想及其原理,以及基于Bagging的随机森林相关知识。最后,让我们一起总结下随机森林的优缺点: 优点 (1) 训练可以并行化,对于大规模样本的训练具有速度的优势; (2) 由于进行随机选择决策树划分特征列表,这样在样本维度比较高的时候,仍然具有比较好的训练性能; (3) 由于存在随机抽样,训练出来的模型方差小,泛化能力强; (4) 实现简单; (5) 对于部分特征缺失不敏感; (6) 可以衡量特征的重要性。 缺点 (1) 在某些噪声比较大的特征上,易过拟合; (2) 取值比较多的划分特征对RF的决策会产生更大的影响,从而有可能影响模型的效果。

优秀的个人博客,低调大师

STP+基于LACP的portchannel 实验分享

一、Port channel初识:1.1 基本概念port group 是配置层面上的一个物理端口组,配置到port group里面的物理端口才可以参加链路汇聚,并成为port channel里的某个成员端口。在逻辑上,port group 并不是一个端口,而是一个端口序列。加入port group 中的物理端口满足某种条件时进行端口汇聚,形成一个port channel,这个port channel 具备了逻辑端口的属性,才真正成为一个独立的逻辑端口。端口汇聚是一种逻辑上的抽象过程,将一组具备相同属性的端口,抽象成一个逻辑端口。port channel是一组物理端口的集合体,在逻辑上被当作一个物理端口。对用户来讲,完全可以将这个port channel 当作一个端口使用,因此不仅能增加网络的带宽,还能提供链路的备份功能,以及负载均衡。 总结起来,作用分三点,1、增加链路带宽,2、提供链路备份功能,3、在链路见进行负载均衡 1.2 配置的时候需要注意的地方 Port channel绑定多个物理链路(最多8条),到一个单一的逻辑链路,以提供增加的带宽和冗余。如果端口信道中的一个成员端口失败,之前通过这个失败的链路传输的流量将切换到端口信道中的其余成员端口。每个物理端口只能被放入一个port-channel中。在一个port-channel中所有端口必须兼容,并且需要有相同的速率和双工模式。二、兼容性:2.1 Port Channel兼容性在创建一个第三层端口通道之后,可以添加一个IP地址到port-channel interface ,并在第三层端口通道上创建子接口。不能在同一个端口通道中合并第2层和第3层接口。在向channel group添加接口时,软件将检查某些接口属性,以确保接口与channel group兼容。例如,不能将第3层接口添加到第2层通道组。思科的NX-OS软件在允许接口参与port-channel聚合之前,也会检查接口的许多操作属性使用“show port-channel compatibility-parameters”命令可以查看Cisco NX-OS使用的兼容性检查的完整列表。或者,如果以下参数相同,可以强制具有不兼容参数的端口加入端口通道:• (Link) Speed capability • Speed configuration • Duplex capability • Duplex configuration • Flow-control capability • Flow-control configuration 使用LACP,可以在一个channel group中绑定多达16个接口。如果通道组有超过8个接口,那么其余接口将处于热备用状态。只能将通道模式设置为on的接口添加到静态端口通道,并且只能将通道模式配置为active或passive的接口添加到运行LACP的端口通道。可以在单个成员端口上配置这些属性。如果为成员端口配置了不兼容的属性,则软件将在端口通道中挂起该端口。 三、链路聚合协议3.1 链路聚合协议LACP和PAGPLACP /PAGP协议链路聚合协议。PAgP和LACP是两个用于链路聚合的IEEE 802.3ad标准中定义的数据链路层协议协议。它们允许具有相似特性的端口通过与相邻交换机的动态协商形成通道。PAGP是Cisco专有的协议,只能在Cisco交换机或供应商许可的支持PAGP的交换机上运行Channel group的五种模式:On模式,无协议,无协商,端口不进行协商。不运行LACP,直接形成以太网通道;在这种模式下,对端必须也是on模式,port channel才能正常工作。 四、链路聚合配置模式4.1 模式原理概述 1、手工汇聚原理手工负载分担模式链路聚合是应用比较广泛的一种链路聚合,大多数运营级网络设备均支持该特性,当需要在两个直连设备间提供一个较大的链路带宽而对端设备又不支持LACP 协议时,可以使用手工负载分担模式.2、静态汇聚原理静态LACP 模式链路聚合是一种利用LACP 协议进行参数协商选取活动链路的聚合模式。该模式由LACP 协议确定聚合组中的活动和非活动链路,又称为M∶N 模式,即M 条活动链路与N 条备份链路的模式。这种模式提供了更高的链路可靠性,并且可以在M 条链路中实现不同方式的负载均衡。3、动态汇聚原理动态汇聚和静态汇聚原理类似,只是动态汇聚中所有端口都是通过协议确定,而不是像静态汇聚通过协议在指定端口中确定汇聚相关端口 4.2 手工式链路聚合成员接口的加入完全由手工来配置,没有链路聚合控制协议的参与。该模式下所有成员接口(selected)都参与数据的转发,分担负载流量,因此称为手工负载分担模式。手工汇聚端口的 LACP 协议为关闭状态,禁止用户使能LACP 协议。(Selectet和Unselected:参与流量转发的端口称为Selected端口,否则称为Unselected端口)。4.3 LACP的配置模式4.3.1 静态 LACP 模式链路聚合成员接口的加入,都是由手工配置完成的。但与手工负载分担模式链路聚合不同的是,该模式下LACP 协议报文参与活动接口的选择。也就是说,当把一组接口加入Eth-Trunk 接口后,这些成员接口中哪些接口作为活动接口,哪些接口作为非活动接口还需要经过LACP 协议报文的协商确定。静态汇聚端口的 LACP 协议为使能状态,当一个静态汇聚组被删除时,其成员端口将形成一个或多个动态LACP 汇聚,并保持LACP 使能。禁止用户关闭静态汇聚端口的LACP 协议。静态汇聚组中的端口状态:在静态汇聚组中,端口可能处于两种状态:Selected 或Standby。Selected 端口和Standby 端口都能收发LACP 协议,但Standby 端口不能转发用户报文。在一个汇聚组中,处于Selected 状态且端口号最小的端口为汇聚组的主端口,其他处于Selected 状态的端口为汇聚组的成员端口。可以形象的认为,聚合组中的所有端口被汇聚到了主端口,主端口在逻辑上代表了整个聚合组。在静态汇聚组中,系统按照以下原则设置端口处于 Selected 或者Standby 状态:系统按照端口全双工/高速率、全双工/低速率、半双工/高速率、半双工/低速率的优先次序,选择优先次序最高的端口处于Selected 状态,其他端口则处于Standby 状态。与处于 Selected 状态的最小端口所连接的对端设备不同,或者连接的是同一个对端设备但端口在不同的汇聚组内的端口将处于Standby 状态。端口因存在硬件限制(如不能跨板汇聚)无法汇聚在一起,而无法与处于Selected 状态的最小端口汇聚的端口将处于Standby 状态。 4.3.2 动态 LACP 模式链路聚合简介动态 LACP 模式下,Eth-Trunk 接口的建立,成员接口的加入,活动接口的选择完全由LACP 协议通过协商完成。这就意味着启用了动态LACP 协议的两台直连设备上,不需要创建Eth-Trunk 接口,也不需要指定哪些接口作为聚合组成员接口,两台设备会通过LACP 协商自动完成链路的聚合操作。动态 LACP 汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态LACP 汇聚中的成员端口。只有速率和双工属性相同、连接到同一个设备、有相同基本配置的端口才能被动态汇聚在一起。即使只有一个端口也可以创建动态汇聚,此时为单端口汇聚。动态汇聚中,端口的LACP 协议处于使能状态。能形成portchannel的模式:Passive 将端口置于被动协商状态的LACP模式,在这种状态下,端口对它接收的LACP数据包作出响应,但不发起LACP协商。当您不知道远程系统或合作伙伴是否支持LACP时,被动模式非常有用。Active LACP模式,将一个端口置于主动协商状态,在此状态中,该端口通过发送LACP包与其他端口启动协商。端口正常周期性的发送LACP报文。4.3.3 select和standby的选举:每个被配置为使用LACP的端口和LACP都有一个LACP优先级。优先级的默认值32768,也可以配置1到65535之间的值。LACP使用端口优先级和端口号来形成端口标识符port identifier。LACP使用system priority 和MAC地址来形成system ID。比较设备 ID(系统优先级+系统b)动态汇聚组中的端口状态在动态汇聚组中,端口可能处于两种状态:Selected 或Standby。Selected 端口和Standby 端口都能收发LACP 协议,但Standby 端口不能转发用户报文。由于设备所能支持的汇聚组中的最大端口数有限制,如果当前的成员端口数量超过了最大端口数的限制,则本端系统和对端系统会进行协商,根据设备ID 优的一端的端口ID 的大小,来决定端口的状态。具体协商步骤如下:设备优先级+MAC 地址)。先比较系统优先级,如果相同再比较系统MAC 地址。设备ID 小的一端被认为优。比较端口 ID(端口优先级+端口号)。对于设备ID 优的一端的各个端口,首先比较端口先级,如果优先级相同再比较端口号。端口ID 小的端口为Selected 端口,剩余端口为Standby 端口。在一个汇聚组中,处于Selected 状态且端口号最小的端口为汇聚组的主端口,其他处于Selected 状态的端口为汇聚组的成员端口。口标识符。 五、 实验部分5.1 实验概述采用LACP协商的方式来创建port channel,实验用到的设备有,两台cisco 2960,两台3560,2台3650,涉及的协议 STP,LACP。 两台2960作为接入交换机,2560作为汇聚交换机,核心交换机为2650。汇聚和核心交换机之间使用LACP协商的协议实现port channel。 接入交换机和汇聚交换机之间使用STP协议防止环路。拓扑如下: 接入交换机左:F0/3 Vlan 20 F0/4 Vlan 21接入交换机右:F0/3 Vlan 50汇聚交换机左:F0/5 Vlan 200 IP 192.168.200.2F0/1-2 Channel group 3汇聚交换机右:F0/5 Vlan 220 IP 192.168.220.3F0/1-2 Channel group 3核心交换机左:G1/0/1 Vlan 200 IP 192.168.200.1G1/0/2-3 Channel group 30 172.16.1.1核心交换机右:G1/0/1 Vlan 220 IP 192.168.220.2G1/0/2-3 Channel group 31 172.16.1.2 验证汇聚交换机port channel:Channel group3 为RU状态。两个链路均为active。 验证核心交换机的portchannel: 验证汇聚层STP,log较多,放在附件中: 验证网络中机器的连通性:

优秀的个人博客,低调大师

WAF+SLB负载不均衡案例分享

问题演变过程 时间点1:高防+WAF+SLB+2台ECS时间点2:高防+WAF+SLB+4台ECS 问题描述 在时间点1时,没有发现明显的负载不均衡的情况。在时间点2时,出现大部分请求都打到了其中一台ECS上。需要定位问题原因 问题梳理 问题链路 是SLB后端的ECS出现负载不均衡的请求,那么直接影响这个转发算法的,是WAF以及SLB。那么和高防没有关系了。 配置情况 SLB:TCP监听,WRR转发算法,开启会话保持 WAF:无特殊配置,域名直接回源负载均衡IP 问题点1:轮询算法+会话保持 措施:尝试修改轮询算法为WLC,会话保持时间调短。然而这个优化措施效果并不明显,由于开启了会话保持,那原有负载不均衡的情况下,调整WRR算法到WLC的算法,没有实现预期的WLC。 但是从另外一个角度来说,如果源IP非常分散的场景下,即使有会话保持,理论上还是应该

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册