跳转至

需求文档 —— 内核包装

需求背景

在实现了机器人系统内核(Roplat)的基础上,为了使得无编程基础的用户能够以较低学习成本地搭建机器人软件,需要实现一个软件生成工具,以实现软件的快速搭建。产品定位类似 “QT" 等软件生成工具。

许多机器人工程师并不具备较好的编程基础和能力,在理解机器人行为与提交生产级的工业软件之间存在较大的差距。在较多的工程实践中,软件往往被认为是不重要的一环而被忽视,以实现功能为目标的工程任务往往会使得软件质量较低、难以维护,不利于工程任务的提交与展示。故需要一组工具能够使得机器人工程师能够在仅理解机器人行为的情况下快速生成美观、可用的软件。

名词解释

  • 机器人系统内核 Roplat:机器人系统的内核,通过节点化的方式管理机器人系统。可选的异步运行时和面向数据流的通讯结构(其实还没实现,暂时使用无锁队列实现,预计使用 rustarrow 库实现)使得节点间和设备间的通讯和io具有更少的延迟、更好的实时性和更大的并发量。

    系统内核在运行时接受两种输入形式,一种是配置文件和任务节点文件,另外一种是通过对外通讯节点的输入。文件输入是必须的,一般用于描述硬件资源以及任务节点的依赖关系、参数等信息。配置文件需要在启动内核时输入,任务节点文件可以在运行过程中持续更新。以下是两个文件的示例:

{
  "robots": [
    { "name": "panda_1", "robot_type": "panda", "base_pose": { "rotation": [1.0, 0.0, 0.0, 0.0], "translation": [0.0, 0.0, 0.0] } },
    { "name": "panda_2", "robot_type": "panda", "base_pose": { "rotation": [1.0, 0.0, 0.0, 0.0], "translation": [0.0, 1.0, 0.0] } }
  ],
  "sensors": [
    {
      "name": "obstacle_list_1",
      "sensor_type": "obstacle_list",
      "params": [{ "Sphere": { "id": 1, "pose": { "rotation": [1, 0, 0, 0], "translation": [0, 0, 0] }, "params": 0.1 } }]
    }
  ]
}
[
  {
    "id": 0,
    "rely": [],
    "target": [],
    "nodes": [["bullet", ["panda_1", "panda_2"], ["obstacle_list_1"], { "period": 0.0, "config_path": "./config/config.json" }]],
    "edges": [[1, 0]]
  },
  {
    "id": 1,
    "rely": [],
    "target": [
      { "Transform": [1, { "rotation": [1, 0, 0, 0], "translation": [-1, 2, 1] }, { "rotation": [1, 0, 0, 0], "translation": [0.5, 1, 0.5] }] }
    ],
    "nodes": [["obstacle_releaser", [], ["obstacle_list_1"], { "period": 0.1, "interp": 10 }]],
    "edges": [[0, 1]]
  },
  {
    "id": 3,
    "rely": [0],
    "target": [
      { "Joint": [[0.0124, -0.8838, 0.3749, -2.2172, 0.232, 1.7924, 1.3719], 7, null] },
      { "Joint": [[0.2896, -1.0286, 0.6738, -2.0833, 0.551, 2.1874, 1.0705], 7, null] },
      { "Joint": [[0.0592, -0.3941, 0.4692, -1.6001, 0.1456, 2.0968, 1.201], 7, null] },
      { "Joint": [[0.1, -0.8292, 0.7548, -2.3791, 0.1615, 2.2308, 1.4292], 7, null] },
      { "Joint": [[0.0124, -0.8838, 0.3749, -2.2172, 0.232, 1.7924, 1.3719], 7, null] },
      { "Joint": [[0.2896, -1.0286, 0.6738, -2.0833, 0.551, 2.1874, 1.0705], 7, null] },
      { "Joint": [[0.0592, -0.3941, 0.4692, -1.6001, 0.1456, 2.0968, 1.201], 7, null] },
      { "Joint": [[0.1, -0.8292, 0.7548, -2.3791, 0.1615, 2.2308, 1.4292], 7, null] }
    ],
    "nodes": [
      ["cfs", ["panda_2"], ["obstacle_list_1"], { "period": 0.95, "ninterp": 7, "niter": 10, "cost_weight": [0, 10.0, 20.0], "solver": "osqp" }],
      ["interp", ["panda_2"], ["obstacle_list_1"], { "period": 0.1, "interp_fn": "lerp", "ninter": 25 }],
      ["position", ["panda_2"], [], { "period": 0.004 }]
    ],
    "edges": [
      [0, 1],
      [1, 2],
      [2, 3],
      [3, 0]
    ]
  }
]
  • QT: 一款工程界常用的工业软件开发工具,以其简单的页面设计受工程师的喜爱。其实现为 C++ ,他们实现了自己的 QMake 等工具,但是其代码架构很容易成为史山代码,其包管理也颇为难受。(本质上是我不想用 C++ 写, 笑)(QT ui设计工具) (QT 开发工具)

需求概述

本项目的核心内容实际上是一个软件实现的各个阶段:设计界面、开发逻辑、测试、封装四个部分。这也代表了本项目的前端页面分为四个主要的界面。