raspberry pi4开发的循迹避障快递机器人

2021-04-06 20:19刘光晓
卫星电视与宽带多媒体 2021年1期

【摘要】在工厂的流水线上,或者生活中的物流需求上,都需要具有自动运行功能的机器人。为此,本文应用了raspberry pi4芯片开发了一款具有循迹和避障功能的快递机器人。它可以搬运一定容量的物品,根据传感器技术分析路况,自动导航行走至目的地。raspberry pi4芯片功能强大,并且具有很多的扩展接口,可以满足寻迹避障、电机驱动和报警功能的需求。根据它的功能可以组装成结构简单的送快递机器人,满足人们运送物品的需要。

【关键词】raspberry pi4;循迹避障;快递机器人;自动导航

【基金项目】广西民族师范学院自治区级大学生创新创业训练计划项目(项目编号:202010604092)。

中图分类号:TN929                    文献标识码:A                     DOI:10.12246/j.issn.1673-0348.2021.01.024

目前快递机器人应用广泛,但复杂结构的机器人对初学者来说学习起来比较困难。而raspberry pi4芯片相当于一个微型电脑,在Linux系统中运行。适合初学者较快入门,难度适中,满足初学者对芯片功能的需求。为此,本文应用了raspberry pi4芯片丰富的配备资源结合了传感器技术和计算机软件操作技术,组装成了一个应用方便快捷的快递机器人。它的环境适应性较强,在较窄或曲折的路径上都可以灵活行走。也可以在本文设计的基础上,利用raspberry pi4芯片的拓展端口增加更多的实用功能,完成更多种类的快递机器人设计。

1. 实现快递机器人的总方案

为快递机器人设计功能方案,机器人需要完成的功能如下:它的行走和转弯功能要灵活;它可以自行避开身旁的障碍物;当设定好目地点后,它可以循迹自动导航行走至终点;它具备自身安全性及路线偏移自动报警功能的系统。此外,为实现快递机器人的基本功能构建出基本模块,该机器人需要构建出避障模块,循迹模块和报警模块。实现自动导航行走功能需要利用避障模块的信息,通过raspberry pi4主控芯片处理综合判断后驱动循迹模块自动导航行走来完成。在自动导航行走功能运行时要调用报警功能的模块,确保机器人自身的安全和行走路线的正确性。

2. 实现自动导航行走

2.1 实现自动导航行走的方法

本文通过简单实用的红外线传感器来做一个循迹模块,当机器人走进白色区域中时,反馈一个低电平。当机器人走进黑色区域中时,反馈一个高电平。通过电平的高低变化,判断机器人行走的路线是否正确。应用raspberry pi4主控芯片来控制机器人的行走,当机器人走进白色区域时,主控芯片控制机器人往相反方向行走来脱离白色区域,让机器人走进黑色路线区域。再利用红外线传感器来构造一个避障模块,当机器人旁边有障碍物时,红外线传感器发射的红外线反射回来,给raspberry pi4主控芯片反馈一个低电平。没有障碍物时,反馈一个高电平。raspberry pi4主控芯片通过有无感应到低电平,判断左右两边是否有障碍物。当左边有障碍物时则往右边转弯,当右边有障碍物时则往左边转弯。这样,机器人就可以通过传感器技术,对路况进行监测获取路况信息数据,并根据信息特征做出相应动作来完成自动导航行走的功能。

2.2 系统和软件设计

在应用raspberry pi4芯片之前,需要给raspberry pi4芯片安装一个系統。本文选用一个16G大小的SD卡作为芯片的磁盘,把系统镜像烧录在SD卡里面。SD卡的容量不能过小,因为主板里的系统和软件都在SD卡里面运行,所有的文件都在里面存取。在使用SD卡烧录系统之前,需要对SD卡进行格式化,以免安装后的系统在主板里面不能运行。当SD卡插入主板后,系统会自动运行打开一个WIFI热点。在自己的笔记本电脑里安装常用的文件传输软件和远程控制软件后,通过电脑连接热点,就可以远程控制机器人的操作系统了。把编写好的C语言程序代码通过文件传输软件发送到机器人的操作系统,再输入指令编译C语言程序文件,编译成功后运行程序就可以实现机器人的循迹避障功能了。

连接WIFI热点需要用到raspberry pi4芯片系统镜像的默认热点密码,而连接文件传输软件和远程控制软件都需要用到raspberry pi4芯片系统镜像的默认IP地址和密码。此外,C语言程序的编译指令如(注意区分大小写字母):

gcc 文件名.c –o 文件名 –lwiringPi

运行程序指令如:sudo ./文件名

需要安装的常用软件和系统镜像如图1:

2.3 程序代码编写

完成循迹避障功能的C语言程序代码如下,运行后机器人就可以自动导航行走,完成快递机器人的功能:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define BUFSIZE 512

int PWMA = 1;

int AIN2 = 2;

int AIN1 = 3;

int PWMB = 4;

int BIN2 = 5;

int BIN1 = 6;

#define LEFT 23

#define RIGHT 25

#define LEFTT 26

#define RIGHTT 27

void  t_up(unsigned int speed,unsigned int t_time)

{digitalWrite(AIN2,0);

digitalWrite(AIN1,1);

softPwmWrite(PWMA,speed);

digitalWrite(BIN2,0);

digitalWrite(BIN1,1);

softPwmWrite(PWMB,speed);

delay(t_time); }

void t_stop(unsigned int t_time)

