字号:    

关于机器人视觉的避障处理算法实现(机器人演示视频)

许多机器人在实现其避障处理算法的过程中都加入双视频以让机器人做出立体3维图像处理,或者需要激光测距仪器等设备做路径规划辅助等。最近本人在做水下避障的算法过程中,突发奇想在实验室首先建立一个类似机器人的平台,以用来测试水下船体避障的能力,收到意外的惊喜,首先,描述一下本人建造的机器人以及软件结构。

1。 硬件结构:此机器人定义名为:Landbot,硬件结构为1个16频道的侍服控制板(最多可连接16个侍服),两个侍服控制器和两个无刷侍服电机。其控制部分为一个mini主板,cpu,80G硬盘和512M内存,12伏直流电池(两个6V电池组成)当然还要4个轮子,前后两个,其视觉处理部分为单个视频。

2。 软件结构:无法用图形绘制出,只能给出相应的说明,首先,操作系统选择大家非常熟悉的windows xp,图象处理软件为python 和matlab, 将python封装为java的一个activeX, 然后用matlab里的activex 控制来调用,其相关调用语句下面给出。 python和matlab的通讯协议是基于tcp/ip,也就是说将python执行的实时数字图像处理结构传送给matlab,在matlab做出相应的电机位置控制再传给侍服控制板,由侍服控制板转换给PMM信号再传送给侍服控制器,最后侍服控制器转换信号为电流,控制无刷侍服电机实现机器人避障。

3。图像处理结构:图像处理部分原理非常简单,没有想象中的一堆数学模型,由于办公室环境复杂,地面颜色主要为淡黄色,其中还有墙红色,桌子的深黄色,和椅子黑色以及个人物品如书包等等一系列复杂图像组成,所以给图像处理带来了很大的困难,首先,在算法过程中用亮度算法将地面颜色滤去,使机器人看不到地面颜色(坐标1),然后在这个基础上使用BLOB(水滴?)工具将成像中潜在的物体识别到(坐标2),当然这过程需要适当的过滤值,不能太大也不能太小,太大则失去许多应该被侦测到的物体,太小则许多小的物体被侦测到以至于机器人不能做出很好的路径决定。在此坐标2基础上,在图像中插入一个x方向的均分线(线1),然后在潜在被侦测的物体上边缘侦测,这样的边缘又会形成一条直线(线2),在这个直线需要做很多试验,比如,机器人视觉中目前侦测到前面是墙体,那这个边缘线必须要落在墙体和地面的交接处也就是墙沿处,当机器人里墙体较远时,线2自然会落在机器成像中的上方,也就是在线1的上面,如果较近,那线2自然会在线1的下方,用这样的比较,我们就可以做出机器人的速度决定,以及机器人是否要碰到潜在物体等,那机器人方向该怎么决定呢?好办,因为线2 不可能一直都是水平90度的,如果一旦有一定的角度,事实上99%都存在一定的角度,将这个角度参与到计算中不是就可以做出相应的方向决定了吗?比如,在线2 落在线1之下,角度小于90度时,那方向自然应该向左转,否则就会碰到对面物体,方向大于90度时候,那就应该右转,等于0度时候呢?那就倒退从新作决定.如果侦测不到物体呢?比如放一张白纸到视频前面,哪机器人什么物体都侦测不到,机器人此时没有光线存在,哪应该做出后退的决定以保护自己。

说了这么多,可能会问,matlab用来做什么的阿?因为在电机控制中,matlab有着不可替代的优势,尤其提供GUI功能,用gui设计一个操作界面不是很好吗?实际上,matlab起的功能是用过tcp/ip协议将图像处理的决定接受到,这些决定都是由0和1组成,除了角度,比如,此时左转时候,那turnleft=1,角度是70度,matab通过这个数据,计算相应的电机速度传给电机控制器,如此一来,机器人视觉就应该大功告成了。是不是很简单?没有复杂的数学公式以及头疼的图像处理算法让你事半功倍!

本项目由挪威一家公司赞助,全程时间只花了1个月不到的时间。此系统有较强的robust能力,如有疑惑或者更好的建议,请联系我哦!

 以下为视频地址:

http://v.blog.sohu.com/fo/v4/974909

http://v.blog.sohu.com/fo/v4/974911

http://v.blog.sohu.com/fo/v4/974915

分类:默认分类
?次阅读
 2008-03-04 02:15