基于嵌入式Linux系统的人形搬运机器人设计
2024-12-09范涛栿
摘 要:利用机器人代替人工搬运将成为未来的趋势之一,为适应非结构化地面,本文设计一种机器人,仿照人类腿部结构,将机器人足部设计为正屈膝串联构型,以适应非结构化复杂地面环境。以树莓派4B为核心主控,搭配串行总线舵机以及摄像头进行视觉识别任务。该机器人利用摄像头获取外界图像,图像经过处理后,识别行走路线以及待抓取事物,识别完成后,根据程序设定控制串行总线舵机,进而控制机器人的行动与动作。测试结果表明,机器人基本可以完成指定物品的抓取与巡线行走。
关键词:人形机器人;树莓派4B;视觉识别
中图分类号:TP 242 " 文献标志码:A
1 基于嵌入式Linux系统的搬运机器人总体设计
机器人的主要功能为寻迹行走、识别物品和抓取物品,本文以人形结构为框架,结合各电控模块编写程序来实现以上功能。机器人的总体设计包括硬件设计和软件设计。硬件设计包括机器人的电控系统与机械结构设计,设计完成后,装配各个模块并进行调试。完成机器人的组装后,进行机器人软件设计方面的调试,软件设计包括视觉系统程序设计和动作控制程序设计,在各模块全部设计完成后对机器人本体进行组装并调试。
机器人的电控系统包括主控核心、电源模块、驱动模块以及机械结构设计。主控核心使用嵌入式Linux系统,运行内部程序代码控制各个模块;电源模块为舵机与其余模块提供电源,保证各个部件正常运行;驱动模块包括舵机驱动电路和全身舵机,其作用是执行指定任务。机械结构设计包括机器人的全身舵机分配、自由度分配等。
硬件设计完成后,须装配并调试各个模块,保证各个部件之间连接和配合良好,功能正常运行,装配调试须检查电路连接,保证摄像头正确传输视频数据,舵机正确运行,整体机构稳定运行。
机器人组装完成后,将进行软件设计方面的调试。其包括编写运动控制与视觉识别程序,测试舵机以及摄像头的功能,保证机器人能够在预期环境中正常运行。此时需要对软件和硬件进行联调,保证机器人能够实现设计的功能。
2 基于嵌入式Linux系统的搬运机器人硬件设计
2.1 主控核心
本设计采用树莓派4B作为主控板,树莓派4B采用Broadcom BCM2711四核64位ARM处理器,主频为1.5 GHz,配备双SD卡片槽。此外,树莓派4B还有2个USB 3.0接口、2个USB 2.0接口,并配备容量为32 GB的SD卡,使树莓派更好地储存系统数据[1]。
树莓派4B还有40个通用输入输出(General-purpose input/output,GPIO)引脚,其作用是输出驱动信号给驱动扩展板来驱动机器人全身的总线舵机,主控板的作用是处理图像信息,识别要搬运的物品并运行运动功能的代码,使机器人能够利用舵机来运动,本文将利用其外设的USB接口与视觉模块连接。
2.2 电源模块
本文机器人的各个模块需要供给不同的电源,分别为12 V舵机电源和电压为5 V、电流为3 A的主控板电源、5 V摄像头电源和3.3 V串行总线电路工作电源。
舵机电源使用12 V锂电池直接供电,视觉系统使用树莓派的USB 2.0接口直接供给5 V电源,树莓派在接受电压为5 V、电流为3 A的电源供电后,可使用引脚输出稳定的3.3 V电源,该电源可供给74HC126D芯片,保证串行总线电路稳定工作。
如果主控板树莓派正常工作,就需要采用稳定电压为5 V、电流量为3 A 的电源;如果电压不稳或不能满足要求要求,就很容易出现系统无故关机、程序出错等问题,因此本文在扩展板中搭建额外的电源电路,对锂电池电流降压稳压处理,得到稳定电压为5 V、电流为3 A的电源,保证树莓派正常运行。降压稳压电路如图1所示。
12 V电源电流通过P2输入接口流入BL8033,经过芯片整流后输出稳定电压为5 V、电流量为3 A的电流,电路由SW1拨动开关控制通断,当开关闭合时,VBAT与输入电源连接,将BL8033使能引脚电平拉高,VBAT经过C1、C3滤波后进入BL8033的电流输入引脚,经过芯片内部整流稳压后输出为稳定电压为5 V、
电流为3 A的电流,此时LED1灯亮起,表明电路正常工作。
2.3 驱动模块与舵机
舵机控制是机器人运动的重要环节,可以采用数字舵机和串行舵机2种方案,由于数字舵机需要占用大量I/O口,串行总线舵机可使用1条总线操控多个舵机,因此更加节省主控的硬件资源。串行舵机支持角度回读和智能防堵,本文使用LX-224HV串行总线舵机作为机器人的控制舵机,采用异步串行总线通信方式与舵机通信,UART异步通信接口输出信号。
在树莓派4B中有2个串口来进行串口通信。1)硬件串口。具有单独时钟源,性能高。2)mini串口。由于mini串口时钟源是由CPU内核时钟直接提供的,因此其波特率受到内核时钟的影响,并不可靠。本文选择硬件串口对外通信,须恢复硬件串口对GPIO口的映射。
使用“sudo gedit /boot/config.txt”指令打开树莓派的配置文件,在文件末尾添加“dtoverlay=miniuart-bt”以及“force_turbo=1”语句即可将主串口serial0指向硬件串口,此时TXD/RXD位于BOARD编码的PIN8/10位置,将2个引脚使用拓展板与串行总线舵机相连,即可开始驱动舵机。
使用串行总线电路将树莓派输出的UART信号转换为舵机的驱动信号,使用74HC126D芯片完成这个过程,串行总线电路如图2所示。
当树莓派向舵机控制器发送指令包时,其使用TXD将并行数据串行输出至74HC126D,此时如果控制引脚TX_CON电平被拉高,那么SERVO引脚电平将随TXD引脚变化而变化,同时74HC126D 的另一个输入引脚读回SERVO电平 ,拉高第二个控制引脚RX_CON的电平,RXD引脚的输出电平也将随SERVO变化而变化。树莓派使用RXD引脚读回舵机状态,如果TX_CON与RX_CON这2个控制引脚都为低电平,那么SERVO信号线与RXD信号线的输出状态恒为高阻态。
机器人全身LX-224HV串行总线舵机信号线全部连接至SERVO总线,可以同时接收SERVO总线上的信号。当舵机指令包由SERVO总线传输至全身舵机,每个舵机初始化时都分配唯一的ID号作为从机地址,此时根据指令包中的舵机ID号,对应舵机即可进行反应,例如舵机转动角度、速度和时间等。多个舵机运动配合关节零件连接,使机器人运动。
2.4 机械结构设计
本文设计适应非结构化复杂地面环境,在足式机器人的基础上仿照人类腿部结构的正屈膝串联构型作为机器人足部结构,机器人仿照人体结构设计,有头部、躯干和四肢,共19个自由度。
颈部采用1个舵机连接机器人的头部与躯干,使机器人头部能够转向;手部采用3个自由度,分别在肩关节、肘关节和腕关节处,其能够帮助机器人完成手臂旋转、弯曲和平伸等动作;腿部采用6个自由度,分别为髋关节处的3个自由度、膝关节处的1个自由度和踝关节处的2个自由度,其能够帮助机器人完成腿部基本的行走动作[2]。
机器人的手爪结构分为内抓型和外抓型,腕部运动方式分为回转型和平动型,本文选择内抓型手爪结构[3],使用舵机驱动手部关节,转动舵机使机器人手爪开合。
在实际使用过程中,须考虑机器人的材料。为保证强度,本文机器人的关节与抓手均采用钢合金材料制作。在机器人行动过程中,金属脚面受到磕碰可能会划伤瓷LX-224HV砖地面或出现在湿滑地面打滑的情况,因此为适应室内环境,机器人的脚面采用PLA绝缘材料,使用3D打印技术制造,其比金属材质更加柔软,比橡胶等防滑材料强度更高,更不易磨损[4]。
2.5 视觉模块
为增强机器人视觉模块的可开发性,提高图像分辨率,本文使用USB2.0的WebBL8033Camera嵌入式摄像头,简称WebCam。
WebCam是结合传统摄像机与网络技术的新一代摄像机,本文利用标准的网络浏览器监视其影像,使用USB2.0接口将其与树莓派连接。当WebCam连接至树莓派4B的USB端口时,树莓派4B可以使用USB通信协议与多个USB设备通信,此时树莓派识别并配置设备,保证其正常工作;加载USB设备驱动程序,设置设备参数,与其进行通信。
ZC301P摄像头不仅具有图像捕捉功能,还内置了数字化压缩控制器和基于Web的操作系统。视频数据经压缩加密后,利用局域网、Internet或无线网络送至终端用户,在内核为Linux 4.14的系统中,ZC301P芯片已有默认驱动程序,可以直接使用。
在树莓派系统中利用Python代码即可调用摄像头获取外界图像,在后续程序中,图像会得到处理并用于机器人运动。
3 基于嵌入式Linux系统的搬运机器人软件设计
3.1 嵌入式Linux系统
机器人的程序存放在树莓派内部的嵌入式系统中,树莓派官方提供了专门为树莓派的开发准备的系统树莓派 os,树莓派本身还可以烧录其他嵌入式系统,本文选择以Linux系统为蓝本开发的树莓派 os,该系统包括UI,便于可视化开发。
为了将系统烧录至树莓派内,需要将插在树莓派上的TF卡格式化,再使用官方提供的树莓派镜像烧录器,选择所需要的系统版本。设置主机名,勾选SSH服务与Wi-Fi设置,点击烧录,即可完成树莓派系统的烧录。打开树莓派的电源,在上位机中寻找树莓派的Wi-Fi并连接后,使用远程桌面连接即可对机器人的程序进行调试。
3.2 OpenCV进行物品识别以及寻迹
视觉识别的过程包括以下2个步骤。首先,对视觉模块采集的图像进行一系列处理,其次,对处理后的图片进行寻线路径的识别或物品形状的匹配,巡线和物品识别的程序在主程序运行的同时,以双线程的形式一起运行,当识别到待拾取物品时,两线程同时关闭并开始拾取物品的动作,拾取动作结束后,再次开启巡线与物品识别双线程。
当巡线程序开始,程序会将获取的图像分为上、中和下3个部分进行处理,减轻程序压力。巡线识别线为黑线,环境地面颜色为白色。根据黑色块的形状判断是否在起始位,起始位为黑色十字形状。识别到起始线后,机器人开始向前行走,程序时刻根据黑线中心点在画面中的位置判断机器人所在位置。
使用OpenCV图像处理得到黑色巡线中心点位置,利用黑色颜色阈值对图像进行二值化处理后,找到所有轮廓,再找到最大面积的轮廓,计算轮廓面积最大值。如果轮廓不为空,就寻找最小外接矩形的4个顶点,获取矩形的对角点后,计算得到矩形的中心点坐标,当中心点在图像偏左,说明机器人行走偏右,做小幅左移、左转动作,反之右移、右转,机器人可以动态保持正面直行,不会偏离巡线。寻迹程序流程如图3所示。
启动识别程序,树莓派将得到摄像头获得的外界图片,利用OpenCV库提供的函数对图片进行灰度化,得到原图像的灰度图后,使用函数对灰度图进行二值化,二值化的过程是让图像中的每个像素点与设定阈值进行逐一比较,高于阈值的设置为白色,低于阈值的设置为黑色,二值化阈值选择决定边界是否准确,程序在运行的过程中利用大津法自动计算最佳阈值。
使用findContours函数在完成二值化的图像中寻找寻迹线或物品图像边界,这个步骤须检测所有轮廓,但是不建立继承关系,寻找结束后储存轮廓中所有的点。计算轮廓面积,筛选掉非目标的小轮廓,当轮廓面积大于设定的面积阈值时,利用MatchShapes算子与事先准备好的模板进行形状匹配,形状越相似,匹配分值越小。将匹配分值与设定匹配阈值进行比较,如果匹配分值小于阈值,那么认为识别指定物品,设置物品识别成功的标志位,进行抓取。
3.3 机器人运动程序
机器人的运动即舵机的运动,进行串口舵机运动,使用上位机PC向下位机树莓派4B发送指令包,控制树莓派的引脚输出信号,指令包以16进制数组形式发出。当初始化时,每个舵机利用信号总线相连作为从机,程序赋予其1个唯一的ID号作为从机地址,总线根据指令包内的地址拉起对应位置的舵机,对应的舵机给出反应。
每个指令包包括以下5个部分。1) 帧头。固定设置为2个0x55的16进制数,帧头到达表示有数据包等待接收。2)ID。当初始化时,每个舵机都会被赋予1个唯一的ID号,在上位机操控机器人进行动作的过程中,对应关节处舵机的ID号范围为0x00~0xFD,ID号0xFE为广播ID,所有舵机均接收指令,但是为了防止总线冲突,所有舵机均不回应。3)数据长度。即待发送的数据长度。4)指令。其作用是控制舵机的各种指令,例如舵机运动速度等。5)参数。 除指令外需要补充的控制信息。6)校验和。在指令包利用串口传递至总线舵机后,对应舵机以对应速度转动指定角度,并在下一个指令前保持该速度,多个指令包组合成为1个动作,多个动作组合成为1个动作组,将调试好的动作组封装为1个文件,当主程序需要使用时调用,机器人可以在对应时间做出对应动作,例如抓取、行走等。
4 结语
本文研究基于嵌入式Linux系统的人形搬运机器人,经测试发现机器人可以完成巡线、行走和转弯等运动动作,当识别到指定物块时可以做出对应的拾取动作。在测试过程中也发现了许多问题,例如当巡线识别时机器人会被周围物品颜色影响、有时无法成功拾取物块以及电池续航不足等,因此,该机器人在视觉识别程序、拾取动作调试以及电源系统设计等方面还有待优化。
参考文献
[1]王泽龙. 基于ROS的搬运机器人控制系统设计[D].青岛:青岛科技大学,2021.
[2]付裕.基于单片机STM32的搬运机器人控制系统设计与实现[J].无线互联科技,2023,20(5):39-42.
[3]卢鑫,郭婷,谭越洋.搬运机器人控制系统的设计[J].科技与创新,2022(16):103-105,109.
[4]罗庆生,陈胤霏,刘星栋,等.仿人机器人的机械结构设计与控制系统构建[J].计算机测量与控制,2019,27(8):89-93.