机器人控制技术第一版习题解答完整版机工版_第1页
机器人控制技术第一版习题解答完整版机工版_第2页
机器人控制技术第一版习题解答完整版机工版_第3页
机器人控制技术第一版习题解答完整版机工版_第4页
机器人控制技术第一版习题解答完整版机工版_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器人控制技术第一版习题解答陈万米上海大学2021.06

目录第1章 3第2章 5第3章 7第4章 10第5章 14第6章 15第7章 28第8章 31

第1章简要叙述机器人的发展古代机器人可追溯到我国的三国时期,早期机器人出现了机器人的三原则,20世纪70年代进入到现代机器人,本世纪进入到现代机器人与智能机器人。机器人的发展与人类的辩证关系任何新事物的出现都有利有弊,只不过利大于弊,很快就得到了人们的认可。机器人的出现并高速发展是社会和经济发展的必然,是为了提高社会的生产水平和人类的生活质量,让机器人替人们干那些人干不了、干不好的工作。机器人是不会抢人饭碗的。机器人被誉为“制造业皇冠顶端的明珠”,发展机器人产业对提高创新能力、增强国家综合实力、带动整体经济发展都具有十分重要的意义。机器人如何分类机器人定义上的模糊和多样,使得机器人在分类上也有很多方法。常见的有按运动方式、智能程度、按机器人用途分类。按机器人运动方式分类可以分为:固定式机器人和移动机器人,移动机器人又可以分为:轮式机器人、履带式机器人、足式机器人、飞行机器人、水下机器人等。按机器人智能程度可以分为:一般机器人、智能机器人。智能机器人根据其智能水平又可分为:传感型机器人、半自主机器人、自主型机器人。按用途分类是机器人根据不同的应用行业和工作任务进行分类,是当前机器人技术最常用也是最常见的分类方法。一般可以分为工业机器人、服务机器人和特种机器人。国际上通常将机器人分为\o"工业机器人"工业机器人和\o"服务机器人"服务机器人两大类,如表1-1。工业机器人是集机械、电子、控制、计算机、传感器、人工智能等多学科先进技术于一体的现代制造业重要的自动化装备。自从1962年美国研制出世界上第一台工业机器人以来,机器人技术及其产品发展很快,已成为柔性制造系统(FMS)、自动化工厂(FA)、计算机集成制造系统(CIMS)的自动化工具。服务机器人是机器人家族中的一个年轻成员,可以分为专业领域服务机器人和个人/家庭服务机器人,服务机器人的应用范围很广,主要从事维护保养、修理、运输、清洗、保安、救援、监护等工作。简要叙述机器人的结构a.机器人本体——多自由度的关节式机械系统一般包括:(1)驱动装置(能源,动力)(2)减速器(将高速运动变为低速运动)(3)运动传动机构(4)关节部分机构(相当手臂,形成空间的多自由度运动)(5)把持机构,末端执行器,端拾器(相当手爪)(6)移动机构,走行机构(相当腿脚)(7)变位机等周边设备(配合机器人工作的辅助装置)b.机器人感知系统内部传感器——检测机器人自身状态(内部信息),机器人自身运动与正常工作所必需,如关节的运动状态。外部传感器——感知外部世界,检测作业对象与作业环境的状态(外部信息),适应特定环境,完成特定任务所必需,如视觉、听觉、触觉等。c.机器人控制系统驱动控制器——伺服控制器(单关节),控制各关节驱动电机。运动控制器——规划、协调机器人各关节的运动,轨迹控制。作业控制器——环境检测,任务规划,确定所要进行的作业流程。d.机器人决策系统通过感知和思维,规划和确定机器人的任务,而且应该具有学习能力。机器人控制的基本要求机器人的底层控制与上层控制1).底层控制包括机器人本体,即机械部分,驱动电路部分,传感器部分,以及控制策略,如PID控制等。2).上层控制包括机器人的运动分析,路径规划以及机器人的软件部分。机器人控制技术的学习有那些要求由于机器人控制技术是一门多学科交叉的综合性课程,在学习本课程时,需要理论联系实际,并争取多参观(在学习过程参加一些展览会,如:上海的中国国际工业博览会,工业自动化与机器人展,北京的世界机器人大会等),勤思考,多实践。

