祝敏航,李晓明,范泽冰,马 超,王金龙,蔡 迪
(浙江理工大学,a.启新学院;b.机械电子工程研究所,浙江 杭州 310018)
双足机器人是一个多自由度、运动链复杂的动力学系统,是机器人研究领域的主要方向之一,其核心技术包括了计算机技术、机器人学、传感技术、人工智能等高新技术。
与工业机器人相比,类人型机器人的研究水平,远没有达到实际应用的程度。另一方面,嵌入式技术的迅猛发展,使得其得以应用于机器人领域。嵌入式微处理器性能的提升,满足了机器人系统较高的使用要求,使得智能机器人的实现更具可行性。
本文采用SAMSUNG公司的S3C2400A微处理器,开发了双足机器人的控制硬件电路及软件系统,实现了机器人对特定物体(本文中为黄色圆球,黑色背景)的目标识别,以及根据识别结果进行趋于目标的双足行走。
本文研究的是具有6个自由度的双足机器人,如图1、图2所示。其中包括2个髋关节、2个膝关节和2个踝关节:髋关节与膝关节各有1个自由度,负责前向运动;踝关节有1个自由度,负责侧向运动;6个关节均为转动副。
图1 双足机器人模型
图2 双足机器人实物
本文采用SAMSUNG公司的S3C2440A微处理器和芯片为OV9650的CMOS摄像头,完成了对特定目标的识别;采用32路舵机控制器和Tower Pro公司型号为MG945和MG995两款舵机,完成了双足机器人的转弯和直线行走。其硬件结构如图3所示。
图3 机器人硬件框图
S3C2440A微处理器内部集成了ARM公司ARM920T处理器核,主频达到400 MHz,最高可达533 MHz,满足了系统在图像处理方面的要求。同时,本系统配置了256M Nand Flash和在板64M 32位SDRAM,以满足图像数据的存储要求。
32路舵机控制器,是双足机器人6路舵机协调动作的软硬件结合系统,主要由上位机软件和伺服舵机驱动控制器组成,不但能实现位置控制和速度控制,还具有时间延时断点发送指令的功能。
通过S3C2440A和32路舵机控制器的串口通信,即可实现6路伺服舵机的单独控制或同时控制,完成双足机器人各关节的协调配合。
嵌入式linux系统,为开放源码的操作系统,具有较高的可移植性和方便的内核配置等特性。本文使用的linux系统内核版本为Linux2.6.32.2,交叉编译器版本为arm-linux-gcc-4.4.3。通过交叉编译器编译,即可将宿主机中的源代码编译成可在目标板中运行的可执行文件。内核移植时已烧写进了CMOS摄像头驱动程序,故内核配置只需选择相应选项即可:
(1)在Device Drivers菜单中,选择Multimedia support进入;
(2)选择 ov9650 on the S3C2440 driver。
双足机器人系统的软件实现如图4所示。
图4 软件工作流程
其中主要步骤说明如下:
(1)图像采集。CMOS摄像头的设备文件名位于Linux系统下的/dev/camera目录,利用CMOS摄像头动驱程序提供的I/O操作接口函数,来打开摄像头设备:
(2)图像数据的转换及灰度化。本文使用的摄像头采集的图片格式为16位的RGB格式,即单个像素的位数为16,其中B为5位,G为6位,R为5位(按内存中排列顺序)。由于灰度化时要用到24位的RGB格式,所以需要进行相应转换。按照灰度化公式
将图像转换为灰度图像。
具体可通过以下代码实现:
其中,Addr为图像数据的首地址,LineLen是图像数据每行的字节长度。
(3)边缘检测与二值化。边缘检测的算子有Roberts算子、Sobel算子、Prewitt算子、Krisch 算子等,本文采用Sobel算子进行边缘检测,具体算法如下:
Sobel算子是一种利用局部差分寻找边缘的算子,它考虑图像3×3领域的处理。该算子由2个卷积核组成,如图5所示。
图5 卷积核
将图像中的每个像素点分别与这两个核做卷积,取值较大的作为该像素点的灰度值。
在做卷积过程中可以参考以下方法:
设某一像素点(P5)与其相邻的8个像素点的关系如图6所示。
图6 相邻9点的位置关系
两卷积可以表示为
Gx、Gy为卷积值,取其中的大值作为P5点的灰度值。
通过sobel算子处理后的图像在目标边缘的灰度值呈现出一定的特征。通过实验发现,在本系统中目标边缘特征灰度值取(110,180)较为合适。令灰度值在(110,180)中的像素点的灰度值为1,其他像素点的值为0,实现图像的二值化。
(4)梯度Hough变换(GHT)检测圆心。Hough转换常用于检测几何图形,在传统Hough转换的基础上发展出来的新型算法,大大提高了检测速度。本文选取了GHT来实现对目标中心的检测。
GHT算法的核心思想是用极坐标方程表示圆:
式中,a,b分别表示圆心横纵坐标;
x,y为圆周点的横纵坐标;
r为半径;
θ为点(x,y)的梯度角。
有sobel算子可知
实际上,上式就表示了圆周点(x,y)处的梯度信息。
结合梯度信息,利用常规Hough变换,即可较为快速地得到所识别圆的圆心(a,b)。DHT的实现步骤为:
步骤一,针对二值化后的图像,对每个灰度值为1的像素点,按式(2)中求的梯度角θ,在对半径r的循环中求得a、b;
步骤二,建立一个累加数组center[height][width],在上述循环中,center[b][a]加1;
步骤三,找出累加数组中的最大值,对应的a、b就是圆心坐标。
针对本机器人系统只要求出a,即可判断机器人的行走方向,所以我们只求取了圆心坐标中的横坐标a。具体可通过以下代码实现:
若像素点的灰度值在上述阈值(110,180)范围内,则求出以下的 SinTheta,x1,x2
……
x1=i-radius*SinTheta;//对其中(i,j)为像素点坐标,radius为穷举的半径值
x2=j+radius*SinTheta;
for(x=x1;x<=x2;x++){
center[x]+=1;//a为center[x]数组中最大值对应的x
}
根据a的值,我们可以调整机器人的朝向。
(5)串口通信与舵机控制。S3C2440本身带有3个TTL串口UART0、1、2,利用其中之一就能实现串口通信。本文选用了UART0与32路舵机控制器进行通信。将UART0中的TXD0管脚,GND管脚分别与舵机控制器的RX管脚,GND管脚相连。S3C2440作为上位机,给32路伺服舵机控制器发送指令,设置波特率为115200,即可完成通信,指令说明如下:
#
串口通信可通过以下程序实现:
根据(4)中判断结果调用相关指令,完成双足机器人的行走。
(6)生成可执行文件。利用linux下的交叉编译器arm-linux-gcc中的编译指令arm–linux–g++,生成在目标板中的可执行文件,即可运行程序,完成双足机器人的目标识别及朝向目标地双足行走。
在机器人目标识别及跟踪行走中,通过CMOS摄像头抓拍下如图7所示的画面及图8所示的判断结果。此时,双足机器人左转弯,朝着目标直线前进,直到程序设定时间,然后再进行下次判断。
图7 抓拍图
图8 判断结果
本双足机器人研究,结合了图像处理技术和机器人机构分析,基于嵌入式linux系统,使得双足机器人具备了自动识别具有一定特征的目标的能力,利用32路舵机控制器,实现了机器人双足行走的要求,其研究成果具有广泛的教学应用前景。该研究的不足之处,在于为了得到更为准确的位置定位,采用了综合多次判断结果得出最后判断结果的算法,使得判断时间增加。该算法过于简单,在以后的研究中,可以考虑换用不同的算法,或进一步改进hough变换的算法,以提高效率。
[1]张 勇,许东来.小型双足步行机器人的步态规划[J].计算机仿真,2010,27(11):148-151.
[2]刘海波,沈 晶,郭 耸.Visual C++数字图像处理技术详解[M].北京:机械工业出版社,2010.
[3]瞿 钧,甘岚.梯度Hough变换在圆检测中的应用[J].华东交通大学学报,2007,24(1):101-104.
[4]周 奋,王 婷.嵌入式系统中串口通信帧的同步方法[J].单片机与嵌入式系统应用,2006,(10):73-75.
[5]马文辉,李兰友.Linux环境下的串口通信[J].仪器仪表用户,2005,(1):39-42.