基于ros的机器人机器学习定位和导航算法,与机器学习联系大吗

  摘要:视觉里程计(VO)通过轨迹推算,累加运动矢量,得出当前位置的相对定位方法,单目里程计仅使用单个相机作为图像获取载" />
免费阅读期刊
论文发表、论文指导
周一至周五
9:00&22:00
一种基于机器学习算法的单目里程计研究
  摘要:视觉里程计(VO)通过轨迹推算,累加运动矢量,得出当前位置的相对定位方法,单目里程计仅使用单个相机作为图像获取载体,使获得信息的要求更低,且能较精确地识别和定位特征点,实时性好,成本也少很多,因此具有更广的应用前景。本课题采用SURF算法来同时检测和匹配特征点,使用一种基于机器学习算法(SVM)自适应卡尔曼滤波器,减缓原本卡尔曼滤波器中会出现的精度低和发散状况,起到优化单目里程计的系统准确度。 中国论文网 http://www.xzbu.com/9/view-7635172.htm  关键词:单目;视觉里程计;SURF算法;卡尔曼滤波   中图分类号:G642.0 & & 文献标志码:A & & 文章编号:(7-03    移动机器人的自主定位导航是机器人运动的前提之一,随着计算机技术和图像处理技术的发展,利用机器视觉进行导航逐渐成为热点之一[1]。视觉里程计(VO)通过轨迹推算,累加运动矢量,得出当前位置的相对定位,从而帮助机器人感知周围环境和自由移动。对比双目里程计,单目里程计仅使用单个相机作为图像获取载体,使获得信息的要求更低,实时性好,成本也更少,因此具有更广的应用前景[2]。本研究课题引入机器学习算法,对传统单目视觉里程计进行改良,提出了一种新的解决方案,优化单目视觉里程计,对后期的工程应用有一定的实践意义。   一、设计单目视觉里程计系统模型   单目视觉里程计模型设计分为:硬件设计和软件设计。硬件设计就是安装在机器上带有调节机构的单个相机。软件模型设计包括:图像的采集和预处理、目标的选取特征与运动估计等模块,其软件设计工作流程如图1所示:   图1中,在采集到图像后,要进行滤波、图像矫正、标定参数等预处理,相机参数标定获得的参数能将现实三维与相机二维图像联系起来,是单目里程计能否准确定位的关键[3],本课题采用张友正的棋盘标定法,较其他算法实现起来更简单,准确度较高。   图片在成像过程中会出现畸变、失真等情况,可以采用灰度插值法或双线条插值法进行矫正,以起到减小里程计误差的作用。由于估算图像特征的运动参数是估算相机运动的关键,因此特征的选取显得尤为重要。选择具体的物体作为特征,在复杂的外部环境中是不现实的,所以,应该尽可能的选择简单,明显的点线面、角点、特定区域作为特征。在计算图像特征运动时,需要检测出两幅连续的图像中对应的特征点,然后找出所有特征点之间的对应关系进行匹配[4]。常用的特征点提取算法有Harris角点检测算法,SUSA(smallest univalve segment assimilating nucleus)角点检测算法,SIFT,SURF,FAST角点算法等。Harris算法定义局部领域内极大兴趣值对应的像素点为检测的特征点,并不如SURF(Speeded Up Robust Features)算法选取的特征点明显[5],所以相较于两者SURF更适合于本课题的研究,SURF基于积分图像提取特征点,通过Haar小波滤波器描述特征点,是一种集特征提取和描述于一体的算法,其抗干扰能力强,运算量低于SIFT算法,运算速度却更快,并且结合了SIFT算法的许多优点,因此本文选用SURF算法进行特征提取和匹配。由于SURF算法具有平移、旋转时尺寸不变的优势,因此所检测出的特征无论在哪个角度都是同一个特征,首先给特征点确定一个主方向,以特征点为原点,建立二维直角坐标系,获得一个64维特征向量r来描述特征点。之后SURF对特征点的匹配就可分为两步:第一步,快速索引进行初步匹配,但是会存在较大的误差,第二步进行最近邻匹配算法运算,若最近邻欧氏距离与次近邻欧式距离的比值在一定阈值范围内,则认为特征点匹配正确,反之则是匹配错误[6],能快速有效的剔除错误的匹配点。SURF算法的流程图如图2所示:   SURF最近邻欧式距离算法如式1所示:   dis(j)=(dis(rr)) (式1)   SURF次近邻欧氏距离算法如式2、式3所示:   dis(j)=(dis(rr)) &(式2)   R= (式3)   式(1)中,dis(j)――两个特征点间的最近邻欧氏距离,r中第j个向量与r中第i个向量的欧式距离最小;   式(2)中,dis(j)――两个特征点间的次近邻欧氏距离,r中第j个向量(除第j个向量外)与r中第i个向量的欧式距离最小;   式(3)中,R为最近邻欧氏距离与次近邻欧氏距离之比。设阈值为R,当R≤R时,特征向量匹配成功,反之则失败。   二、单目视觉里程计目标定位:   在设计完单目视觉里程计的模型后,进行计算,得出现实中的点的三维坐标;首先先确立相机的位置关系,就是在本质矩阵E(一个有5个自由度,秩为2的三阶矩阵)中分解出旋转矩阵R和平移向量T,可以由E=UDV,计算出R=UGV,其中G=,   Z=。而得到的平移向量T是一个比例值,只能根据现实数据计算出,因此平移向量还是一个未知数。在现实相机标定时可直接选用张友正的棋盘标定算法,使用ROS下的标定库,通过camera_calibration直接标定插入电脑的相机,当拍摄照片达到一定量之后,标定程序会自动开始计算各种参数,我们只需要选定焦距值,图像尺寸大小,主点坐标(u,v)。知道两张相片的坐标分别为A=(x,y,z),A=(x,y,z),可以通过数学计算来获取目标的三维坐标, 由先前得到的相机坐标位置关系可得式4:   A=RA+T (式4)   由于(u,v)和(u,v),R,T均可得出所以可以求出x,y如式5所示:   x=y= (式5)   z和平移系数可由最小二乘法得出。算出结果后我们可以的得出A=(x,y,z)为当前相机坐标系下算出的目标点的三维坐标,因此目标点被定位成功。
  三、基于机器学习算法的Kalman滤波改良设计   卡尔曼滤波器(Kalman Filtering)是一种软件滤波方式,以最小方差估计为算法基础,通过状态方程来描述被估计量的动态变化过程,利用相机上一时刻的状态和当前时刻传感器的测量值来估计当前的状态值[7]。基本卡尔滤波器算法,适用于解决随机线性离散系统的参数估计问题,卡尔曼滤波器在滤波过程中不需要存储历史数据,有效地减少了计算量,大大节省了运算时间。但是基本卡尔曼滤波器会因为实际噪声和其使用的噪声不相符,而导致滤波运算精度低,甚至会出现滤波器发散的现象。为了直观地理解卡尔曼滤波器的应用,可给出其运行流程图如图3所示:   研究者们曾提出自适应卡尔曼滤波器(AKF)来克服这一缺点,其中Sage-Husa自适应滤波器算法因为原理简单,实时性好,受到广泛的关注,但存在着时间窗口难以设置的问题,时间窗口是指测量数据选取的时间长度,若设得过大,算法效率会变得很低,动态性能也变差;若过小,算法中用到的数据就显得过少,估算出的当前相机状态值会发生偏差。所以本文介绍了一种基于机器学习算法SVM(支持向量机)的自适应卡尔曼滤波设计方法。支持向量机(SVM)是一种将结构风险最小化的机器学习算法[8],在解决非线性问题领域有着极大的优势,恰好在基于SVM的新型自适应卡尔曼滤波算法中,正是运用SVM的回归预测分析(SVR),将原本复杂的非线性问题通过构造线性函数转化成线性问题,进而动态的调节卡尔曼滤波器算法中的噪声矩阵参数。巧妙地避开了选取时间窗口的难题,并且这一新型的算法增加了单目里程计的稳定性和准确性。   四、提高单目里程计算法的研究   如何提高单目里程计算法,可以从三个角度进行分析:鲁棒性、实时性和精确度。   1.提高系统的鲁棒性。鲁棒性可以是指,控制系统在参数摄动情况下保持系统某个性能指标保持不变,即抗干扰能力。在视觉里程计中,局部视觉特征能有效的提高系统的鲁棒性,局部视觉特征有尺寸不变特性,并且对复杂的外部环境有很好的检测能力,适用于室外等复杂场地,若与GPS等设备结合使用,实现多传感器信息融合。   2.提高系统的实时性。在特征检测和匹配时,选取有效的少量特征进行检测和匹配,并运用好的数据加以描述,能有效的提高系统的实时性,简而言之,特征的选取要易跟踪,匹配算法要高效可行。可以从两个角度提高算法的实时性:数据处理并行优化和数据降维。数据降维能高效利用有限的计算能力,主成分分析PCA(Principle component analysis)方式已有效的运用于SIFT数据降维中,可以在大大降低计算量的情况下,达到了相同的特征匹配效果。   3.提高系统的精确度。视觉里程计是一个数据迭代累加的过程,但在迭代累加过程中,都会存在误差的累积,如何有效地减少误差的累加,就成了视觉里程计特高精确度的关键。减少误差的累加,应该从选取特征点这一源头开始。由此特征的选取,检测和匹配都要选择合适的方式[9]。特征点的选取应尽量选择静止物体的显著特征,减少特征带来误差和大量的无用外点。运用图的最大团内点检测方法对错误匹配有很强的制约能力。   视觉里程计作为移动机器人自主导航的重要组成部分,已成功运用于海陆空及宇宙探索中,本文主要研究了一种基于机器学习算法的单目里程计算法,仅使用一个摄像机,在不借助于其他传感设备的帮助下,实现机器的自主定位。本课题引入SURF算法对目标进行特征匹配,提高了系统的鲁棒性,同时较SIFT算法提高了运算速度。利用机器学习改善传统的卡曼滤波,有效的抑制了噪声发散。通过上述改善,本课题所研究设计的单目里程计在鲁棒性、实时性和精准性上有了一定的提高。   参考文献:   [1]姜国权,何晓兰,杜尚丰,柯杏.机器视觉在农业机器人自主导航系统中的研究进展[J].农机化研究,2008,(3):9-11.   [2]罗堪.基于复眼模型的视觉里程计方法研究[D].湖南大学,2014.   [3]刘晓利,田媛,童飞,唐舰,隋国荣,陈抱雪.双目立体视觉的光学标定技术[J]光学仪器,2013,(3):11-15.   [4]苏宇,郭宝龙.一种基于曲率尺度空间的图像拼接算法[J].计算机工程与应用2008,(1):39-41.   [5]相阳.基于点特征的图像配准技术研究[D].东北大学,2010.   [6]白廷柱,侯喜报.基于SIFT算子的图像匹配算法研究[J].北京理工大学学报,2013,(6):622-627.   [7]戴洪德,陈明,周绍磊,李娟,彭贤.基于支持向量机的自适应卡尔曼滤波技术研究[J].控制与决策,2008,(8):949-952.   [8]张?泼簦?汪艳,郭天太,洪博,刘焱煜.支持向量回归机的参数择优算法[J].中国科技信息,2015,(13):26-27.   [9]李宇波,朱效洲,卢惠民,张辉.视觉里程计技术综述[J].计算机应用研究,2012,(8):,2810.   A Study on Monocular Mileage based on Machine Learning Algorithm   GU Hai-yan 2,CHEN Ying-jie 1,DING Yao 1   (1.Nanjing University Jinling College,Nanjing,Jiangsu 210089,C2. Jiangsu Police Institute,Nanjing,Jiangsu 210000,China)   Abstract:Visual odometry(VO) through the trajectory calculation,cumulative motion vector,the relative positioning method of current position. Monocular odometer using only a single camera as image acquisition carrier,make information requirements lower,and can identify and locate the feature point accurately,real-time,cost much less,so it has more wide prospect of application. This paper uses SURF algorithm to simultaneously detect and match feature points,using a machine learning algorithm based on adaptive Calman filter (SVM),slow down will appear originally Calman filter in low precision and divergence,to system optimization of monocular odometric accuracy.   Key words:SVSURF;Calman filter
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。单纯用激光做的话,没啥关系,可以参考 &a href=&//link.zhihu.com/?target=http%3A//wiki.ros.org/amcl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&amcl - ROS Wiki&/a&&a href=&//link.zhihu.com/?target=http%3A//wiki.ros.org/move_base& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&move_base - ROS Wiki&/a&&br&用视觉方法做定位,可以参考 &a href=&//link.zhihu.com/?target=http%3A//www.openslam.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenSLAM.org&/a&&br&不过SLAM与Deep Learning结合方向也有,比如Xiao Jianxiong组的工作,用游戏数据进行图像标注,训练CNN,在KITTI数据集上验证了该方法实现自动驾驶的可能性 &a href=&//link.zhihu.com/?target=http%3A//deepdriving.cs.princeton.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DeepDriving&/a&&br&无人机方面 看到苏黎世的发的一篇文章,训练CNN, 让四旋翼在树林里做自动路径规划 &a href=&//link.zhihu.com/?target=http%3A//people.idsia.ch/%7Egiusti/forest/web/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&people.idsia.ch/~giusti&/span&&span class=&invisible&&/forest/web/&/span&&span class=&ellipsis&&&/span&&/a&
单纯用激光做的话,没啥关系,可以参考
用视觉方法做定位,可以参考
不过SLAM与Deep Learning结合方向也有,比如Xiao Jianxiong组的工作,用游戏数据进行图像标注,训练CNN,在KITTI数据集上验证了该方法实…
&figure&&img src=&https://pic1.zhimg.com/v2-3814c26fedb68bda20ff8_b.jpg& data-rawwidth=&720& data-rawheight=&197& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic1.zhimg.com/v2-3814c26fedb68bda20ff8_r.jpg&&&/figure&&p&&u&导航算法:&/u&&br&&b&包括在研究麦克纳姆轮底盘运动模型&/b&麦克纳母轮底盘和全向轮底盘,&/p&
&p&单个麦克纳姆轮受力模型,轮子与45度的辊子&/p&
&p&根据轮子轴心速度,分解出沿辊子方向,与垂直辊子方向忽略不计&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ca548af79d2eff49aa04be4c_b.jpg& data-rawwidth=&2530& data-rawheight=&693& class=&origin_image zh-lightbox-thumb& width=&2530& data-original=&https://pic2.zhimg.com/v2-ca548af79d2eff49aa04be4c_r.jpg&&&/figure&&p&然后通过四个轮子沿辊子方向的速度,合成出机器人的运动状态。&/p&
&p&这里的四个轮子的安装方式也是根据,运动模型来得到的,通过运动模型方程,方程矩阵秩的情况来判断是否可行,这里使用的是8字形。&/p&
&p&正运动模型,可以通过四个轮子的速度,得到底盘的运动状态&/p&
&p&逆运动模型,可以根据所需要的底盘运动状态,得到四个轮子各自的速度&/p&
&p&我这里使用逆运动模型,反解四个电机的速度。&/p&
&p&Speed1=Vx-Vy +(a+b)*W;&/p&
&p&Speed2=Vx+Vy -(a+b)*W;&/p&
&p&Speed3=Vx-Vy -(a+b)*W;&/p&
&p&Speed4=Vx+Vy +(a+b)*W;&/p&
&p&这里也使用了机器人自身坐标系到场地全局坐标系的旋转矩阵的转换。&/p&
&p&&b&之后的控制,使用yaw轴将机器人坐标系到场地坐标系进行转换,无头模式的运动。可以实现流畅的一边运动一边旋转。&br&对机器人运动控制量从全场坐标系下(Vx,Vy,Vz)(人控制是可以的)-&(航向角,和速度,姿态角速度)&br&对于轨迹采用的还是目标点,将目标点与实时位置计算得到航向角,航向角一直指向目标点运动,&br&当计算,实时计算与目标点之间的距离,这里的距离不是零。设置为零或者固定值,会摇摆不停&/b&出现这个的原因:&/p&
&p&1:会是PID调试问题&/p&
&p&首先打印出底盘四个轮子的速度,查看是由于平动引起的还是转动引起的,三个位置式的pid,都会分解到四个电机上,有一个没调好&/p&
&p&PID有没有超调(积分饱和)现象会抖&/p&
&p&2:&/p&
&p&航向角反应的是定位是否正确(排除是否是定位问题引起的误差),特别坑&/p&
&p&3:到达阈值设置是否合适。&br&&b&当前速度*传感器最小捕获的时间+目前的位置+阈值&距离值(解决了点密度问题与速度和准确度的权衡,&/b&之前在比赛中都是指定路径不断调试提速,直接使用目标点与实时点之间的直线距离与阈值进行对比来确定是否应该切换到下一个点,阈值不适应与所有速度,必须根据速度更改,才可以获得最好的效果。&/p&
&p&因为,如果阈值大而速度慢,则会导致轨迹严重失真。&/p&
如果阈值小而速度快,则会导致机器人卡在一个点上摇摆不定。速度过冲。&/p&
必须根据速度来调试合适的阈值,才可以既保证速度,又保证轨迹精确度。&/p&
&p&这个方法,调试的最佳阈值,适应于大部分速度范围,可以保证同一条轨迹上,最佳阈值,不同速度移动。&/p&
&p&&b&以牺牲STM32大量的运算换取运动轨迹的精确与速度,这里会考虑进一步优化)则判断机器人到达目标点,更新下一目标点。实现沿指定路径运动。&br&无需考虑点密度,依然可以使轨迹和运动流畅。在要求精确的点上,使用三个位置式的PID&/b&&/p&
&p&应用于线性时不变系统:&/p&
&p&增量式PID,对于底盘四个电机使用,在计算频率相同的情况下,不能死锁,&/p&
&p&位置式PID,对于机器人运动到对位置要求精确的动作执行点处使用。&/p&
&p&如果机器人加入PID后抖动,先考虑硬件,传感器观测的数据是不是准确,如果传感器数据波动都很大,抖动是无法通过参数整定解决的。&/p&
&p&之后考虑闭环得到的数据是否是有滞后,如果滞后也会存在这个问题。&/p&
&p&没有波动和数据滞后,就要考虑PID参数有没有整定好,是不是K大,I小等问题。&/p&
&p&P:快,但是快了(Kp越大),越容易产生振荡;&/p&
&p&改进办法:算法上设置合理参数;&/p&
&p&I:积分环节,虽然可以消除静态误差,但也会降低响应速度,增加大超调;&/p&
&p&改进办法(偏理论算法,书上都有):(1).积分分离;(2).抗积分饱和;(3).变速积分.;&/p&
&p&D:微分环节,对输入信号的噪声很敏感,很容易受到干扰;&/p&
&p&改进办法:(1)不完全微分PID控制算法;(2)微分先行PID控制算法;&/p&
&p&&b&进行调节。&br&对于机器人不同路线采用,分段进行梯形加减速控制(最小偏差法插补速度&/b&(使用最小偏差法插补速度),将机器人的运动,变成恒加速,匀速,恒减速过程。保证可以运动的最大加速度运动&/p&
&p&实际上是对速度与时间的图像进行插补近似。&/p&
&p&根据V=at;&/p&
&p&在给定最高速度Vm的情况下,可以算出具体的到达时间Tm = Vm/a,在从坐标点(0,0)开始画轨迹,到达终点(Tm,Vm),所形成的轨迹就是一直线段。&/p&
&p&一般的实现方法是时间t从0开始递增,在每个定时器内的T内使用V=at计算。这个方法是可行的,但是运算量太大,还要涉及到浮点乘除,对于运动控制来说运算时间越短越好,响应越快越好。所以在软件的实现过程中,尽量避免浮点运算,提高运算效率。由此可以复制运动控制中直线运动插补算法到这个加速阶段,即从点(0,0)运动到(Tm,Vm),利用插补算法,实现加减速。这里采用最小偏差法,来实现,如果是加速过程的话:看成是第一象限,&/p&
&p&输入最高速度Vm,加速度a,每一步给进量d。&/p&
&p&设&b&偏差函数为f=Vm-2Tm&/b&,如果f&0,v给进一步,f=f-2Tm,&/p&
如果f&=0,v与t都给进一步,f=f+2*Vm-2*Tm&/p&
&p&直到v=Vm为止。&/p&
&p&偏差函数不同,插补后加速的轨迹约接近,实测与实时计算效果相同,运算量大幅减少。&/p&
&p&&b&)使用的数控机床里的插补法来进行加减速。&/b&&br&&b&(这里是导航系统框架的第一层)&/b&&/p&
&p&&br&&b&(A*属于全局规划,传感器属于局部规划,防止因局部定位误差而碰撞)&/b&&/p&&p&&b&&figure&&img src=&https://pic1.zhimg.com/v2-3feff5a3b338c_b.jpg& data-rawwidth=&716& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&716& data-original=&https://pic1.zhimg.com/v2-3feff5a3b338c_r.jpg&&&/figure&根据A*算法使用C++写了上位机,在栅格化的地图中,根据全局信息。只需要输入目标点,就可以自动生成躲避障碍物的轨迹。并通过串口将路径信息传输给机器人。&/b&&/p&
&p&&b&A*&/b&&b&全局路径规划:&br&人工势场包括引力场合斥力场,其中目标点对物体产生引力,引导物体朝向其运动(这一点有点类似于A*算法中的启发函数h)。障碍物对物体产生斥力,避免物体与之发生碰撞。物体在路径上每一点所受的合力等于这一点所有斥力和引力的和。这里的关键是如何构建引力场和斥力场。&/b&&/p&
&p&&b&超声波传感器反应控制局部规划:类似于人工势场法,但是引力场没有,依靠A*的导航完成&/b&&/p&
&p&&b&自动避障(机器人四个方向安装)(用于弥补A*算法8个方向的问题):多传感器+人工势场法=机器人避障&/b&&/p&
导航算法: 包括在研究麦克纳姆轮底盘运动模型麦克纳母轮底盘和全向轮底盘,
单个麦克纳姆轮受力模型,轮子与45度的辊子
根据轮子轴心速度,分解出沿辊子方向,与垂直辊子方向忽略不计然后通过四个轮子沿辊子方向的速度,合成出机器人的运动状态。
&figure&&img src=&https://pic3.zhimg.com/v2-372e22b74fa7fed86e9eef4_b.jpg& data-rawwidth=&441& data-rawheight=&534& class=&origin_image zh-lightbox-thumb& width=&441& data-original=&https://pic3.zhimg.com/v2-372e22b74fa7fed86e9eef4_r.jpg&&&/figure&&p&&b&对于电机的控制,我觉得应该有一个职业来专门的研究,&/b&&/p&&br&&br&&br&&p&&b&梯形波控制:&br&主要有刷和无刷电机的控制,无刷电机。使用IR2136来驱动,硬件上使用6个NMOS组成的H桥,STM32有TIM1和TIM8高级定时器,为无刷电机设计的,输出互补波及死区插入&/b&死区:&/p&
&p&每个上下桥臂MOS不能同时导通的,导通就意味着短路。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-43b4ce2c8caeef08d5f42_b.jpg& data-rawwidth=&441& data-rawheight=&534& class=&origin_image zh-lightbox-thumb& width=&441& data-original=&https://pic3.zhimg.com/v2-43b4ce2c8caeef08d5f42_r.jpg&&&/figure&&p&但是功率大的MOS往往栅极电容会大,电容充电需要时间,所以MOS管的打开与关闭也存在一定的延时。除了减小栅极电阻和增大栅极电流来减小这个充电时间之外,还需要插入死区防止在MOS管状态切换的时候,同侧MOS导通。&/p&
&p&如果没有插入死区,无刷电机每旋转一圈,MOS需要切换6种状态,每切换一次,都可能会面临一次短路的危险。&/p&
&p&PWM波的频率也需要按照电机绕组的LR计算。F》R/2πL&/p&
&p&&b&和刹车。死区对于无刷电机来说非常关键。&br&采用的是SWITCH CASE,来进行换向,Switch的霍尔的状态,Case应该导通的MOS,就是到达换向位置即换向,速度由占空比决定,加入磁编码器,使用PID闭环控制起来简单稳定。&br&
SPWM控制:PWM波脉冲宽度时间按照正弦规律排列,可以输出三项相位相差120°的正弦波&br&&/b&SVPWM波控制:PWM波的电压空间矢量图是一个正六边形,每次旋转60度。而磁链空间矢量可以看做磁链矢量端点运动的轨迹,磁链轨迹也是一个正六边形。&/p&
&p&无PID情况下,大扭矩 低速不流畅,噪声大。或者根本无法输出大扭矩&/p&
&p&SPWM核心如何生成一个可以调压调频的三项对称正弦电源,电压空间矢量图是一个圆形,磁链轨迹也是一个圆形。通过正弦波的幅值(扭矩)正弦波的频率从而控制电机的(速度)。&/p&
&p&如何使用PWM开关逼近圆形旋转磁场。&/p&
&p&使用的是,2个寄存器,使用TIM4中断改变TIM1CCR1,CCR2,CCR3,的值控制电机扭矩&/p&
&p&设置TIM4中断频率控制电机转速。&/p&
&p&SVPWM是将逆变器和电机看成一个整体,用8个基本电压矢量和成期望的电压矢量。电压利用率比SPWM高15%,使其磁轨迹接近一个圆形,可以实现恒定力矩控制,通过插入零矢量点实现对于转速的控制,在每个扇区再分成若干个对应于时间T的最小区间。插入若干个线性组合的新电压的控制矢量,以获得优于正六边形的的多边形,从而逼近圆形旋转磁场。&/p&
&figure&&img src=&https://pic4.zhimg.com/v2-6266c37cdfbf9_b.jpg& data-rawwidth=&297& data-rawheight=&208& class=&content_image& width=&297&&&/figure&&p&首先有六个扇区,和8个矢量,使用TIM1CCER这个寄存器,来输出这8个矢量,在每个扇区中,使用0矢量1矢量还有扇区两边的矢量来合成期望的电压矢量,(矢量的方向首先改变不了,通过对插入时间的控制,来改变大小)。&/p&
&p&来输出矢量,从而对每一扇区里插入四个状态。来实现转速控制,扭矩不变。&/p&
对于电机的控制,我觉得应该有一个职业来专门的研究, 梯形波控制: 主要有刷和无刷电机的控制,无刷电机。使用IR2136来驱动,硬件上使用6个NMOS组成的H桥,STM32有TIM1和TIM8高级定时器,为无刷电机设计的,输出互补波及死区插入死区:
每个上下桥臂MOS不…
&figure&&img src=&https://pic1.zhimg.com/v2-861d97adda920bdbecad3d018f31dcee_b.jpg& data-rawwidth=&406& data-rawheight=&303& class=&content_image& width=&406&&&/figure&关于机器人定位,应该是一个老生常谈的问题,我们随便在网络上搜索一下,就会有很多相关的文章来解答。&p&这里我会介绍和分析一下,在我参加Robocon比赛中常用的机器人定位技术。将这个技术首先用于Robocon比赛中的是西安交通大学,将导弹导航的技术用在这里,预示着比赛将从手动变成自动的方式,从而进入风驰电掣的陀螺时代。&/p&&h2&&b&&u&常用定位技术及其优缺点:&/u&&/b&&/h2&&p&主流的定位技术,目前常用的定位方式有:GPS定位、基站定位、wifi定位、IP定位、RFID/二维码等标签识别定位、蓝牙定位、声波定位、场景识别定位,惯性导航,SLAM,技术上可以采取以下一种或多种混合。&/p&&h2&&u&&b&惯性导航误原理:&/b&&/u&&/h2&&p&&b&两个相互垂直的全向轮码盘+陀螺仪组成的惯性导航,单独的两个全向轮码盘用来对沿轮子两个方向进行测速,在仅仅平动过程可以测量出机器人左标系下的Vx,Vy。由于存在着机器人的转动,为保证定位准确,使用陀螺仪用于获得机器人运动中的角位移。通过乘以旋转矩阵(&/b&用于坐标系转换这里使用过两次,在惯性导航定位的地方使用过一次,在控制机器人实现无头模式运动的时候,使用一次。将向量(x,y)逆时针转α,将向量前面乘旋转矩阵,&/p&&p&{X}
{x}&/p&&p&|Y| =
*|y|&/p&&p&{Z}
{z}&/p&&p&其实导航与定位的关键就是在于坐标系的精确转换。&b&)&/b&&b&完成编码器速度值从机器人自身坐标系到场地全局坐标系的转换,获得机器人在全场坐标系下任意运动都可以得到沿x轴与y轴的速度。通过对速度的积分获得基于场地坐标系的机器人位置信息(X,Y),Z由陀螺仪获得。&/b&坐标更新频率一般为10ms/0.01S新一次。&/p&&figure&&img src=&http://pic3.zhimg.com/v2-a570c90d89b11fc07ff4ff55489ca66a_b.jpg& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&http://pic3.zhimg.com/v2-a570c90d89b11fc07ff4ff55489ca66a_r.jpg&&&/figure&&h2&&b&&u&惯性导航误差分析及精度提高:&/u&&/b&&/h2&&b&编码器有误差我采用滑动均值滤波处理&/b&取连续的N个采样值看成一个循环队列,队列的长度固定为N,每次采集一个新数据放入队尾,并扔掉原来队首的一个数据(的数据结构是队列,先进先出),滤波器对于这N个值进行算数平均值。优点:对于高频震荡的误差有很好的抑制作用,平滑度高。这里的速度信号,本来就是低频的连续信号,所以非常适用。缺点:灵敏度低,对于偶然产生的干扰抑制作用差。&b&陀螺仪&/b&这里使用的是串口陀螺仪,进行了三轴加速度与三轴陀螺仪+电子罗盘的的数据融合,并且有卡尔曼滤波。Pitch 和 roll ,&b&电子罗盘解决yaw陀螺仪的漂移,由温度变化引起,所以需要对于温度进行控制。&/b&&p&&b&的漂移误差使用卡尔曼滤波处理,优化:根据安装角度与位置的不同,会有安装误差导致定位精度受很大影响。采用根据数学模型反算的方法,1:就是沿全局坐标系,X轴无旋转情况下拖动机器人,10M。将位置带回到方程中,就可以得到L1,L2,这个是定位模型中两个全向轮距离机器人旋转中心的距离。&/b&&br&如果在机器人不旋转的情况下,两个垂直的全向轮码盘可以通过速度的积分得到位移从而得到位置,但是安装时不可能保证一定是平行于全局坐标的X轴Y轴,这里会有一个微小的角度α,消除误差的方法就是将X与Y轴速度,使机器人自身坐标系,实现角度为α的转转。机器人在移动过程中可能也伴随着旋转,陀螺仪可以记录这个旋转过的角度,同样需要进行机器人坐标系的旋转。而全向轮码盘也不可能安装在机器人的运动轴心上,需要距离运动中心L1与L2的距离,这里的距离也需要补偿掉。所以这种惯性导航的安装位置,直接决定了,α,L1,L2,这三个量对惯性导航的定位精度影响特别大。所以除了解决码盘测速误差,陀螺仪漂移误差之外,对这三个量的测量也至关重要,测量+补偿的方式,既不准确又耗费时间。采用模型反算方式,既简单高效又准确。&b&2:在运动轴心,打一个孔,让机器人,绕运动轴心,旋转5周回到初始姿态,同样就可以反算测量编码器与运动轴心的夹角,夹角用于旋转矩阵映射坐标系。这三个值的精度,是使用量角器与直尺远远无法达到的。其实之前在比赛中,就遇到了定位的问题,机器人跑的又快又准是一个无止境的问题,而我在专业书上了解到了UWB这种通信领域的可以应用于精确定位新技术,通过查阅很多资料,我决定使用它来定位。&/b&&/p&&h2&&b&&u&UWB&/u&&/b&&b&&u&定位原理:&/u&&/b&&/h2&&p&使用的是DecaWave公司生产的,基于UWB技术,的DW1000定位芯片。&br&&b&UWB通过极短脉冲通信,无需载波,通信持续时间为纳秒级别,使用UWB定位需要获得与位置相关的变量,建立定位数学模型。这里测距使用的是TWR双向测距,首先标签记录自己的发送时刻并发送一个测距指令,基站收到后,记录收到测距指令的时刻,然后再记录发送时刻,发送包含自己接收与发送时间差T2还有自己地址信息的响应消息。标签接收记录接受消息的时刻,计算自己发送接收时间差T1&br&
TOF=(T1-T2)/2,Distance=TOF*C。&/b&&/p&&figure&&img src=&http://pic1.zhimg.com/v2-090f680fe10d089b4eb4_b.jpg& data-rawwidth=&3264& data-rawheight=&2448& class=&origin_image zh-lightbox-thumb& width=&3264& data-original=&http://pic1.zhimg.com/v2-090f680fe10d089b4eb4_r.jpg&&&/figure&&figure&&img src=&http://pic4.zhimg.com/v2-1f2b4e7cddb515fe730495df_b.jpg& data-rawwidth=&406& data-rawheight=&303& class=&content_image& width=&406&&&/figure&&br&&p&对于官方提供的芯片例程,我们需要deca_mutex.c,里面主要是DW1000 设备驱动程序实质上是提供了一系列底层的功能接口,应用层可以调用实现更丰富的功能,有了这些接口,开发人员就不用再关注DW1000 收发方面详细信息。我们只是需要编写SPI 硬件接口程序,然后应用层调用设备驱动程序轻松实现测距功能。单片机通过SPI对芯片进行访问轮询状态寄存器,处理任何发生的事件先写地址,数据长度,数据值。官方提供了例程与API编程接口是一个半双工的设备,时钟到达高低电平变换的时间不一致,这样会引起误差。&/p&&p&具体操作:使用了SS-TWR(双向测距)没有使用SDS-TWR(双边双向测距)&/p&&p&原因如下:&/p&&p&1:如果是标签发起测距,那么最终距离值在基站内,需要汇聚到标签,频率低。&/p&&p&2:如果是基站发起,基站需要不停地检索标签,功耗增加。通过中断先向STM32反馈发送和接收回应。&/p&&p&定位帧遵循IEEE802.15.4,低速无线个人局域网物理层和媒体层接入控制协议&/p&&p&2字节 frame control(框架控制)&/p&&p&1字节 序列号 &/p&&p&2字节PAN ID固定 &/p&&p&2字节 对方ID&/p&&p&2字节 自己ID &/p&&p&可变字节的 测距信息 根据不同阶段改变设置&/p&&p&(1)测距请求信息 1字节 功能码+1字节 范围号&/p&&p&(2)测距回应信息 1字节 功能码+2字节睡眠修正+4字节上一阶段飞行时间+1字节范围号&/p&&p&(3)测距结束信息1字节 功能码+1字节范围号+5字节请求发送时间&/p&&p&帧结尾由校验位组成,由芯片自行完成&/p&&p&&b&*以上截取至DW1000官方手册&/b&&/p&&h2&&b&&u&UWB&/u&&/b&&b&&u&误差及精度提高:&/u&&/b&&/h2&&b&它的误差主要在于时钟频偏,40ppm,信息延时1ns相当于30cm,总体来说原始数据,误差在±5-8cm左右。对原始数据进行滑动均值滤波(&/b&取连续的N个采样值看成一个循环队列,队列的长度固定为N,每次采集一个新数据放入队尾,并扔掉原来队首的一个数据(的数据结构是队列,先进先出),滤波器对于这N个值进行算数平均值。优点:对于高频震荡的误差有很好的抑制作用,平滑度高。这里的速度信号,本来就是低频的连续信号,所以非常适用。缺点:灵敏度低,对于偶然产生的干扰抑制作用差。)&b&和卡尔曼滤波&/b&主要是五个方程:&p&建模比较关键&/p&&p&使用上一次的最优估计与状态控制量进行预测&/p&&p&更新预测误差的协方差&/p&&p&计算卡尔曼增益&/p&&p&使用测量量进行校正更新获得最优估计&/p&&p&更新协方差&/p&&p&在算法的计算处理过程中每一次都在不停的修正K和测量误差,相当于动态自适应算法了,主要就是调好Q、R。Q是预测值误差的协方差R是测量值误差的协方差&b&,距离数据波形平滑很多。平面定位至少需要不在同一条直线上的三个基站,定位标签通过依次与三个基站进行轮询,
通过三边定位算法也就是三个基站圆的交点定位&/b&三边定位原理:根据信号时间的到达距离画个圆,三个以上圆的交汇处,就是标签的大概位置 &/p&&p&设标签坐标(X,Y),三基站坐标已知(X1,Y1),(X2,Y2),(X3,Y3),&/p&&p&则A与标签的距离为d1
B与标签的距离为d2
C与标签的距离为d3。由简单的勾股定理建立方程从而联立方程组:&/p&&p&(X-X1) *(X-X1) +(Y-Y1) *(Y-Y1)=d1*d1&/p&&p&(X-X2)
*(X-X2) +(Y-Y2) *(Y-Y2)=d2*d2&/p&&p&(X-X3) *(X-X3) +(Y-Y3) *(Y-Y3)=d3*d3&/p&&p&解方程获得位置坐标&/p&&p&&b&获得位置信息,三个方程两个位置数可以轻易解出标签位置(X,Y)。只使用参考了官方测距历程&br&(因为使用电池供电,有一次,有一个标签,没电了,但是还是有数据,而且还在变化,所以加了)有一个数据没得到,就放弃之前的数据,重新开始。这样保证三个距离值是同一时刻的。&br&安装矫正:()还有三基站与标签是否在与地面平行的同一水平面(安装矫正),(这个问题很类似于惯性导航的安装误差)位置放置的是否精准(直尺测量)。&/b&坐标更新频率为5ms更新一次(1s200次)。&/p&&h2&&u&&b&使用卡尔曼进行定位数据融合:&/b&&/u&&/h2&&b&惯性导航的位置信息是靠速度积分而来的,会有累积误差。&/b&(如果上一个点的误差如果是1cm,那下一个点的误差就会绝对大于1cm,而且越来越大,因为积分就是求和,将误差也求了和)&b&而&/b&UWB&b&定位虽然没有惯性导航精确,但是误差稳定。使用&/b&UWB&b&的数据对于惯性导航的误差进行修正。对于定位数据有置信区间(&/b&0~10,10~&b&无穷),在一定范围内各自的置信区间不同,由于&/b&UWB&b&和&/b&GPS&b&定位类似,但是相比而言优点更多,关于GPS和惯性导航的数据融合,四旋翼无人机上使用的比较多,用到了卡尔曼进行数据融合。&/b&&p&&b&根据卡尔曼&/b&5&b&个公式:&/b&&br&&b&第一步&/b&, &b&前一时刻位置最优估计&/b&+&b&惯性导航的位移值&/b&ds&b&(状态的控制量,这个误差比较小)得到此时的预测值。&/b&&br&&b&第二步,计算(预测值与预测值均值之差)误差的协方差。&/b&&br&&b&第三步,计算卡尔曼增益。&/b&&br&&b&第四步,使用&/b&UWB&b&数据作为观测值来修正估计,得到最优估计。&/b&&br&&b&第五步,更新误差协方差,完成递归(使用栈)。&/b&&br&&b&这里的&/b&Q &b&(测量噪声)的协方差(需要调试),&/b&R&b&是&/b&UWB&b&静态时输出数据计算的测量误差(测量噪声)的协方差(可以测量出大概值)通过串口示波器观察惯性导航数据与融合之后的数据,长时间不会有非常大的漂移,在&/b&UWB&b&和惯性导航之间。&/b&&/p&&p&参考文献:&/p&&p&【1】机械设计与制造
2014年12月 12期《全向轮机器人路径规划与导航系统设计》李文学&/p&&p&【2】中国高新技术企业
2014年 16期
《浅谈全向轮机器人三位一体定位方法》
唐松&/p&&p&【3】《物联网与无线传感器网络》
电子工业出版社
刘伟荣 何云&/p&
关于机器人定位,应该是一个老生常谈的问题,我们随便在网络上搜索一下,就会有很多相关的文章来解答。这里我会介绍和分析一下,在我参加Robocon比赛中常用的机器人定位技术。将这个技术首先用于Robocon比赛中的是西安交通大学,将导弹导航的技术用在这里,…
也是初学者 说些比较基础的 欢迎指正!&br&&br&SLAM(Simultaneous localization and mapping),我们要达到的目的就是估计机器人(传感器-比如相机)的位置轨迹,然后创建地图。locating和map两者互相依赖,密不可分。然而我们&b&已知&/b&的信息一个是&b&observation&/b&,即传感器收集到的信息(现在研究的多的一般是基于RGB-D相机的,比如微软Kinect,因为不仅能收集到深度和颜色信息,而且比以前laser scanner等轻巧便宜);还有一个就是我们施加给机器人的&b&control commands&/b&.我们要解决的就是通过这两个已知,去估计位置和地图这样一个问题。表达成概率问题如下:&br&&figure&&img src=&https://pic3.zhimg.com/dcfed9972fae4abc118b8a_b.jpg& data-rawwidth=&565& data-rawheight=&151& class=&origin_image zh-lightbox-thumb& width=&565& data-original=&https://pic3.zhimg.com/dcfed9972fae4abc118b8a_r.jpg&&&/figure&Map形式的有好多种。最传统就是去重建一些landmark,用Extend Kalman滤波器(&b&EKF&/b&)去估计landmarks以及机器人的位置,是第一个SLAM的有效的解决方案。其他的map representation比如&b&occupancy grids&/b&也比较常见,是把要重建的环境表达成网格的形式,通过比如Bayes滤波器family中的某种可以计算每个小格被占用的概率,来还原地图。在S. Thrun. 的《Robotic mapping: A survey》中有详细的说明,如下表列举了一些主要的算法以及相关特性。这个在2002年就发表了,也算比较老了,但许多描述都是SLAM的重要基础。&br&&figure&&img src=&https://pic1.zhimg.com/dee7ffe2e0b4e1cabd973ec_b.jpg& data-rawwidth=&937& data-rawheight=&597& class=&origin_image zh-lightbox-thumb& width=&937& data-original=&https://pic1.zhimg.com/dee7ffe2e0b4e1cabd973ec_r.jpg&&&/figure&SLAM一个重要的首先要解决的问题是registration的问题,我的理解是把不同角度采集到的数据整合(alignment)到一个坐标系中。针对两组数据(比如两幅不同角度采集的画面),可以点对点的进行匹配,寻找他们之间的transformation从而进行数据alignment并进行对sensor的定位,一个重要的算法是&b&ICP(&/b&&b&Iterative closest point &/b&&b&)&/b&。&br&&figure&&img src=&https://pic3.zhimg.com/91de5d7be84e8f366f3aa_b.jpg& data-rawwidth=&637& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&https://pic3.zhimg.com/91de5d7be84e8f366f3aa_r.jpg&&&/figure&(Example: Aligning Two 3D Maps)&br&&br&从registration的角度,很多研究有把SLAM的问题分成dense和feature-based两种(如下图),前者(右图)多是对密集的点云(point cloud)通过ICP来进行点对点alignment ,这种做法比较准确,把所有的数据都联合起来就可以得到地图与sensor的轨迹。但因为纯是点对点运算,可能会丢失一些画面中属于画面特征的重要信息。所以feature-based也被广为应用,我们提取出SIFT,SURF等图像特征,再对这些特征进行alignment,算法比如RANSAC,可以实现对特征的联合。但针对特征不明显的环境,比如深夜环境,特征的办法就没有dense的办法有效了。两种方法都可以实现对数据的registration,也有一些项目是结合两种方法的。&br&&br&&figure&&img src=&https://pic1.zhimg.com/4adbefe2afa4_b.jpg& data-rawwidth=&500& data-rawheight=&380& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/4adbefe2afa4_r.jpg&&&/figure&&br&(来源 &a href=&//link.zhihu.com/?target=http%3A//vision.in.tum.de/research/vslam& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&vision.in.tum.de/resear&/span&&span class=&invisible&&ch/vslam&/span&&span class=&ellipsis&&&/span&&/a&)&br&&br&除了registration,SLAM(主要是graph-based SLAM)还有一个重要的待解决问题是Loop Closure Detection(闭环检测?),它是检测新的观察到的环境来确定自己是不是到了一个曾经到过的地点, 以消除localization的不确定性。因为如果一直是通过对不同角度采集到的不同画面(不同帧)一步一步的进行联合来估计sensor的位置的话,这个定位误差会累积,多以loop closure意义重大,这里不展开了。&br&&br&接下来我们需要对地图的整体构建进行optimization,这是关键一步。我们要解决将特征点re-project回3D空间时的误差最小化问题,这就是bundle adjustment(BA)问题,用到least square等算法,最小化误差。g2o便是一个解决SLAM或者BA中这个误差最小化问题的框架,原话是:an open-source C++ framework for optimizing graph-based nonlinear error functions。另外还有TORO,是通过梯度下降实现graph中constraint带来的误差从而达到优化的有效算法。&br&&br&最终我们要的3D地图,有颜色,有表面,可能质地也可以展现出来。这是map representation的问题,相关的方法有Surfel,Volumetric Representation(代表KinectFusion),Mesh,等等...&br&&br&--------------------------------------------------------------------------------------------------------------------------------&br&以上是第一版,感谢朋友们的支持和赞!因为某些原因,我没有再继续做SLAM,所以了解的东西都不是很深。因此恳请私信的朋友们原谅我不能逐一回答专业问题。
也是初学者 说些比较基础的 欢迎指正! SLAM(Simultaneous localization and mapping),我们要达到的目的就是估计机器人(传感器-比如相机)的位置轨迹,然后创建地图。locating和map两者互相依赖,密不可分。然而我们已知的信息一个是observation,即传感…
已有帐号?
无法登录?
社交帐号登录
2633 人关注
167 条内容
1769 人关注
391 条内容
526 条内容
1194 人关注
219 条内容
441 人关注
205 条内容

我要回帖

更多关于 机器人机器学习 的文章

 

随机推荐