第2章试述机器人的基本组成。机器人一般由机械部分、传感部分和控制部分等组成2,请解释下机器人的自由度这一概念。机器人能独立运动的关节的数目,称为机器人的运动自由度(DegreeofFreedom,DOF)。自由度是操作机独立驱动的关节,它是对机器人进行运动和受力分析的原始数据。自由度数目是反映操作机的通用性和适应性的一项重要指标,自由度越多则越通用,但也越复杂。3,机器人的驱动方式最常见的是哪三种?分别谈谈其优劣点。机器人的驱动方式主要有液压驱动、气动驱动和电气驱动三种形式优劣点用表格表示如下4,机器人的控制方式有哪几种?机器人的控制方式有:(1)单CPU结构、集中控制方式;(2)二级CPU结构、主从式控制方式;(3)多CPU结构、分布式控制方式;(4)开发机器人控制专用VLSI;(5)利用有并行处理能力的芯片式计算机(Transputer,DSP)构成并行处理网络。5,谈谈线性稳压电源和开关电源的优劣点。线性稳压电源优点:是输出电压质量高、纹波小、不需要使用电感元件,稳定性好,瞬态响应速度快,可靠性高,输出电压精度高,输出纹波电压精度小;缺点:是变换效率较低,尤其是在输入输出电压差较大的情况下。如果输出电流也较大,会有明显的发热发烫现象,甚至可能烧坏稳压器。开关电源优点:体积小,重量轻,功耗小,稳压范围宽,效率在80%~90%。缺点:输出纹波电压较高,噪声较大,电压调整率等性能也较差,特别是对模拟电路供电时,将产生较大的影响。

