基于STM32的家庭服务机器人系统设计

发布者:爱笑的猫咪最新更新时间:2016-09-02 来源: eefocus关键字:STM32  家庭服务机器人 手机看文章 扫描二维码
随时随地手机看文章
引言

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

  针对当前家庭服务机器人的不足和现代智能服务机器人的要求,本文提出一种基于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所示。

93291440742359

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++开发。具体的各个模块软件实现的功能及工作流程在系统的工作原理和流程中已经介绍,这里不再叙述。

22211440742387

3.2.2 路径规划

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

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

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

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

65081440742387

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

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

3361440742388

4 结束语

  本文设计的家庭服务机器人系统,为智能家居环境服务对象的需求任务提出了详细可行的解决方案。整个系统应用了基于XBee模块的主流无线通信技术,以保证数据的传输速率。此外,对轮式机器人的模块化设计具有结构简单和性能稳定等特点,大大提高了家庭服务机器人的可靠性,并且降低了系统的硬件成本。自主决策过程中的路径规划,使得机器人能够快速沿着最合适的路线移动。总之,该设计系统对家庭服务机器人相关问题的解决提供了可借鉴的方法。

关键字:STM32  家庭服务机器人 引用地址:基于STM32的家庭服务机器人系统设计

上一篇:基于STM32F4的四轴航拍飞行器
下一篇:STM32 ADC应用要注意的几点问题

推荐阅读最新更新时间:2024-03-16 15:07

STM32串口发送问题
在串口1发送中,第一个字总是发不出来,单步调试发送正常,硬件上电复位发送不正常,发现是STM32上电复位后需要先读取 USART_SR,然后写 USART_DR,解决办法在串口初始化加入USART_GetFlagStatus(USART2, USART_FLAG_TC); void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GP
[单片机]
STM32(IAR编译) 堆栈溢出 程序跑飞
问题一、上电程序跑飞或者运行几步程序跑飞,IAR提示堆栈溢出。 1、首先确认程序入口地址。NVIC_Configuration();// 嵌套向量中断控制器配置 。我这里是STM32f100c8t6b芯片。 在IAR OPTIONS- C/C++ Compiler- Preprocessor 里面定义了VECT_TAB_FLASH 这样程序入口地址就是0X08000000+0X3000(既0X08003000)。这里为什么是0X08000000呢因为STM32主程序存储地址是从0X08000000开始,加上0X3000是为了用户引导程序预留一段空间。不然每次一上电就跑程序没有引导程序是不太现实的吧。不过测试的时候无所谓应该吧
[单片机]
<font color='red'>STM32</font>(IAR编译) 堆栈溢出 程序跑飞
了解STM32标准库
CMSIS标准和库层次关系 由于Cortex系列芯片采用相同的内核,区别在于核外的片上外设之间的差异,这些差异导致软件在同核不同外设的芯片上移植困难。为了解决这些兼容问题ARM 与芯片厂商建立了 CMSIS 标准(Cortex MicroController Software Interface Standard)。 CMSIS架构图 库目录文件的简介 Libraries:驱动库的源代码和启动文件,使用的固件库也在其中 Project:官方提供的利用驱动库写的例子和工程模板,特别是为每个外设写的例子 Utilities:包含了基于 ST 官方实验板的例程,不需要用到,略过即可 stm32f10x_stdperiph_lib_u
[单片机]
了解<font color='red'>STM32</font>标准库
STM32学习记录11:启动配置
当前的嵌入式应用程序开发过程里,C语言已成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点 因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键词,叫 启动文件 ,用英文单词来描述是 Bootloader 。 无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)
[单片机]
STM32 下的库函数和寄存器操作比较
以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高; 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制**/ while(1) { GPIO_ResetBits(GPIOB,GPIO_Pin_9); //LED0对应引脚GPIOF.9拉低,亮 等同LED0=0; GPIO_SetBits(GPIOB,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1; delay_ms(500); //延时300ms GPIO_SetBits(GPIOB,GPIO_Pin_9);
[单片机]
STM32-快速上手SPI
1 概述 基本的部分前文《STM32-SPI》已经介绍过了,这里只记怎么用。 1.1 引脚映射 STM32F103ZET6的三个SPI的引脚分别为 SPI1_SCK PA5(21) SPI1_MISO PA6 (22) SPI1_MOSI PA7 (23) SPI1_NSS PA4(20) SPI2_SCK PB13(34) SPI2_MISO PB14(35) SPI2_MOSI PB15(36) SPI2_NSS PB12(33) SPI3_SCK PB3(55) SPI3_MISO PB4(56) SPI3_MOSI PB5(57) SPI3_NSS PA15(50) 1.2 时钟源 SPI1在APB
[单片机]
ST的优化代码协助设计人员开发STM32 MCU
中国,2014年5月5日 ——意法半导体新推出的STM32Snippets提供高度优化且立即可用的寄存器级代码段,以最大限度地发挥STM32微控制器应用设计的性能和能效。 寄存器级编程虽然可降低内存占用率,节省宝贵的处理器时钟周期,降低电源电流消耗,但通常需要设计人员花费很多时间精力研究产品手册。精简高效的程序能够提高应用性能并使其达到功耗和成本预设目标,STM32Snippets为开发人员编写这样的程序提供了一条捷径。 STM32Snippets集成在最近发布的可简化产品初始化和代码移植的STM32Cube™软件工具和嵌入式软件内。利用这些工具和软件,开发人员可在高度可移植的STM32Cube™方法与高度优化的
[单片机]
ST的优化代码协助设计人员开发<font color='red'>STM32</font> MCU
stm32学习笔记--串口波特率
这几天的学习有什么问题呢?开始看前几个例程的时候貌似还找到些感觉,学了些东西,比如串口需要配置的波特率是如何计算的,如何通过位段位带别名区的设计实现对I/O口单个位的寻址操作,端口模式如何设置,spi与iic之间各自的优势和劣势,上个周稀里糊涂看了那么多,现在一想就剩下这些了,然后是这个周,这个周的感觉是更加的不扎实,很多东西都是走马观花,看了就忘,比如中断控制,直到看了第二遍才形成框架,看门狗DMA游戏手柄红外通信的各个实验,好吧,这些东西我仅仅知道是怎么回事,对他们的了解甚至不如上个周的模块,至少还有个框架,到了这里,只剩下 哦,这个,我知道 就没了,对!就没了。所以接下来要去改程序,不管改什么程序,当然最好是直接拿三轴加速度
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved