摘要
- 机场行李搬运系统:使用AI+机器人的方案代替人完成在机场环境下将传送带上的行李按要求搬运到行李车。
- 在之前的公司做过的一个AI+机器人相关的产品,借助面试整理PPT的机会复盘一下这个软件产品和自己做过的工作。
项目背景
- 机场行李搬运系统
- 客户:云南腾冲机场
- 应用场景:机场环境下行李由传送带搬运到行李车
- 目标:机器人代替人工,提升作业效率。
- 产品研发分为硬件和软件
- 硬件由机械臂,滑动导轨,RFID检测仪构成,北京团队负责该硬件设计和控制算法
- 软件为B/S架构,定位是通用的视觉应用系统,由底层服务,后端服务器,前端组成。
- 我负责底层服务研发:内核,机械臂,相机,工具,算法,任务.
技术选型
- 编程语言:C++,Python,JS
- 模型部署:TensorRT
- 平台:Ubuntu18.04
- 构建工具:Makefile,bash
硬件选型
- 感知:图漾3D相机
- 工具:钧舵电动吸盘
- 本体:泰科10kg机械臂
视觉应用架构
- 传感与感知
- 3D相机(图漾)
- 计算与处理
- 工控机 ubuntu18.04 + NVIDIA 2080
- GPU加速 TensorRT
- 视觉算法
- YOLOV8 目标检测
- PCL点云分割
- 通讯与集成
- 通讯协议:TIPC,HTTP
技术重点
手眼标定
- 手眼标定(Hand-Eye Calibration),主要用于确定摄像头(Eye)与机械臂末端执行器(Hand)之间的空间变换关系。该标定过程的目标是计算相机坐标系与机械臂坐标系之间的变换矩阵,从而使得视觉信息能够准确的指导机械臂的运动。
- 手眼标定方法主要分为两类:
- 固定相机(Eye-to-Hand) 视觉抓取
- 移动相机(Eye-in-Hand) 打磨焊接
- 机械臂常用的坐标系有:
- 基地坐标系:固定在机械臂的底座上,用于定义整个机械臂的参考坐标系
- 末端坐标系:固定在机械臂末端上,描述末端执行器的位置和方向
- 世界坐标系:多个机器人或传送带协作
- 视觉抓取–眼在手外的手眼标定:
- 机械臂工具与机械臂基地坐标系的关系已知,通过正解获得;
- 相机坐标系与机械臂基地坐标系的变换矩阵通过手眼标定得到,通过这个变换矩阵可以将目标由相机坐标系变换到机械臂的基地坐标系;
- 知道目标在机械臂基地坐标系的关系,又知道机械臂工具与机械臂基地坐标系的关系,就可以把目标在机械臂基地坐标系下的位姿传给机械臂,使机械臂末端移动到目标位置进行抓取。
- 变换关系推导如下图所示
- 焊接–眼在手上的手眼标定
- 标定相机坐标系与机械臂末端坐标系的变换矩阵,这样目标在相机坐标系下的位姿可以通过该矩阵变换到机械臂的末端坐标系
- 机械臂的末端坐标系通过左乘变换到基地坐标系中。
- 变换关系推导如下图所示
- 多机器人协作
- 由上述视觉抓取的逻辑可知 相机坐标系,目标坐标系,末端坐标系,基地坐标系的关系和互相转换公式
- 指定世界坐标系,机械臂A的基地坐标系与世界坐标系的关系已知,同理机械臂B的基地坐标系与世界坐标系的关系也已知
- 由相机检测到的目标在相机坐标系下,通过手眼标定的变换矩阵转到机械臂A的基地坐标系种,再通过世界坐标系与基地坐标系的变换矩阵由机械臂A的基地坐标系变换到世界坐标系,至此,目标在世界坐标系中的位置和姿态已知
- 将目标在世界坐标系中的位姿转通过世界坐标系与基地坐标系的变换矩阵转到机械臂B的基地坐标系中,这样目标在机械臂B的基地坐标系中的位置和姿态已知
- 将目标在机械臂B的基地坐标系中的位置和姿态传给机械臂B,使机械臂B的末端移动到目标位置,进行抓取,实现机械臂A和B的协作。
TIPC
- TIPC(Transparent Inter-Process Communication, 透明进程间通信)是一种面向集群的高效,低延迟的通信协议,主要用于分布式系统中的进程间通信(IPC),从linux 2.6.16开始内核就支持。
- TIPC的通讯架构:主要由节点(node),网络(network)和集群(cluster)组成
- 集群(Cluster):多个TIPC节点组成一个集群,相互之间可以直接通信
- 节点(Node):一个运行TIPC的机器(可以是物理机或虚拟机),属于某个集群
- 端口(Port): 进程间通信的端点,类似于socket的端口
- 服务(Service): 在TIPC中,应用程序通过服务类型(Type) + 实例ID(Instance)来寻址,而不是直接使用IP地址。
- TIPC的工作模式:
- 单播(Unicast): 点对点通信
- 组播(Multicast): 面向一组进程发送消息
- 广播(Broadcast): 在整个TIPC网络中广播消息。
- 六个模块
- 内核模块: 1-ip-port
- 机械臂模块:2-ip-port
- 任务模块:3-ip-port
- 相机模块:4-ip-port
- 算法模块:5-ip-port
- 工具模块:6-ip-port
- TIPC实现分布式系统,各个节点直接可以独立运行,且可进行单播,组播和广播,自研通讯组件,便于部署和维护。
机械臂控制
- 机械臂模块,设计目标是兼容多个厂家的机械臂,对上层提供统一的控制接口,使产品具备高扩展性,面对不同的应用场景,选择对应的机械臂类型。
- 设计思想:
- 机械臂的参数信息存储到配置文件,分别为:厂商,型号,IP,端口
- 机械臂模块设计一个接口类,提供统一的控制接口。其派生类适配不同厂商的机械臂通讯协议。
- 通过配置文件的参数信息为每个机械臂形成唯一的设备序列号,以序列号为键,机械臂实例为值,形成一个设备列表,管理多个不同类型的机械臂。
- 在前端界面根据现场应用环境选择合适的机械臂即可通过机械臂模块控制该机械臂。
- 价值:
- 兼容主流机械臂,使产品具备高扩展性
点云处理
- 点云(Point Cloud)是一种三维数据表示方法,它由大量的离散点(Points)组成,每个点都有空间坐标(X,Y,Z),可能还包括 颜色(RGB),法向量(Normals),强度(Intensity)等信息。
- 点云主要来源于3D传感器
- 激光雷达
- RGB-D摄像头
- 结构光扫描仪
- 立体视觉(双目相机)
- 计算机合成数据
- RGB-D相机的核心任务是将深度图(Depth Map)和RGB图像转换成3D点云。这个过程包含以下几个关键步骤
- 获取原始数据:
- RGB图像,二位彩色图像
- 深度图,每个像素表示到相机的距离,单位通常是毫米
- 相机内参(Camera Intrinsic),主要包括
- 焦距(fx, fy): 相机的光学焦距(单位:像素)
- 主点(cx, cy): 光轴在图像坐标系中的位置(单位:像素)
- 从像素坐标转换为3D坐标
- 结合RGB颜色信息
- 由于RGB图形和深度图是对齐的,我们可以直接获取每个点的颜色值(R,G,B)
- 存储为PCD/PLY点云格式
- 获取原始数据:
- 业务流程
- 通过YoloV8,检测目标,输入目标的掩码图,非目标像素值为0,目标像素值为1.
- RGB图与Depth图生成3D点云,通过遍历对齐过的掩码图,将目标像素的位置对应的3D点提取出来,输出了目标的点云
- 通过PCL库进行平面拟合,计算出目标点云的中心和法向量。
- 通过手眼标定的变换矩阵将目标点云的中心和法向量转换到机械臂基地坐标系中,输出抓取点的位姿。
视觉动态抓取
- 测速功能
- 目标进入检测区域的第一帧开始,检测目标的抓取点位置,连续检测5次,计算4个速度,取平均值得出目标的运动速度。
- 动态抓取
- 以最大速度到达抓取点沿X轴方向固定距离S的点A,得出运动时间TA,
- 已知目标速度,目标运动固定距离S的时间TB已知,TA-TB=TW,机械臂等待时间
- 目标达到点A后,机械臂斜向下运动,速度为目标的速度,与目标接触时开启吸盘,抓取目标
- 抓取目标后机械臂斜向上运动,速度为目标的速度,直到目标与传送带完全分离
- 通过码垛算法输出放置点,传给机械臂放置目标,实现动态抓取与智能码垛。