{digitalWrite(AIN2,0);

digitalWrite(AIN1,0);

softPwmWrite(PWMA,0);

digitalWrite(BIN2,0);

digitalWrite(BIN1,0);

softPwmWrite(PWMB,0);

delay(t_time);}

void t_down(unsigned int speed,unsigned int t_time)

{ digitalWrite(AIN2,1);

digitalWrite(AIN1,0);

softPwmWrite(PWMA,speed);

digitalWrite(BIN2,1);

digitalWrite(BIN1,0);

softPwmWrite(PWMB,speed);

delay(t_time);}

void t_left(unsigned int speed,unsigned int t_time)

{ digitalWrite(AIN2,1);

digitalWrite(AIN1,0);

softPwmWrite(PWMA,speed);

digitalWrite(BIN2,0);

digitalWrite(BIN1,1);

softPwmWrite(PWMB,speed);

delay(t_time);}

void t_right(unsigned int speed,unsigned int t_time)

{ digitalWrite(AIN2,0);

digitalWrite(AIN1,1);

softPwmWrite(PWMA,speed);

digitalWrite(BIN2,1);

digitalWrite(BIN1,0);

softPwmWrite(PWMB,speed);

delay(t_time); }

int main(int argc, char *argv[])

{ float dis;

int SR;

int SL;

int SRR;

int SLL;

wiringPiSetup();

pinMode (1, OUTPUT);

pinMode (2, OUTPUT);

pinMode (3, OUTPUT);

pinMode (4, OUTPUT);

pinMode (5, OUTPUT);

pinMode (6, OUTPUT);

softPwmCreate(PWMA,0,100);

softPwmCreate(PWMB,0,100);

while(1){ SR = digitalRead(RIGHT);

SL = digitalRead(LEFT);

SRR = digitalRead(RIGHTT);

SLL= digitalRead(LEFTT);

if ((SL == HIGH&&SR==HIGH&&SLL == HIGH&&SRR == HIGH)||(SL == HIGH&&SR==HIGH&&SLL == LOW&&SRR == LOW)){ printf("GO");

t_up(50,0);}

else if ((SL == HIGH&&SR == LOW)||(SLL == HIGH&&SRR == LOW)){

printf("LEFT");

t_left(50,0);}

else if ((SL == LOW&&SR == HIGH)||(SLL == LOW&&SRR == HIGH)) {      printf("RIGHT");

t_right(50,0);}

else  {  printf("STOP");

t_stop(0);}}

return 0;}

3. 安全及偏移路线报警

应用raspberry pi4芯片和传感器技术,来完成机器人自动报警功能的设计。当传感器检测到符合报警的条件时,raspberry pi4芯片通过传感器反馈的电位变化触发蜂鸣器,实现机器人自身安全和偏移正确路线的报警功能。另外,还可以给快递机器人使用两块raspberry pi4芯片,分别作为主机部分和从机部分。两个芯片可以通过简单的WIFI功能相连,主机部分用来进行自动导航行走功能的操作,从机部分则用来进行机器人自身安全性及偏移正确路线的报警功能操作。利用两块芯片可以提高机器人处理数据的速度,增加机器人存取信息的容量。当然,也可以给机器人安装高精度的测距传感器和全方位检测功能的超声波传感器,让机器人有更强大的检测报警功能。

4. 结语

通过以上的方法,本文成功实现了机器人循迹避障的功能,组装成了一个简易的快递机器人进行物品的运送。本文应用的raspberry pi4芯片体积虽小,却有小型电脑般的众多功能,深受众多开发者的喜爱。但本文应用raspberry pi4芯片开发的快递机器人只适合运送轻型物品,对物品的容量一般。这种小型的快递机器人机动性更强,以后将在众多场合下广泛应用。对于腿脚不方便的老年人,或者需要频繁取物品的用户,都可以使用快递机器人在一定的范围内完成所需任务。它适合各个年龄段的群体,操作简单易懂,运行在众多小场合。另外,设计机器人的初学者通过该机器人可以对红外线传感器和超声波传感器等传感器技术有更深刻的认识,提升实际操作能力。学会理论联系实际,创新性地开发出更多经济实用的产品。为以后的大型智能型机器人设计开拓知识视野,对设计智能型机器人有一定的启发和认识。

参考文献:

[1]刘静,陶毓杰,张万,等。快递分拣机器人控制系统的设计[J]。机械制造,2020,58(1):13-16.

[2]胡凯程,林立,谭青青。面向社区的智能无人快递小车(机器人)创新设计研究[J]。信息系统工程,2018(9):45-46.

[3]徐爱昆。基于树莓派摄像头的双轮循迹平衡车设计[J]。单片机与嵌入式系统应用,2018(12):74-77.

[4]弓鹏伟,费燕琼,等。基于多传感器信息融合的轮履混合移动机器人路况识别方法[J]。上海交通大学学报,2017,51(4):398-402.

[5]王檀彬,陈无畏,李进,等。多传感器融合的视觉导航智能车避障仿真研究[J]。系统仿真学报,2009,21(4):1015-1019.

[6]宋志扬。基于树莓派的室内安防系统设计[J]。计算机产品与流通,2019(3):138.

[7]蒋青山,李亮亮,李运泽,等。室内智能安防报警系统[J]。山西电子技术,2019(5):25-28.

[8]李歡。快递入库智能分拣机器人系统[J]。科技创新与应用,2020(5):39-41.

作者简介:刘光晓(1996.2-)男,海南临高人,广西民族师范学院数理与电子信息工程学院,大学本科在读。