基于STM32的家庭服务机器人系统工作原理及设计

2020-02-14来源: elecfans关键字:STM32  家庭服务机器人系统  智能家居

为解决当前大部分家庭服务机器人不具备行走功能或只具有简单的避障能力等问题,本文设计一种基于STM32的家庭服务机器人系统。整个系统由轮式机器人、XBee协调器、RFID智慧地板和上位机组成。轮式机器人由主板、传感器模块、射频模块、舵机模块、电源模块和机器人金属主体组成,传感器模块包括电子罗盘、红外传感器和RFID读卡器。主板以ARMCortex-M3内核微处理器STM32F103VCT6为核心进行开发,采集传感器模块数据信息,实现机器人与XBee协调器之间的通信连接。该系统在模拟智能家居的环境下通过自主决策稳定和高效地完成设定任务,能够满足家庭服务机器人的应用要求。

随着人工智能和传感器技术的发展,机器人已从工厂的结构化环境进入人们的日常生活环境,机器人不仅能自主完成工作,还能与人共同协作完成任务或在人的指导下完成任务。家庭服务机器人是智能家居系统的一个重要组成部分,在生活中的作用越来越重要。当前,大部分的家庭服务机器人不具备行走功能或只具有简单的避障能力,机器人的研究很多依赖于仿真实现,但是现实情况和仿真结果可能大相径庭。也有一些研究将问题复杂化,反而走了更多的弯路。

针对当前家庭服务机器人的不足和现代智能服务机器人的要求,本文提出一种基于STM32的家庭服务机器人系统的设计方案。该方案模拟智能家居环境,简化了定位方式,有效地利用了ZigBee技术低成本、低功耗的特点[3],设计出一个合适大小的轮式机器人进行试验,试验结果表明机器人能够实现预期目标并体现出较强的自主决策能力。

1 系统整体设计方案

整个家庭服务机器人系统主要由四部分组成,包括铺满RFID智慧地板的模拟智能家居环境、移动的轮式机器人、XBee协调器以及上位机。

智能家居环境设计长为3.25米,宽为2米,铺满RFID智能地板,分隔成厨房和客厅两个房间,中间的房门宽0.3米。厨房有水槽、搁板、智能冰箱等电器,客厅有餐桌、餐椅等。RFID智能地板的排列信息给机器人提供准确定位。轮式机器人负责往返厨房与客厅之间给服务对象运送物品,是整个系统的核心部分。XBee协调器是基于ZigBee技术的无线传输模块,负责数据快速稳定地传递。上位机主要负责数据的接收、处理和控制指令的下达等。

2 系统工作原理和流程

系统的主要工作流程是:上位机输入任务命令,该命令通过XBee协调器发送给轮式机器人。机器人收到任务命令后从休眠模式启动,读取智能地板RFID定位信息,将该实时位置信息上传到上位机,以显示机器人运动轨迹。机器人通过传感器模块检测自身姿态和周围障碍物情况,自主决策移动至目标位置抓取物品,运送到最终目标位置给服务对象使用。其中,轮式机器人是整个系统设计的重点。

2.1 XBee协调器工作流程

XBee协调器是最先启动的XBee网络节点,主要完成XBee网络的组网功能和数据的收发功能,其中组网功能包括XBee网络的建立和子节点的入网。

首先,在XBee协调器上电复位后对包括硬件和软件的各个模块进行初始化。然后,开始扫描信道、进行能量检测、选择信道以及选择合适的PAN ID。成功之后就广播网络ID、信道,XBee网络就建立了。之后,XBee协调器进入监听状态,等待子节点发送入网请求信号,收到入网请求后协调器允许子节点入网并分配网络短地址给子节点,这就实现了节点的入网功能。最后,XBee协调器将上位机数据发送给子节点射频模块,启动轮式机器人,在收到来自子节点的数据请求后,将接收数据并通过串口线传输给上位机,这就是数据的收发功能。

2.2 轮式机器人工作流程

轮式机器人是任务的执行设备,往返于厨房和客厅两个房间之间,准确和高效地执行用户对象发送的各种命令任务,并发送机器人坐标数据给XBee协调器进行以下工作。

首先,轮式机器人上的XBee模块需要初始化和发送入网请求,实现节点入网。然后,XBee模块接收XBee协调器传输的任务命令数据,主板对各传感器模块初始化。RFID读卡器读取智能地板坐标数据,发送给XBee协调器。电子罗盘获取机器人当前的姿态信息。红外传感器检测机器人所处环境的障碍物距离,主板控制启动由左右两个连续旋转舵机组成的移动轮。机器人通过自主决策规划路径,移动至目标位置,启动机械臂抓取物品,其中机械臂由多个角度舵机组成。在机械臂保持抓取物品的状态下,再次规划路径移动至最终地点,机械臂准确将物品放在目标位置。完成任务后机器人回到起始位置,进入休眠模式。

