简介

  • 机器人项目的总结

  • 项目名称: 机场行李搬运项目
  • 项目需求: 机械臂替代人工,完成行李从传送带到行李车的装载工作

项目的需求分析

  • 难点
    • 行李箱形状不同,并要求无伤抓取
    • 传送带一直工作,行李箱处于移动状态
    • 行李传输为流水作业,要求系统各个部件容错性高
  • 系统功能
    • 动态抓取
    • 智能码垛

人员分工

  • 3D抓取算法,测速算法
  • 码垛算法
  • 机械臂控制,整体抓取流程集成(me)
  • 相机手眼标定,算法接入,末端工具接入,滑轨接入
  • 后台管理
  • 前端界面

明确这个项目到底是做什么的,有哪些功能

  • 这个项目是在机场环境下,使用机械臂代替人工,将行李箱由传送带搬运到运货车上的控制系统。整个系统是B/S架构。
  • 它具有视觉检测,自动抓取,智能放置功能。

明确你的项目的整体架构,在面试的时候能够清除的画给面试官看并清除的指出从哪里调用到那里,使用什么方式调用

  • 项目的整体架构有
    • front-end
    • back-end
    • server:
      • master
      • robot
      • eoat
      • camera
      • job
      • infer

明确你的模块在整个项目中所处的位置及作用

  • 我负责的模块是
    • master
    • robot
    • job
  • master
    • 内核节点,负责向后端提供REST ful接口,用于数据交互,与其他模块通讯,负责命令分发和数据处理
  • robot
    • 机械臂节点,负责封装机械臂服务,向其他模块提供机械臂命令
  • job
    • 任务节点,负责任务编排和抓取流程的实现

明确你的模块用到了那些技术,更好一些的,可以再了解一下整个项目用到了那些技术

  • 每个节点有一个难点

  • master
    • boost.asio库 线程池。用于避免每次HTTP请求时申请线程,是根据硬件最大并发数量预先申请好的线程资源。
    • mongoose库 处理HTTP请求数据,将外界数据转为内部数据结构,事件分发的机制
    • mongoose库 异步监听HTTP请求
    • std::atomic HTTP服务器退出信号处理
    • std::lock_guard<std::mutex> 自动锁,更新设备清单时,读者与写者
    • reinterpret_cast<>() 数据重新解释,类型转换的知识点
    • nlohmann::json json数据的处理
    • std::tuple, std::tie 多类型返回值处理
    • std::find_if, STL算法库的使用
  • robot
    • 状态机,std::atomic
    • 工厂模式,动态多态,不同类型机械臂抽象出相同的接口函数,封装和继承
    • 机械臂理论知识
  • job
    • 动态多态
    • 基于JSON数据结构的任务编排,参数设计和实现
    • 急停功能实现,std::condition_variable

理论知识点

  • 关节空间,笛卡尔空间,正解,逆解,关节运动,直线运动,基底坐标系,末端坐标系,目标坐标系,世界坐标系,姿态,旋转向量,轴角,欧拉角,四元数,奇异点,奇异位置
  • 工厂模式
  • tcp/ip,http,websocket,REST ful,socket套接字,三次握手,四次挥手,大端字节序,小端字节序,状态机,同步编程,异步编程,线程池,静态文件托管,http文件上传和下载
  • 面向对象编程思想,封装,继承,多态,静态多态,动态多态,lambda表达式,智能指针,RAII思想,统一初始化,移动语义,互斥锁,读写锁,标准模板库,std::string, std::vector,std::map,std::thread, std::condition_variable

参考资料

  • 《机器人学导论》
  • 《应用机器人学-运动学-动力学与控制技术》
  • 《设计模式,可复用面向对象软件的基础》
  • 《UnixNetwork Programming》