第3章传感器的特性参数主要有哪些?选用传感器应该注意什么问题?(1)额定载荷:传感器的额定载荷是指在设计此传感器时,在规定技术指标范围内能够测量的最大轴向负荷。但实际使用时,一般只用额定量程的2/3~1/3。(2)允许使用负荷(或称安全过载):传感器允许施加的最大轴向负荷。允许在一定范围内超负荷工作。一般为120%~150%。(3)极限负荷(或称极限过载):传感器能承受的不使其丧失工作能力的最大轴向负荷。意即当工作超过此值时,传感器将会受到损坏。(4)灵敏度:输出增量与所加的负荷增量之比。通常每输入1V电压时额定输出的mV。本公司产品与其它公司产品配套时,其灵敏系数必须一致。(5)非线性:这是表征此传感器输出的电压信号与负荷之间对应关系的精确程度的参数。(6)重复性:重复性表征传感器在同一负荷在同样条件下反复施加时,其输出值是否能重复一致,这项特性更重要,更能反映传感器的品质。国标对重复性的误差的表述:重复性误差可与非线性同时测定。传感器的重复性误差(R)按下式计算:R=ΔθR/θn×100%。ΔθR--同一试验点上3次测量的实际输出信号值之间的最大差值(mv)。(7)滞后:滞后的通俗意思是:逐级施加负荷再依次卸下负荷时,对应每一级负荷,理想情况下应有一样的读数,但事实上下一致,这不一致的程度用滞后误差这一指标来表示。国标中是这样来计算滞后误差的:传感器的滞后误差(H)按下式计算:H=ΔθH/θn×100%。ΔθH--同一试验点上3次行程实际输出信号值的算术平均与3次上行程实际输出信号值的算术平均之间的最大差值(mv)。(8)蠕变和蠕变恢复:要求从两个方面检验传感器的蠕变误差:其一是蠕变:在5-10秒时间无冲击地加上额定负荷,在加荷后5~10秒读数,然后在30分钟内按一定的时间间隔依次记下输出值。传感器蠕变(CP)按下式计算:CP=θ2-θ3/θn×100%。其二是蠕变恢复:尽快去掉额定负荷(在5~10秒时间内),卸荷后在5~10秒内立即读数,然后在30分钟内按一定的时间间隔依次记下输出值。传感器的蠕变恢复(CR)按下式计算:CR=θ5-θ6/θn×100%。(9)允许使用温度:规定了此传感器能适用的场合。例常温传感器一般标注为:-20℃+70℃。高温传感器标注为:-40℃250℃。(10)温度补偿范围:说明此传感器在生产时已在这样的温度范围内进行了补偿。例常温传感器一般标注为-10℃-+55℃。(11)零点温度影响(俗称零点温漂):表征此传感器在环境温度变化时它的零点的稳定性。一般以每10℃范围内产生的漂移为计量单位。(12)输出灵敏系数的温度影响(俗称系数温漂):此参数表征此传感器在环境温度变化时输出灵敏度的稳定性。一般以每10℃范围内产生的漂移为计量单位。(13)输出阻抗:本公司传感器与其它厂家传感器并联使用时,必须弄清该公司产品的输出阻抗,此值必须与其一致,否则它会直接影响电子秤的输出特征和四角误差的调试。(14)输入阻抗:由于传感器的输入端弹模补偿电阻和灵敏系数调整电阻,所以传感器的输入电阻都大于输出电阻,但可通过并联电阻方法使其变化。要求各传感器的输入阻抗一致,若与其它厂家的传感器匹配。则应使输入阻抗与其一致,否则在调试四角误差时会增加工时,因为传感器的输入阻抗对稳压电源而言是一个负载,只有负载一样,同一稳压电源才会提供一样的电源电压。(15)绝缘阻抗:绝缘阻抗相当于传感器桥路与地之间串了一个阻值与其相当的的电阻,绝缘电阻的大小会影响传感器的各项性能。而当绝缘阻抗低于某一个值时,电桥将无法正常工作。(16)推荐激励电压:一般为5~10伏。因一般称重仪表内配的稳压电源为5或10伏。(17)允许最大激励电压:为了提高输出信号,在某些情况下(例如大皮重)要求利用加大激励电压来获得较大的信号。(18)电缆长度:它与现场布局有关,定货前必须看清楚公司产品的常规电缆长度。另外,注意环境是否有腐蚀性、是否有冲击情况、是否高温或低温。(19)密封防护等级IP67:防浸水影响,以规定的压力和时间浸入水中性能不受影响。灌胶保护的传感器可达到IP67。除可防油、防水外,还可防一般的腐蚀性气体,腐蚀性介质。机器人传感器的选择取决于机器人工作需要和应用特点,对机器人感觉系统的要求是选择传感器的基本依据。机器人传感器选择的一般要求如下:精度高、重复性好稳定性和可靠性好抗干扰能力强重量轻、体积小、安装方便电感式传感器有哪几种?各自的优缺点是什么?电感式传感器分为3种类型:改变气隙厚度δ的自感传感器,即变间隙式电感传感;改变气隙截面S的自感传感器,即变截面式电感传感器;同时改变气隙厚度δ和气隙截面S的自感传感器,即螺管式电感传感器。1、变间隙型电感传感器,这种传感器的气隙δ随被测量的变化而改变,从而改变磁阻。它的灵敏度和非线性都随气隙的增大而减小,因此常常要考虑两者兼顾.δ一般取在0.1~0.5毫米之间。2、改变面积型电感传感器,这种传感器的铁芯和衔铁之间的相对覆盖面积(即磁通截面)随被测量的变化而改变,从而改变磁阻.它的灵敏度为常数,线性度也很好。螺管插铁型电感传感器。它由螺管线圈和与被测物体相连的柱型衔铁构成。3、螺管插铁型电感传感器,它由螺管线圈和与被测物体相连的柱型衔铁构成。其工作原理基于线圈磁力线泄漏路径上磁阻的变化。衔铁随被测物体移动时改变了线圈的电感量。这种传感器的量程大,灵敏度低,结构简单,便于制作。有两个传感器测量系统,其动态特性可以分别用下面两个微分方程描述,试求这两个系统的时间常数和静态灵敏度K某传感器给定精度为2%F·S,满度值为50mV,零位值为10mV,求可能出现的最大误差(以mV计)。当传感器使用在满量程的1/2和1/8时,计算可能产生的测量百分误差。由你的计算结果能得出什么结论?解:可能出现的最大误差满量程=50-10=40(mv)可能出现的最大误差:Δ 测量百分误差当传感器使用在满程的1/2和1/8时,其测量百分误差分别为:γγ结论通过计算结果可知,传感器使用满程的占比越大,其测量误差值反而越小,说明我们在选择传感器时,要结合使用要求选择合适的量程,既不能超过量程,也不能选择过大的量程,否则会导致测量误差变大。

第4章1.伺服电机的选型原则和注意事项有哪些?伺服电机的选型步骤(1)明确负载机构的运动条件要求,即加/减速的快慢、运动速度、机构的重量、机构的运动方式等。(2)依据运行条件要求选用合适的负载惯量计算公式计算出机构的负载惯量。(3)依据负载惯量与伺服电机惯量选出适当的假选定伺服电机规格。(4)结合初选的伺服电机惯量与负载惯量,计算出加速转矩及减速转矩。(5)依据负载重量、配置方式、摩擦系数、运行效效率计算出负载转矩。(6)初选伺服电机的最大输出转矩必须大于加速转矩+负载转矩;如不符合条件,必须选用其他型号计算验证直至符符合要求。(7)依据负载转矩、加速转矩、减速转矩及保持转矩计算出连续瞬时转矩。(8)初选伺服电机的额定转矩必须大于连续瞬时转矩,如,如果不符合条件,必须选用其他型号计算验证直至符合要求。伺服电机选型的注意事项(1)如果选择了带电磁制动器的伺服电机,电机的转动惯量会增大,计算转矩时要进行考虑。(2)有的伺服驱动器有内置的再生制动单元,但当再生制动较频繁时,可能引起直流母线电压过高,这时需另配再生制动电阻。再生制动电阻是否需要另配,配多大,可参照相应样本的使用说明来配。(3)有些系统要维持机械装置的静止位置,需电机提供较大的输出转矩,且停止的时间较长。如果使用伺服的自锁功能,往往会造成电机过热或放大器过载,这种情况就要选择带电磁制动的电机。(4)有些系统如传送装置,升降装置等要求伺服电机能尽快停车,而在故障、急停、电源断电时伺服器没有再生制动,无法对电机减速。同时系统的机械惯量又较大,这时对动态制动器的要依据负载的轻重、电机的工作速度等进行选择。2.步进电动机的特征参数有哪些?简单叙述一下三相单三拍步进电机的工作原理。步进电动机的特性有高精度的定位2、具定位保持力3、动作灵敏4、开回路控制、不必依赖传感器定位5、中低速时具备高转矩6、高信赖性7、小型、高功率8、无积累误差9、步进电机外表允许的最高温度

10、步进电机的力矩会随转速的升高而下降。

11、步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声

基本参数1、电机固有步距角2、步进电机的相数:3、保持转矩

三相单三拍三相绕组联接方式:Y型(2)三相绕组中的通电顺序为:(3)A相通电,A方向的磁通经转子形成闭合回路。若转子和磁场轴线方向原有一定角度,则在磁场的作用下,转子被磁化,吸引转子,使转子的位置力图使通电相磁路的磁阻最小,使转、定子的齿对齐停止转动。步进电机A、B、C三相通电示意图如下图所示。这种工作方式,因三相绕组中每次只有一相通电,而且,一个循环周期共包括三个脉冲,所以称三相单三拍。三相单三拍的特点:(1)每来一个电脉冲,转子转过30。此角称为步距角,用S表示。(2)转子的旋转方向取决于三相线圈通电的顺序,改变通电顺序即可改变转向。正转:,反转:介绍一下舵机的工作原理,舵机主要应用在哪些场合?舵机是一种位置(角度)伺服的驱动器,由于可以通过程序连续控制其转角,因而被广泛应用智能小车以实现转向以及机器人各类关节运动中。舵机主要有几以下个部分组成:外壳、减速齿轮组、电机、电位器、控制电路。简单的工作原理是控制电路接收信号源的控制信号,并驱动电机转动;齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。舵机是一种位置伺服驱动器,转动范围不能超过180度,适用于那些需要不断变化并可以保持的驱动器中,比如说机器人的关节、飞机的舵面等。4.电机的驱动方式有哪几种?各有什么特点?根据能量转换方式,将驱动器划分为液压驱动、气压驱动、电气驱动。等同于于第2章的第3题5.PID控制器对控制性能有哪些影响?1)对系统动态性能影响:比例系数kp增大将使系统响应速度加快,kp偏大系统振荡次数增多调节时间加长;积分时间Ti通常影响系统的稳定性,Ti太小系统可能不稳定且振荡次数较多,Ti太大对系统影响将削弱;微分时间Td的增加可以改善系统的动态特性。2)对系统稳态性能影响:在系统稳定的前提下,加大kp可以减少稳态误差;积分控制有助于消除稳态误差,提高系统的控制精度;微分环节可以在误差出现或变化瞬间,按偏差变化的趋向进行控制。具体如下表所示:6.智能PID整定有哪些方法?各有什么特点?基于继电反馈(RelayFeedback)的PID参数自整定方法依据在于大多数的对象在继电反馈作用下都能产生稳定的振荡,当过程输出达到稳定状态时启动整定程序,控制开关切换到b时,系统进入继电整定状态。继电可以是带滞后的也可以不带滞后,等到不变的振荡输出量力产生,通过测量这个极限环的性质,也就是输出的频率与幅度,就可以测知对象临界点的信息。当输出的频率与幅度均计算得出后,PID参数通过算法或一定的约束条件(在这里是指它的相位裕度)可以得出,然后将开关拨到a处,系统进入PID控制阶段。基于模糊PID控制(Fuzzy-PID)参数自整定PID参数模糊自整定控制系统能在控制过程中对不确定的条件、参数、延迟和干扰等因素进行检测分析,采用模糊推理的方法实现PID参数,工艺的在线自整定。不仅保持了常规PID控制系统的原理简单、使用方便、鲁棒性较强等特点,而且具有更大的灵活性、适应性、精确性等特性。.基于神经网路PID(Neural-NetworkPID)的参数整定基于神经网络的模糊PID控制这种控制器对模型、环境具有较好的适应能力以及较强的鲁棒性,但是由于系统组成比较复杂,存在运算量大、收敛慢、成本较大的缺点。专家PID控制该系统由于采用闭环输出波形的模式识别方法来辨别被控对象的动态特性,不必加持续的激励信号,因而对系统造成的干扰小。另外,采用参考模型自适应原理,使得自整定过程可以根据参考模型输出波形特征值的差值来调整PID参数,这个过程物理概念清楚,并且避免了被控对象动态特性计算错误而带来的偏差。基于遗传算法PID控制(GeneticAlgorithmPID)基于遗传算法的PID具有以下特点:(1)把时域指标同频域指标做了紧密结合,鲁棒性和时域性能都得到良好保证;(2)采用了新型自适应遗传算法,收敛速度和全局优化能力大大提高;(3)具有较强的直观性和适应性;(4)较为科学地解决了确定参数搜索空间的问题,克服了人为主观设定的盲目性。基于遗传算法的PID控制系统的原理框图如图4-39,图中省略了遗传算法的具体操作过程。其思想就是将控制器参数构成基因型,将性能指标构成相应的适应度,便可利用遗传算法来整定控制器的最佳参数,并且不要求系统是否为连续可微的,能否以显式表示。当遗传算法用于PID控制参数寻优时,其操作流程主要包括:(1)参数编码、种群初始化;(2)适应度函数的确定;(3)通过复制、交叉、变异等算子更新种群;(4)结束进化过程。