3 关键环节设计

3.1 机器人硬件结构设计

轮式机器人采用模块化的设计原则,使机器人的设计为模块化方式,并采用分层控制,有利于综合性能的发挥[4] 。将机器人系统分为五个部分:主板、传感器模块、无线射频模块、舵机模块和电源模块。轮式机器人的结构框图如图1所示。
 



3.1.1 主板

主板是针对该轮式机器人设计,采用ARM Cortex-M3内核的STM32F103VCT6处理器,主板资源包括SDRAM、NAND Flash,UART接口、GPIO接口、SPI接口和JTAG接口。辅助的资源有USB接口、定时器等。

主板的设计专门为射频模块、传感器模块和机械臂模块提供了接口,简化了电路结构,使控制器集成度更高,运行更加稳定和高效,从而节约硬件成本。

3.1.2 传感器模块

传感器模块由传感器和相应的信号调理电路组成。轮式机器人使用的传感器包括红外传感器、电子罗盘和RFID读卡器。根据轮式机器人移动过程中检测障碍物距离的精度要求,红外传感器采用的型号为Sharp GP2D12,分别安装在机器人前方、左前方、右前方、左侧和右侧五个位置。电子罗盘采用GY-80九轴模块中的HMC5883L三轴电子罗盘,可以在复杂环境下测得准确方位值,抗磁电干扰能力较强。RFID读卡器采用Parallax公司的低频段28140读卡器,可读取125kHz标签。

3.1.3 射频模块

射频模块是设备之间通信的主要模块,负责整个网络的数据传输工作。射频模块采用基于ZigBee技术的XBee无线传输模块,该模块覆盖面积大且易于配置,是机器人通讯组网的不错选择。

XBee协调器由XBee无线模块和XBee USB适配板组成。XBee USB适配板是专门为XBee无线模块配套设计,通过使用该模块,可以在PC机使用配套的X-CTU软件对XBee无线模块进行配置及串口通讯监控。XBee协调器通过USB线与上位机连接通信。

3.1.4 舵机模块

舵机模块分为机械臂舵机和移动轮舵机,机械臂由角度舵机和金属杆件组成。五个角度舵机构成五自由度机械臂,尺寸大小与搭建智能家居环境匹配,为保证机械臂动作精度,采用HS-322HD角度舵机。移动轮舵机使用Parallax连续旋转舵机。

3.1.5 电源模块

根据各个组成部分工作的场合和特点的不同,采用不同的供电模式,轮式机器人采用电池供电的模式,而XBee协调器则要一直保持工作状态,所以采用上位机USB供电的模式。电源模块与主板相连,而主板留有接口给传感器模块、射频模块和舵机模块,通过接口给传感器模块、射频模块和舵机模块进行供电。由于RFID读卡器对电流要求较高,因此主板和RFID读卡器分开使用双电源供电。

3.2 机器人软件设计

3.2.1驱动控制设计

驱动控制设计包括各个模块的初始化、模块之间的通信和上位机软件设计。该文采用与STM32F103VCT6配套的MDK-ARM作为开发环境,完成各个模块初始化和通信,上位机软件采用VC++开发。具体的各个模块软件实现的功能及工作流程在系统的工作原理和流程中已经介绍,这里不再叙述。
 



3.2.2 路径规划

路径规划主要可分为全局路径规划和局部路径规划,前者是指在环境信息完全已知的情况下,机器人规划一条从初始位置到目标位置的无碰撞最优路径;后者由于环境信息是未知的,需考虑局部的特定情况来进行路径调整。

机器人移动过程中利用电子罗盘进行姿态调整,即调整前进方向,努力寻找一条最快捷的路径到达目标位置。机器人姿态调整主要取决于当前位置和前一位置与目标位置的距离,包括横向距离和纵向距离。若当前位置与目标位置的横向距离和纵向距离分别小于或者等于前一位置与目标位置的横向距离和纵向距离,表明机器人与目标位置的距离在逐渐缩小,机器人在朝目标位置前进,否则就说明机器人没有按预期的轨迹前进,需要再次进行姿态调整。姿态调整示意图如图2所示。

局部路径规划包括避障处理、振荡位置分析、房门位置搜索和过房门策略分析。在机器人移动过程中,需要不断探测周围环境,从而更好地决定下一步动作。五个红外传感器数据使机器人时刻掌握周围环境,避障处理要求机器人合理避开障碍物,向目标位置移动。

