咳咳!这个是自己的毕业设计,内容比较多就拆开发。设计实现了一款SLAM移动机器人,加机械臂完成视觉识别抓取的,同时还有语音识别控制、QT上位机控制、Web网页控制。前几年看古月老师的视频,看到古月老师设计的HRMRP(混合实时移动机器人平台),就也来对标一下!机器人演示视频如下~

这个系列的博文,会把如何设计机器人的内容分享出来~


机器人具备移动抓取、自主导航、交互控制的多功能智能仓储搬运机器人系统。整个操作系统主要由软体和硬件两部分构成,操作系统架构分为应用层、系统层、驱动层和结构层,具体如下图所示。

整个系统设计分为四层结构,具体为:

(1)结构层采用两轮差速运动底盘实现机器人的运动,通过五轴机械臂+夹爪实现抓取功能。

(2)硬件层由两块驱动板实现,STM32F103RCT6实现SLAM系统的底层驱动功能,通过接收系统发出的空间速度信息,通过PID实现速度转PWM值实现底层控制器功能;Atmega 328P实现机械臂部分的驱动控制,通过接收系统发出的空间关节信息,转为机械臂各个关节角度值执行,机械臂驱动板部分板载一路蜂鸣器报警电路,作为硬件系统提示。供电部分使用XL4016E1实现5V 8A的输出,为系统主机、SLAM底盘、激光雷达进行供电,LM2596S-5.0负责机械臂系统的供电。通过树莓派开发板(4B 2GB版本)作为运算主机,实现系统运算处理。

(3)系统层基于机器人操作系统(ROS,Robot Opearting System)的控制系统设计,实现SLAM同步位置与运动地图建立、运动机器人的主动引导、六轴机械臂正逆运动学解算及目标识别,系统层和应用之间分别通过可达讯飞SDK实现语音识别交互控制、通过ROS和Qt联合开发PC软件交互控制、通过Python Bottle轻服务器框架实现Web交互控制。

(4)应用层是为用户提供的交互界面设计,这里分为基于Qt开发的桌面交互软件、基于Web网页的在线交互界面、基于语音识别的交互控制。

机器人分为SLAM底盘+六轴机械臂+语音识别控制三部分组成。机器人系统采用Raspberry Pi开发板为主控,并采用了Ubuntu Mate 20.04操作系统,并安装了ROS Noetic自动化机器人控制系统。


SLAM底盘部分使用STM32F103RCT6单片机为主控,通过TB6612电机驱动芯片驱动两路直流编码电机M1和M2,同时接入MPU6050六轴陀螺仪传感器实现姿态里程检测。考虑系统整体供电设计,底盘部分使用XL4016E作为电源管理芯片,实现8~40V转5V 8A(Max)输出,如下图所示。

六轴机械臂部分使用Atmega 328P单片机为主控,通过六路PWM占空比输出来驱动六个伺服电机。考虑系统整体供电设计,机械臂部分使用LM2596S-5.0作为电源管理芯片,实现8~40V转5V 3A(Max)输出,如下图所示。

语音识别部分采用了科大讯飞六麦语言阵列,并使用了科大讯飞的SDK设计工具,完成了离线语音识别系统设计。离线语音识别成功后通过程序判定语音内容,从而转为控制信号实现语音交互控制,如下图所示。

系统整体使用12V 6000mAH锂电池供电,SLAM底盘部位使用亚克力加工设计,六轴机械臂采用不锈钢加工件。整体重量约10kg,负载1kg以内。


软件部分使用ROS系统进行开发,通过move_base导航+MoveIt!运动学控制机械臂。本文使用Ubuntu 20.04 + Noetic版本,通过C++和Python混合开发。

SLAM系统分为建图、定位和导航三部分,建图算法使用Google Cartographer 2D建图,这是Google在2016年开源的一套商业建图算法,稳定性和精度相对较高;定位部分是基于Cartographer的Pure Localization纯定位算法,该算法在重定位、移动定位方面相对于AMCL(自适应蒙特卡洛算法)精度要高;导航部分是基于move_base框架,通过全局路径规划和局部路径规划设计做出路径,并配合运动学解算实现对底盘的驱动控制,如下图所示。

上图中,椭圆部分代码启动的节点(Node)程序,一个节点对应一条线程;矩形部分表示节点与节点通讯的数据(message),有话题、服务、参数、动作四种类型;带箭头的线条反应数据的流向。本文所有涉及ROS通讯架构的描述均使用rqt_graph节点关系图进行描述。

机械臂系统使用MoveIt!运动学解算,通过TFLite进行目标视觉并发布目标的TF坐标位姿,通过MoveIt!运动学逆解末端位姿实现机械臂的视觉抓取功能设计。同时机械臂部分设计交互界面,通过设定各轴位置实现机械臂控制,如下图所示。

语音识别部分使用科大讯飞六麦语音阵列,通过科大讯飞的SDK开发工具,实现离线语音识别系统设计。离线语音识别成功后通过程序判定语音内容,从而转为控制信号实现语音交互控制,如下图所示。

交互系统部分使用HTML+CSS+JavaScript进行交互式页面设计,通过ROS WebSocket接口实现前端与机器人的交互功能。由于时间原因和个人能力原因,前端界面的功能较少,只有一些基本操作功能。