第5章简述机器人的动力学机器人的动力学,它主要是为了确定物体在受到外力作用时的运动结果。机器人动力学是对机器人机构的力和运动之间关系与平衡进行研究的学科。机器人动力学是复杂的动力学系统,对处理物体的动态响应取决于机器人动力学模型和控制算,主要研究动力学正问题和动力学逆问题两个方面,需要采用严密的系统方法来分析机器人动力学特性。简述机器人的运动学运动学是对机械系统如何运行的是基本的研究,机器人运动学包括正向运动学和逆向运动学,正向运动学即给定机器人各关节变量,计算机器人末端的位置姿态;逆向运动学即已知机器人末端的位置姿态,计算机器人对应位置的全部关节变量。工业机器人对臂部的设计有什么要求?(1)刚度和强度大,稳定性好。 (2)运动灵活,导套不宜过短,避免卡死。(3)驱动方式适宜。 (4)结构布置合理。机器人力雅可比矩阵和速度雅可比矩阵有什么联系?力雅可比矩阵是速度雅克比矩阵的转置有一旋转变换,先固定坐标系Z0轴旋转45度,再绕其X0轴旋转30度,最后绕Y0旋转60度,试求其齐次坐标变换矩阵。齐次坐标变换矩阵R=Rot(Y,60̊)Rot(X,30̊)Rot(Z,45̊)==第6章1、机器人典型的路径规划方法有哪些?请分别论述它们各自的优缺点。机器人典型的路径规划方法包括栅格建模法、人工势场法、遗传算法等。栅格建模法利用相同尺寸的栅格对机器人的工作空间进行划分并记录有关环境信息,较为简单、使用并且操作方便,但是栅格尺寸划分的大小对机器人的路径规划影响较大。栅格划分较小意味着对环境的分辨率越高,但是会降低机器人的抗干扰能力及决策速度;栅格划分过大虽然会提高机器人抗干扰能力及决策速度,但是相应的对环境的分辨率会降低。人工势场法引进了物理学中场论的理念,具有结构简单、易于实现、便于底层实时控制的优点,但是存在着全局最小值、局部极小值以及路径振荡等问题。遗传算法以适应度值作为搜索信息,特别适用于多目标函数、难以求导的函数或者导数不存在的函数的优化问题。同时作为一种全局并行的搜索算法,其搜索速度快且陷入局部极小值的可能性也较小。但是遗传算法存在着迭代次数多、收敛速度慢、易陷入局部极值以及过早收敛等问题。2、当机器人处于已知的环境或者未知的环境中时,应当分别采取何种路径规划方法? 当机器人对外界环境已知时,可以采用栅格法、自由空间法、可视图法进行路径规划。当机器人对外界环境部分已知或完全未知时,可以采用人工势场法、模糊逻辑算法、神经网络法以及遗传算法进行路径规划。3、当机器人所处的环境中出现动态障碍物时,机器人应当采取怎样的路径规划策略?在动态障碍物存在的情况下,机器人可以依靠自身环境传感器获得障碍物的数据信息,并以此进行实时的在线路径规划,以达到避开障碍物的目的。4、除了本章所述的路径规划的改进方法外,你是否还有其他的改进策略?请简要论述并画出流程图。可以在基本遗传算法的基础上引入多个种群的概念形成多种群遗传算法。多种群遗传算法的基本思想是在相同的搜索空间上生成多个子种群,并为不同的种群设置不同的控制参数,即设置不同的控制参数,以模拟出不同的外界环境,使不同的种群具有不同的进化机制,以实现不同的搜索目的。它用多个子种群代替原有的单一种群,并且每个子种群按照不同的进化策略和遗传算子进行并行进化,使用多个种群代替原始种群在可行解域内进行搜索。同时当各种群进化到若干代的时候,将此时当前总体中的最优个体传播到其他的种群中去,即执行移民操作,可以加强不同种群中个体之间的相互交流,实现协同进化。这样不仅可以显著提高算法的局部搜索能力和全局搜索能力,同时也可以增加种群中个体的多样性。如此循环往复一直到满足终止条件为止,可以在保证最优个体稳定进化的同时,又能提高进化速度,并且有效避免单个种群在进化过程中出现的过早收敛等现象的发生。其流程图如下图所示。5、若机器人的工作环境如图6-9所示。机器人的起点在0,目标点在99,试用遗传算法规划出机器人的运动路径。Matlab实现遗传算法进行机器人路径规划参考源代码:%基于遗传算法的机器人路径规划%主函数实现%main.mclc;clear;%输入数据构建栅格地图G=[0100000000;0100110000;0000110000;0000000000;0011000000;0010001000;0010011011;0000001000;1000000000;1000000000];%起始序号p_start=0;%终止序号p_end=99;%种群数量NP=200;%最大进化代数max_gen=200;%交叉概率pc=0.3;%变异概率pm=0.1;%路径长度比重a=1;%路径顺滑度比重b=1;z=1;%元包类型路径new_pop1={};[y,x]=size(G);%起点所在列xs=mod(p_start,x)+1;%起点所在行ys=fix(p_start/x)+1;%终点所在列、行xe=mod(p_end,x)+1;ye=fix(p_end/x)+1;%种群初始化pass_num=ye-ys+1;pop=zeros(NP,pass_num);fori=1:NPpop(i,1)=p_start;j=1;foryk=ys+1:ye-1j=j+1;can=[];forxk=1:x%栅格序号no=(xk-1)+(yk-1)*x;ifG(yk,xk)==0can=[canno];endendcan_num=length(can);%产生随机整数index=randi(can_num);pop(i,j)=can(index);endpop(i,end)=p_end;single_new_pop=generate_continuous_path(pop(i,:),G,x);if~isempty(single_new_pop)new_pop1(z,1)={single_new_pop};z=z+1;endend%计算初始化种群的适应度%计算路径长度path_value=cal_path_value(new_pop1,x);%计算路径平滑度path_smooth=cal_path_smooth(new_pop1,x);fit_value=a.*path_value.^-1+b.*path_smooth.^-1;mean_path_value=zeros(1,max_gen);min_path_value=zeros(1,max_gen);%循环迭代操作fori=1:max_gen%选择操作new_pop2=selection(new_pop1,fit_value);%交叉操作new_pop2=crossover(new_pop2,pc);%变异操作new_pop2=mutation(new_pop2,pm,G,x);%更新种群new_pop1=new_pop2;%计算适应度值%计算路径长度path_value=cal_path_value(new_pop1,x)%计算路径平滑度path_smooth=cal_path_smooth(new_pop1,x)fit_value=a.*path_value.^-1+b.*path_smooth.^-1mean_path_value(1,i)=mean(path_value);[~,m]=max(fit_value);min_path_value(1,i)=path_value(1,m);end%绘制每次迭代平均路径长度和最优路径长度图figure(1)plot(1:max_gen,mean_path_value,'black','LineStyle','--')holdon;xlabel('迭代次数');ylabel('路径长度');plot(1:max_gen,min_path_value,'b')legend('平均路径长度','最优路径长度');min_path_value(1,end)%地图上绘制路径[~,min_index]=max(fit_value);min_path=new_pop1{min_index,1};figure(2)holdon;title(['遗传算法机器人运动轨迹']);DrawMap(G);[~,min_path_num]=size(min_path);fori=1:min_path_numx_min_path(1,i)=mod(min_path(1,i),x)+1;y_min_path(1,i)=fix(min_path(1,i)/x)+1;endholdon;%路径线颜色text(0.8,1,'S','Color','g','FontSize',15);text(14.8,15,'G','Color','r','FontSize',15);plot(x_min_path,y_min_path,'black')%创建具有障碍物的栅格地图%DrawMap.m%矩阵中1代表黑色栅格functionG=DrawMap(G)b=G;b(end+1,end+1)=0;colormap([111;000]);pcolor(0.5:size(G,2)+0.5,0.5:size(G,1)+0.5,b);set(gca,'XTick',1:size(G,1),'YTick',1:size(G,2));holdonx_text=1:1:15*15;fori=1:1:15*15;[row,col]=ind2sub(15,i);text(row-0.3,col,num2str(x_text(i)));endaxisimagexy;%路径平滑度功能函数的实现%cal_path_smooth.mfunction[path_smooth]=cal_path_smooth(pop,x)[n,~]=size(pop);path_smooth=zeros(1,n);fori=1:nsingle_pop=pop{i,1};[~,m]=size(single_pop);forj=1:m-2%点i所在列x_now=mod(single_pop(1,j),x)+1;%点i所在行y_now=fix(single_pop(1,j)/x)+1;%点i+1所在列、行x_next1=mod(single_pop(1,j+1),x)+1;y_next1=fix(single_pop(1,j+1)/x)+1;%点i+2所在列、行x_next2=mod(single_pop(1,j+2),x)+1;y_next2=fix(single_pop(1,j+2)/x)+1;c2=(x_now-x_next2)^2+(y_now-y_next2)^2;ifc2<8&&c2>4path_smooth(1,i)=path_smooth(1,i)+5;elseifc2<=4&&c2>1path_smooth(1,i)=path_smooth(1,i)+30;elseifc2<=1path_smooth(1,i)=path_smooth(1,i)+5000;endendend%路径长度功能函数的实现%cal_path_value.mfunction[path_value]=cal_path_value(pop,x)[n,~]=size(pop);path_value=zeros(1,n);fori=1:nsingle_pop=pop{i,1};[~,m]=size(single_pop);forj=1:m-1%点i所在列x_now=mod(single_pop(1,j),x)+1;%点i所在行y_now=fix(single_pop(1,j)/x)+1;%点i+1所在列、行x_next=mod(single_pop(1,j+1),x)+1;y_next=fix(single_pop(1,j+1)/x)+1;ifabs(x_now-x_next)+abs(y_now-y_next)==1path_value(1,i)=path_value(1,i)+1;elsepath_value(1,i)=path_value(1,i)+sqrt(2);endendend%将必经节点联结成无间断路径%generate_continuous_path.mfunction[single_new_pop]=generate_continuous_path(single_pop,G,x)i=1;single_new_pop=single_pop;[~,single_path_num]=size(single_new_pop);whilei~=single_path_num%点i所在列x_now=mod(single_new_pop(1,i),x)+1;%点i所在行y_now=fix(single_new_pop(1,i)/x)+1;%点i+1所在列、行x_next=mod(single_new_pop(1,i+1),x)+1;y_next=fix(single_new_pop(1,i+1)/x)+1;%初始化最大迭代次数max_iteration=0;%判断点i和i+1是否连续,若不连续插入值whilemax(abs(x_next-x_now),abs(y_next-y_now))~=1x_insert=floor((x_next+x_now)/2);y_insert=floor((y_next+y_now)/2);%插入栅格为自由栅格ifG(y_insert,x_insert)==0%栅格序号num_insert=(x_insert-1)+(y_insert-1)*x;%插入新序号single_new_pop=[single_new_pop(1,1:i),num_insert,single_new_pop(1,i+1:end)];%插入栅格为障碍物栅格else%往左走ifG(y_insert,x_insert-1)==0&&((x_insert-2)+(y_insert-1)*x~=single_new_pop(1,i))&&((x_insert-2)+(y_insert-1)*x~=single_new_pop(1,i+1))x_insert=x_insert-1;%栅格序号num_insert=(x_insert-1)+(y_insert-1)*x;%插入新序号single_new_pop=[single_new_pop(1,1:i),num_insert,single_new_pop(1,i+1:end)];%往右走elseifG(y_insert,x_insert+1)==0&&(x_insert+(y_insert-1)*x~=single_new_pop(1,i))&&(x_insert+(y_insert-1)*x~=single_new_pop(1,i+1))x_insert=x_insert+1;%栅格序号num_insert=(x_insert-1)+(y_insert-1)*x;%插入新序号single_new_pop=[single_new_pop(1,1:i),num_insert,single_new_pop(1,i+1:end)];%向上走elseifG(y_insert+1,x_insert)==0&&((x_insert-1)+y_insert*x~=single_new_pop(1,i))&&((x_insert-1)+y_insert*x~=single_new_pop(1,i+1))y_insert=y_insert+1;%栅格序号num_insert=(x_insert-1)+(y_insert-1)*x;%插入新序号single_new_pop=[single_new_pop(1,1:i),num_insert,single_new_pop(1,i+1:end)];%向下走elseifG(y_insert-1,x_insert)==0&&((x_insert-1)+(y_insert-2)*x~=single_new_pop(1,i))&&((x_insert-1)+(y_insert-2)*x~=single_new_pop(1,i+1))y_insert=y_insert-1;%栅格序号num_insert=(x_insert-1)+(y_insert-1)*x;%插入新序号single_new_pop=[single_new_pop(1,1:i),num_insert,single_new_pop(1,i+1:end)];%其他情况舍去此路径elsesingle_new_pop=[];breakendendx_next=x_insert;y_next=y_insert;max_iteration=max_iteration+1;ifmax_iteration>20000single_new_pop=[];breakendendifisempty(single_new_pop)breakend[~,single_path_num]=size(single_new_pop);i=i+1;end%交叉操作函数实现%crossover.m%输入变量:pop:父代种群,pc:交叉的概率%输出变量:newpop:交叉后的种群function[new_pop]=crossover(pop,pc)[px,~]=size(pop);%判断路径点数是奇数或偶数parity=mod(px,2);new_pop={};fori=1:2:px-1singal_now_pop=pop{i,1};singal_next_pop=pop{i+1,1};[lia,lib]=ismember(singal_now_pop,singal_next_pop);[~,n]=find(lia==1);[~,m]=size(n);if(rand<pc)&&(m>=3)%生成一个2-m-1之间的随机数r=round(rand(1,1)*(m-3))+2;crossover_index1=n(1,r);crossover_index2=lib(crossover_index1);new_pop{i,1}=[singal_now_pop(1:crossover_index1),singal_next_pop(crossover_index2+1:end)];new_pop{i+1,1}=[singal_next_pop(1:crossover_index2),singal_now_pop(crossover_index1+1:end)];elsenew_pop{i,1}=singal_now_pop;new_pop{i+1,1}=singal_next_pop;endifparity==1new_pop{px,1}=pop{px,1};endend%变异操作函数实现%mutation.m%输入变量:pop:种群,pm:变异概率%输出变量:newpop变异以后的种群function[new_pop]=mutation(pop,pm,G,x)[px,~]=size(pop);new_pop={};fori=1:px%初始化最大迭代次数max_iteration=0;single_new_pop=pop{i,1};[~,m]=size(single_new_pop);single_new_pop_slice=[];if(rand<pm)whileisempty(single_new_pop_slice)%生成2-(m-1)的两个随机数,并排序mpoint=sort(round(rand(1,2)*(m-3))+[22]);single_new_pop_slice=[single_new_pop(mpoint(1,1)-1)single_new_pop(mpoint(1,2)+1)];single_new_pop_slice=generate_continuous_path(single_new_pop_slice,G,x);ifmax_iteration>=100000breakendendifmax_iteration>=100000new_pop{i,1}=pop{i,1};elsenew_pop{i,1}=[single_new_pop(1,1:mpoint(1,1)-1),single_new_pop_slice(2:end-1),single_new_pop(1,mpoint(1,2)+1:m)];endsingle_new_pop_slice=[];elsenew_pop{i,1}=pop{i,1};endend%选择操作函数实现%输入变量:pop元胞种群,fitvalue:适应度值%输出变量:newpop选择以后的种群function[new_pop]=selection(pop,fit_value)[px,~]=size(pop);total_fit=sum(fit_value);p_fit_value=fit_value/total_fit;p_f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论