RobotFlow工程track半年度总结(2020.7~2021.1)

RobotFlow项目从7月份正式启动到现在也有半年了,中间经历了招工程师,CVPR投稿等拖延进度的事情,还是完成了一些事情。 在大方向不变的情况下,现在的robotflow项目已经和最开始的想法有了不少结构性的调整。现对该方向做一个总结,并对未来做一个简单的规划。

多级结构

rflib -> rflearner -> perception -> rfplanner -> task env controller

以上用rf开头的库,之后都会考虑往独立的库发展。特别是rflib。

  • rflib:
    • 放各种需编译的代码,其代码编译好后通过pybind被python调用。
    • 放逻辑上偏底层的代码
  • rflearner:所有learning相关的代码,算法逻辑层
  • perception:
    • detector:含目标检测和实例分割
    • pose estimator:6DoF估计算法
    • human analyzer:人体/手检测,重建算法;intent modeling相关算法
    • action preprocessor:视觉驱动的robot learning算法的前端(这一部分的网络末尾通常是没有loss的,是通过RL的部分来优化的),这部分视具体任务会拆分,不会用这个名字总包所有的模型。
  • rfplanner
    • TAMP规划器Rogic
    • MP规划器RFMove
  • task
    • 分层结构,从单primitive到复合任务,都统归到task里
    • 单primitive时,地位和perception相同
    • 复合任务时,单primitive和perception算法可能都是其子任务
  • env
    • 提供真实场景的可视化,模拟规划
    • 提供仿真场景的可视化,模拟规划,交互
  • controller:
    • 提供各种硬件控制器的上层封装:位置控制,速度控制,力控

举个例子:

  • 视觉的人视角:pytorch提供基本的conv2d实现;rflib提供注入roialign这样的ops的实现;rflearner提供resnet的实现;detector描述(config)怎么搭一个yolov3的pipeline
  • Robot的人视角:rflib提供各种硬件接口,c++功能代码;env,controller,rfplanner等提供对应功能的上层封装;task描述一个完整的机器人任务(可以无视觉)
  • Robot Learning的人视角:pytorch功能同上;rflib功能同上;rflearner提供ppo等算法逻辑;perception部分描述(config)robot learning的视觉前端,task部分描述(config)各机器人技能(primitive),并描述(config)视觉前端和各机器人技能该如何串联。模型保存的方式有两种,视觉前端和机器人操作后端分别保存/统一保持。

去ROS化进程

去ROS化是一直以来的大方针,ROS生态中有很多重要的软件都是基于ROS的通信机制来写的,而且往往是独占。那么在去ROS化的过程中,很重要的一步就是要对这些功能进行替换,这中间会涉及到大量的代码重写和重构。

去ROS化的定义是:RobotFlow的主要功能不需要ROS即可运行(简单来说就是installation requirement里没有install ROS这一项)。但有一些前置准备可能还是需要ROS的,比如用moveit生成plan group(所以其实电脑上还是得安装ROS)。若想达到电脑里不需要装ROS就能完全使用RobotFlow,我觉得这不是这两年的任务。

目前有三个很重要的库需要剥离ROS存在。

  1. Gazebo -> rFUniverse
    • 替换方案:直接替换
    • 原因:实际上现在Gazebo本身就可以独立使用,不过Unity生态更好,可扩展性更强。Unity官方也在大力支持Robot AI的发展,我们可以和官方共同进步。
    • 隐患:unity不是开源;自带的physx不是最新(锅在Nvidia);ubuntu下的某些插件有兼容性问题
  2. RViz -> RFViz
    • 替换方案:去掉ROS外壳,核心功能里的ROS部分需用同等功能的code替换
    • 原因:接通真实世界的接口
    • 隐患:工程量比较大,实现是肯定能实现的
      • 需要修改tf库(这个库只需要去掉ROS外壳,重新封装接口)
  3. MoveIt -> RFMove
    • 替换方案:去掉ROS外壳,封装接口。
    • 原因:需接通rFUniverse和RFViz,这样虚拟和真实场景均可实现可视化规划。
    • 隐患:暂无,前人已有过嫁接到其他框架的经验
  4. 其他软件/sdk
    • realsense
    • calibration
    • 各硬件sdk

2021年规划

  1. rflib独立化
  2. rflearner, perception, controller进入常态维护
  3. rogic(inside rfplanner), task完成初始化
  4. env尽快完成rFUniverse和RFViz的开发
  5. 全框架在2021年内完成去ROS化进程