在这里插入图片描述

项目开源地址:https://github.com/SEUZTh/superMarketRobot_ws/tree/v2

1. 机器人需求建模

1.1 需求分析

超市机器人相当于当下流行的 AGV 小车,结合此项目中超市机器人的需求和实际种 AGV 小车的 应用需求,经过综合考量,我认为其应满足如下的外部结构需求和其他非功能需求。

1.1.1 外部接口需求

用户接口:

  • 上位机界面:实时监控机器人各个传感器状态及信息;
  • 输入输出设备:向机器人发送任务指令,操纵机器人运动。

硬件接口:

  • 充电接口:大功率;
  • 调试下载接口:用于下载固件程序,调试校准机器人传感器;
  • 通信接口:蓝牙、WIFI 图传等与上位机通信。

软件接口:

  • 返回货架、货物以及机器人周围环境状态信息;
  • 返回机器人自身传感器计算得到的各项数据,如机器人位姿、电量、温度、CPU 进程状态;
  • 能够接收并执行上位机的任务和运动指令,以及开机关机。

通信接口:

  • TCP/IP:与上位机进行双向数据传输,用于控制指令的发送和接收;
  • ROS 通信协议:用于上位机获取机器人传感器数据以及调用机器人已有的服务。

1.1.2 其他非功能需求

性能需求:

  • 图像识别:对货架和货物的识别具有高准确率;
  • 运动控制:机械臂运动精度高,里程计和 GPS 偏差小。

安全需求:

  • 机械臂工作空间不会破坏周围物品;
  • CPU、GPU 等核心器件配备温度传感器及风扇用于散热;
  • 电池充电电流及功率自动保持在安全范围内;
  • 电量过低时不在执行新任务,自动前往充电桩充电。

软件质量属性:

  • 性能(Performance)、可用性(Availability)、可靠性(Reliability)、健壮性(Robustness)、安全性(Security)、可修改性(Modification)、可变性(Changeability)、易用性(Usability)、 可测试性(Testability)、功能性(Functionality)和互操作性(Inter-operation)。

1.2 机器人行为模型

实验要求实现的内容有:
1) 盲走盲抓:按顺序到货架前检查是否有空货架,记录空缺的位置和需要的货物,去找到备货,抓取 并放置到货架上的对应位置。
2) 视觉识别:找到空货架并确认位置、以及空缺的商品名称;在备货区识别商品
3) 自主定位:机器人可以时刻知道自己的位置
4) 动态避障:可以绕过未知或突然出现的障碍物

根据需求,我们设计了如图 11 所示的状态图。
在这里插入图片描述

2. 机器人模型设计

考虑到超市机器人需要在狭窄的空间内移动,且需要抓取物体,所以我们选用了 KUKA 的 Youbot 机器人。如图 12 所示,该机器人具有全方向移动的麦克纳姆轮底盘,且具有一个带夹持器的 5 自由度机 械手臂。


优点是:

  • 四个麦伦,移动方便;
  • 机械臂五个自由度灵活度高;
  • 扩展性好。

缺点是:

  • 机械臂控制难度极高;
  • 仿真较为困难,移动时误差较高。

在这里插入图片描述

要完成此次实验的需要,还需要给该机器人添加相机、罗盘、GPS、距离传感器、激光传感器等器件,机器人模型整体设计如图 13 所示。
在这里插入图片描述

3. 基于 Webots 的机器人模型搭建

在 Webots 中搭建机器人模型步骤如下:
1) 新建 Robot 节点;
2) 添加 Youbot 机器人;
3) 添加 Camera,前后各一个,形状设置为圆柱体,调整相对于机器人的位置以及摄像头朝向;
4) 添加 Compass;
5) 添加 GPS;
6) 添加距离传感器,位置调整为手爪处;
7) 添加激光传感器,放置在机器人正前方。
8) 调整 Youbot 尺寸为 1.4 倍。


手指张开最大宽度为 0.06 m ,将 youBot 的 scale 增加,以使得手指张开宽度增加,足够夹住已有的所 有物品。已有的物品的宽度大概是 0.08 m 左右,所以机器人至少放大 3 4 倍。调整尺寸后的机器人在原有 world 内无法灵活移动,故将 floor 放大,向后移动货架及其上的商品。

由于 Kinect 相机无法调用 Recognition API,所以选择使用 Camera,分辨率为 256*128。因此无需 自己训练模型用于物品识别,一定程度上减小了物品识别的难度,使得仿真更专注于机器人运动控制的 开发,体现了离线编程的优势。

原有的 world 中地面的物理参数需要进行调整,否则会提示报错,且麦轮无法正常左右移动和原地 旋转。修改后的 world 如图 14 所示。

在这里插入图片描述