Skip to content

Latest commit

 

History

History
176 lines (114 loc) · 4.01 KB

使用文档.md

File metadata and controls

176 lines (114 loc) · 4.01 KB

TBK-Visualizer

安装说明

在安装本客户端之前,请先安装

  1. 下载TBK-Visualizer

    git clone https://github.com/TnTeQAQ/TBK-Client.git
    
  2. 安装环境依赖

    pip install -r requirements.txt
    

使用说明

  1. 运行程序

    make run
    
  2. Ctrl+Enter 唤出Box列表

  3. Ctrl+T 搜索现有Box

  4. Ctrl+S 保存Box布局

详细说明

ConsoleBox

Ctrl+Enter唤出,可以创建其他Box。

右上角按钮可以将Box始终显示在页面上。

InputConsoleBox

image-20241212132332523

Ctrl+T 唤出,可以通过输入创建其他Box。

MessageBox

image-20241212132618020

TBK发布的所有Message列表。

ParamBox

image-20241212132720992

TBK的所有Param列表。

PlotVzBox

image-20241212132948548

将Message以图表的形式显示。

LogReaderBox

image-20241212133034885

可以录制和回放Message。

NodeBox

image-20241212133446826

可视化编程。

IMUBox

image-20241212133129527

输入IMU,可以以3D的形式显示车辆姿态。

FastLioBox

image-20241212133339014

输入雷达姿态,点云信息,可以实时构建点云图。

开发文档

如何编写Box

Box文件夹在ui/boxes下,所有的Box都以BaseBox为基类。

在编写Box类时Box的参数由__init__函数进行初始化,Box的布局在create方法中设置。

当Box需要不断更新数据时,则在Box的update方法中编写更新逻辑。

编写好的新Box需要在同文件夹下的__init__.py中导入。

例如,

创建一个带有按钮的box,首先在ui/boxes下创建一个新的文件test_box.py,然后编写如下代码:

import dearpygui.dearpygui as dpg
from ui.boxes.BaseBox import BaseBox
class TestBox(BaseBox):
    # only = True 表示只能创建一个实例
    only = False
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def create(self):
        #create 会自动创建dpg窗口, 窗口拥有tag,获取的方法是 self.tag
        # 创建按钮
        dpg.add_button(label="test",parent=self.tag,callback=lambda:print("hello"))
        
    def destroy(self):
        # 销毁之前可以做的事情
        super().destroy() # 真正销毁Box

    def update(self):
        pass

然后在ui/boxes/__init__.py中加入:

from ui.boxes.test_box import TestBox

启动程序,Ctrl+Enter唤出Box列表,可以看到新的Box。

如何编写Node

Node文件夹在utils/node_utils下,所有Node都以BaseNode为基类。

具体实现方式如下:

class Add(BaseNode):
    def __init__(self, **kwargs):
        # 初始化样例
        default_init_data = {
            "x": {
                "attribute_type": "INPUT",
                "data_type": "STRINPUT",
                "user_data":
                    {"value": 0}
            },
            "res": {
                "attribute_type": "OUTPUT",
                "data_type": "SLIDER",
                "user_data": {"value": 0}
            },
            "pos": {
                "attribute_type": "CONFIG",
                "data_type": "CONFIG",
                "user_data":
                    {"value": None}
            }
        }
        kwargs["init_data"] = kwargs["init_data"] or default_init_data
        super().__init__(**kwargs)

    def func(self):
        # 编写计算逻辑

不同的data_type,需在types下事先编写。