振荡位置指的是机器人不能顺利通过某一位置,而在这一点附近反复来回走动。如果起始位置和目标位置分别在两个房间,在全局路径规划思想的指导下,机器人会在两间房的公用墙边不断徘徊。振荡位置分析示意图如图3所示。
 



当机器人到达振荡位置时,需要调整路径规划策略,此时放弃全局路径规划策略,选择直接以公用墙为基准墙搜索房门。沿墙走算法的基本规则是:当机器人不断靠近墙面时需要调整两轮速差使机器人朝偏离墙面的方向前进;当机器人不断远离墙面时,则需要调整两轮速差,使机器人朝靠近墙面的方向前进。综合调整的结果是机器人的前进轨迹是以基准线为轴的类正弦曲线,沿墙走轨迹如图4所示。

过房门是机器人完成任务必不可少的一个环节,怎样确保机器人顺利穿过房门是任务成功的关键。机器人准备过房门时并不是正对房门,可能向左侧或者右侧不同程度的倾斜。根据倾斜程度的划分,机器人检测相对应的红外传感器距离值,不断调整机器人姿态,使机器人正对房门并顺利通过。
 

[1] [2]
关键字:STM32  家庭服务机器人系统  智能家居 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488224.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于STM32芯片的一款智能台灯
下一篇:基于STM32的伺服压力机控制系统设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S库文件判断指定IO输入引脚电平GPIO_ReadInputPin有问题
/**  * @brief  Reads the specified GPIO input data pin.  * @param  GPIOx : Select the GPIO peripheral number (x = A to I).  * @param  GPIO_Pin : Specifies the pin number.  * @retval BitStatus : GPIO input pin status.  */BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_Ty
发表于 2020-02-08
STM8 GPIO输入输出模式
悬浮输入悬浮输入,也叫浮空输入,顾名思义,即引脚悬空。这种方式的输入阻抗很高。当悬浮输入的引脚上加上信号时,单片机所得到的信号并不确定是高电平或是低电平,是一个不确定的信号。悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。上拉输入上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同。上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低。推挽输出推挽输出(Push-pull output),也称为互补输出,推拉式输出。推挽输出模式导通损耗小,效率高。在此模式下,N-MOS、P-MO
发表于 2020-02-08
STM8 GPIO输入输出模式
STM8L的USART1串口通信详解 含例程
STM8L除了可以进行串口通信,还可支持红外通信,智能卡协议,这些功能后续会开发,发布程序源码。STM8L还可以使用DMA缓存数据,减少CPU负担,为了简单起见,本文没有用到DMA功能。只需要简单的配置发送的字长度,停止位数,波特率,打开发送接收,就可以进行串口数据收发。下图为串口发送数据流程。对于串口发送数据,需要注意的是,打开发送后,数据发送完成,如果不关闭中断,程序会一直进入中断。所以在确保数据发送完成后,需关闭中断,退出发送数据。本文通过周期性(500ms)的向上位机发送一组数据,来演示STM8L的串口通信。串口接收部分程序也已经调试好,只需把while循环中的程序注释掉,设置断点,查看上位机发送来的数据即可
发表于 2020-02-08
使用STM8S105K4T6C 模数转换器的12通道
分享今天遇到的一个stm8s模数转换的小问题~~~这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。stm8s105k4t6c的管脚图其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):[mw_shl_code=c,true]/*---------------------------------包含头文件---------------------------------*/#include "adc.h" #define        ADC     
发表于 2020-02-08
stm8——LED流水灯实现
最近接触并学习了一款STM8系列的芯片。以前学习了的ARM9+Linux后,再来学习单片机就感到上手很快了。 芯片基本信息:Type:STM8L151G68-bit ultralow power MCU, up to 32 KB Flash, 1 KB Data EEPROM RTC, LCD, timers, USART, I2C, SPI, ADC, DAC, comparators具体可以查看datasheet:http://pdf-file.ic37.com/pdf4/STMICROELECTRONICS
发表于 2020-02-08
MCU程序设计之STM8S的optionbytes
今天使用STM8S在程序中修改optionbyte遇到问题一直读取为0,不能进入设置流程,之前的程序今天重新修改东西,使用新的片子,原来程序如下:  AFR_TEMP = (uint16_t)((uint16_t)0x01 << 8);  AFR_TEMP = AFR_TEMP | (uint16_t)0xFE;  AFR_TEMP = (AFR_TEMP >> 8);之所以直接赋值而不调用函数,是因为程序代码空间有限,使用函数调用方法修改没有问题,如下:  AFR_TEMP = FLASH_ReadOptionByte(0X4803);  AFR_TEMP
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved