常用功能

图漾相机的使用

图漾相机资源算子介绍

TyCameraResource 算子属于资源类线程算子,用于在 RVS 的分线程中启动一个图漾相机资源。通过添加图漾相机资源,实现图漾相机图像和点云的采集。

image-20240925102500830

添加方式

算子列表资源类算子 查找图漾相机资源算子,按住鼠标左键拖动至算子图中的 ResourceGroup 中。

image-20240925102655701

算子参数

图漾相机资源算子的默认属性参数以及参数说明如下所示。

image-20240925094607208

  • 自动启动/auto_start:用于自动开启资源算子。

    • 是/True:打开 RVS 软件后第一次进入运行状态时自动开启资源线程。

    • 否/False:不自动开启资源线程。

  • 启动/start:用于开启资源算子。

    • 是/True:勾选为是,开启资源线程。

    • 否/False:不启动资源线程。

  • 停止/stop:用于停止资源算子。

    • 是/True:勾选为是,停止资源线程。

    • 是/False:不停止资源线程。

  • 重置/reset:重置该资源。该资源算子已经运行后,如果重新更改属性参数,需要点击重置,然后重新勾选 启动 运行。

  • 重新搜索相机/reselect_device:下次启动时,是否重新从网络中搜索可连接的相机设备。

  • 是否掉线重连/reconnect_device:相机连接后,如果掉线是否自动重新连接。

  • 相机型号/camera_model:默认不填写。连接设备后,根据相机ID显示对应的相机型号。

  • 相机ID/camera_id:默认不填写。在打开该资源线程后会自动查找当前工控机所在网段的所有图漾相机并将这些设备的硬件信息打印在 terminal 中,然后随机选中一台设备进行连接。

    说明:如果需要指定连接某台图漾相机设备,则需要将该设备的编码填写到相机ID选项。编码可以在相机设备硬件上查看,也可以在上述 terminal 的打印信息中查找。

  • 深度图像模式/selected_depth_mode:默认不填写。连接设备后会自动选择并显示深度图的的图像尺寸。

    说明:影响最终形成的点云图的尺寸。后续可以更改,但是需要设置重置选项

  • 彩色图像模式/selected_rgb_mode:默认不填写。连接设备后会自动选择并显示2D图的图像尺寸。

    说明:后续可以更改,但是需要设置重置选项

  • 输出彩色图像/output_color:设置是否输出彩色图像。

    • 是/True:输出。

    • 否/False:不输出。

  • 输出深度图像/output_depth:设置是否输出深度图像。

  • 输出左IR图/output_ir_left:设置是否输出左IR图。

  • 输出右IR图/output_ir_right:设置是否输出右IR图。

  • 输出点云/output_cloud:设置是否输出点云。需要勾选输出深度图像输出点云

  • 点云坐标系/trigger_mode:选择拍摄时点云坐标系,包含:

    • DEPTH_COORDINATE:以深度相机为原点生成的点云。

    • COLOR_COORDINATE:以彩色相机为原点生成的点云。

  • 激光自动控制/laser_auto_ctrl:激光自适应模式。

    • 是/True:激光自动控制。

    • 否/False:根据激光强度数值设置激光的强度。

  • 激光强度/laser_power:设置激光强度。取值范围:[0,100]。

  • 彩色图像Isp/rgb_isp:设置是否对 rgb 图像的预处理。

  • 点云比例/cloud_scale:调整该值设置点云在 RVS 中的比例。

    说明:相机 SDK 中点云单位为毫米,RVS 中点云单位为米,默认值:0.001,表示将相机 SDK 中点云毫米转换为米在 RVS 中输出。

  • 相机深度图标定文件/depth_calib_file:存放在相机设备内的深度相机的出厂标定参数,开启资源线程后会自动读取该标定参数并按照该参数对应的文件路径保存成文件。

  • 相机彩色图标定文件/color_calib_file:存放在相机设备内的2D 相机的出厂标定参数,开启资源线程后会自动读取该标定参数并按照该参数对应的文件路径保存成文件。

    文件内容说明

    color_calib_file

    第一行(下图红色区域)表示相机的 RGB 镜头在进行出厂标定时所采用的镜头分辨率。实际使用相机时,只有将相机分辨率同这里的数值保持一致,才可以直接使用下述的内参矩阵。否则需要对应的进行数值缩放(但是会有一定的精度损失)。

    第二行(下图蓝色区域)表示相机 RGB 镜头的内参。总共 9 个数值,是一个按行排列的 3 * 3 矩阵。矩阵形式为 [fx,0,cx,0,fy,cy,0,0,1] ,其中 fx 表示 x 轴方向的相机焦距 (单位为像素),其中 cx 表示 x 轴方向的相机中心(单位为像素);fy 、cy 类似。

    第三行(下图绿色区域)表示相机 RGB 镜头的外参,即 RGB 镜头到左 IR 镜头的空间坐标系转换矩阵。总共 16 个数值,是一个按行排列的 4 * 4 矩阵。左上角的 3 * 3 模块表示旋转,右上角的 1 * 3 表示平移。平移值的单位为毫米。

    第四行(下图黄色区域)表示相机 RGB 镜头的畸变参数,总共 12 个数值。可以用来对原始的RGB图像进行畸变校正。

    另外,关于 depth_calib_file,其说明同上述说明保持一致。特别的,由于深度相机是虚拟相机,所以其畸变参数以及外参都是零矩阵。

    Resource_TyCameraResource_1

  • 触发模式/trigger_mode:设置触发方式。

    • TY_SOFTWARE_TRIGGER_MODE:为软件触发方式,每一次发送 trigger 命令时相机采集一帧图像

    • TY_HARDWARE_TRIGGER_MODE:为硬件触发方式,通过硬件触发相机采集。

    • TY_TRIGGER_MODE_OFF:则为相机不停的采集图像,每一次发送 trigger 命令时,相机回传一帧数据给 RVS 。TY_TRIGGER_MODE_OFF 时间上效率更高,但请注意,t 时刻发送 trigger 获得的图像并非是 t 时刻采集的,而是 t-t0 时刻采集的,t0 由相机型号来定,一般大于 0.5 秒。

  • 是否再发/resend

    • 是/True:在每一次相机回传 RVS 数据发生丢包时会重新发送。

    • 否/False:在每一次相机回传 RVS 数据发生丢包时不会重新发送。

  • 相机外参坐标/extrinsic_pose:无法修改,是从当前相机资源载入后,从 sdk 中读取当前相机的 rgb 相机的外参(即 rgb 相机到左 ir 深度相机的转换矩阵)并转换成 pose 形式进行展示。

  • 设备是否在线/device_online:相机设备是否在线。

图漾相机资源设置面板介绍

图漾相机资源设置面板用于设置相机资源的输出数据和相机的一些功能属性参数。

打开方式

  1. 鼠标右键点击相机资源算子,鼠标左键点击选择算子面板

    image-20240528140923395

面板介绍

TyCameraResourcePanel

面板介绍:

  1. 面板工具栏第一行:参数设置功能。

    • m_table:参数表格面板。面板中包含连接相机的参数,在参数表格面板调整参数后保存,会将参数保存至 XML 文件。再次连接相机后,无需进行参数调整。

      不同的相机具有不同的算子参数,需要根据所连接的相机进行调整。

      image-20240828145507276

    • m_screenshot:采集图像功能。

    • icon_visOn :切割框可视化。

    • m_tick_icon :应用参数设置。

    • m_cancel_icon :取消参数设置。

    • m_cursor :选取彩色图的ROI区域。

    • 0X0:鼠标在彩色图位置的像素坐标。

    • r:0 g:0 b:0 :鼠标在彩色图位置的像素RGB值。

  2. 面板工具栏第二行:彩色图裁剪功能的ROI参数设置。

    • x1:彩色图 ROI 区域左上顶点的像素横坐标。

    • y1:彩色图 ROI 区域左上顶点的像素纵坐标。

    • x2:彩色图 ROI 区域右下顶点的像素横坐标。

    • y2:彩色图 ROI 区域右下顶点的像素纵坐标。

    • ROI 裁剪模式:彩色图ROI裁剪功能模式选择,有三种模式:

      • 原始图:输出原图,不做裁剪。

      • 零位填充:裁剪区域,区域外填充零值,分辨率不变。

      • ROI:裁剪区域,区域外直接去除,分辨率减小。

  3. 面板工具栏第三行:彩色图预处理的深度过滤。

    • 膨胀半径值:设置膨胀半径值。膨胀操作通常用于图像处理中的形态学操作,可以扩展图像中的对象边界。

    • 深度值范围:设置深度值范围。深度值范围可以帮助过滤掉不在指定范围内的深度数据。

    • 深度过滤模式:彩色图预处理的深度过滤模式,有三种模式:

      • 无过滤:不进行任何深度过滤。

      • 顶层过滤:仅过滤掉深度图中靠近表面的深度值。

      • 底层过滤:仅过滤掉深度图中靠近底部的深度值。

  4. 面板工具栏第四行:点云图切割功能的参数设置

    • 切割框位置:设置切割框位置。

    • 切割框长度:设置切割框长度。

    • 点云切割模式:点云图切割功能的模式,有两种模式:

      • 无切割:不进行任何切割操作。

      • 立方体切割:使用立方体形状的切割框对点云图进行切割。

面板使用

  1. 启动相机资源,并成功连接相机,如图所示。

    TyCameraResourcePanel

  2. 点击工具栏 m_screenshot 控件,即可在面板窗口显示彩色图和点云图。

    TyCameraResourcePanel

  3. 点击工具栏第一行的m_cursor控件,在彩色图中选取 ROI 区域,同时可在点云图中生成自适应的切割框。选择工具栏第二行的ROI裁剪模式零位填充,选择工具栏第四行的点云切割模式立方体切割。每次修改参数后,都需要点击工具栏第一行的 m_tick_icon 控件来进行设置。

    TyCameraResourcePanel

  4. 点击 m_screenshot 控件,即可获得裁剪后彩色图和切割后的点云图。

    TyCameraResourcePanel

  5. 设置工具栏第三行的深度过滤模式TopFilter,修改工具栏第三行的深度值范围0.1,表示过滤顶层 0.1米的像素点。应用参数,采集图像。

    TyCameraResourcePanel

  6. 设置工具栏第三行的膨胀半径值20,表示将深度过滤后的彩色图进行膨胀运算,通常用于物体顶层边缘不完整时进行补全。应用参数,采集图像。

    TyCameraResourcePanel

图漾相机数据实时采集

使用 TyCameraResource 进行图漾相机型号为 FS820-E1 的点云和图像单次采集。

说明:本案例需要有图漾相机才可进行。

步骤1:算子准备

添加 TyCameraResource 、Trigger 、TyCameraAccess 算子至算子图。

步骤2:设置算子参数

  1. 设置 TyCameraResource 算子参数:

    • 自动启动 → 是

  2. 设置 TyCameraAccess 算子参数:

    • 点云 → icon_visOnicon_color-2

    • 彩色 → icon_visOn

步骤3:连接算子

image-20240814153710830

步骤4:运行

  1. 点击 RVS 运行按钮, TyCameraResource 资源算子连接成功。

  2. 成功后,触发 Trigger 算子。

    说明:若 Trigger 算子的循环 属性勾选为是,则会连续采集图像。

运行结果

  1. 打开 RVS 的运行按钮,TyCameraResource 算子会自动触发,并变为蓝色,日志栏会同时打印算子运行说明如下图所示,表示连接图漾相机成功。

    image-20240926150652345

  2. 下图为相机资源连接后属性面板参数,相机型号、相机、深度图标定文件、彩色图标定文件。

    image-20240926150718522

  3. 当触发 Trigger 算子后,TycameraAccess 运行完成后,在 2D 视图中显示采集时的图像。

    image-20240828105715951

  4. 在 3D 视图中显示采集时的点云。

    image-20240828105637604

图漾相机帧数据保存

TyFrameSave 算子用于保存图漾相机每帧拍摄的数据。选择保存路径后,每帧数据将以子文件的形式保存至该路径中。该算子还支持选择是否保存IR图像和TCP数据。

算子参数

  • 相机资源/Camera_resource:相机资源名。选择在 Resource Group 中添加的相机资源。

  • 保存路径/save_path:选择帧数据的保存路径,每组数据以子文件形式保存。

  • 保存IR图/save_ir:是否保存 IR 图像。

  • 保存TCP/save_tcp:是否保存 TCP 数据。

功能演示

使用 TyFrameSave 算子保存图漾相机帧数据。

步骤1:算子准备

添加 TyCameraResource、Trigger、TyFrameSave 算子至算子图。

步骤2:设置算子参数

设置 TyFrameSave 算子参数:

  • 相机资源 → TycameraResource

  • 保存路径 → icon_more→ 图漾相机帧数据

image-20240919150838836

步骤4:运行

  1. 点击 RVS 运行按钮,勾选属性面板中启动。 TyCameraResource 资源算子连接成功。

  2. 成功后,触发 Trigger 算子。

运行结果

  1. 打开 RVS 的运行按钮,勾选属性面板中启动,相机资源连接并变为蓝色,日志栏会同时打印算子运行说明如下图所示,表示连接图漾相机成功。

    image-20240919151023572

  2. 触发 Trigger 算子,完成一次帧数据保存。

    image-20240919151355282

  3. 查看文件夹中的数据,每帧数据将以时间戳命名的子文件夹形式保存至该路径中,如下图所示:

    image-20240919151534693

图漾相机帧数据加载

TyFrameLoad 算子用于加载图漾相机的每帧数据。根据选择的子目录索引和点云坐标系,输出点云、深度图、彩色图、IR 图和 TCP 数据。

算子参数

  • 目录/directory:指定数据主目录路径。

  • 子目录索引/sub_dir_index:指定起始加载子目录的索引。

  • 点云坐标系/cloud_coordinate:设置数据加载的点云坐标系,分为“DEPTH_COORDINATE”和“COLOR_COORDINATE”。

  • 加载IR图/load_ir:设置是否加载IR图。

  • 加载TCP/load_tcp:设置是否加载TCP。

  • 点云/cloud:设置点云在 3D视图中的可视化属性。

    • icon_visOn 打开点云可视化。

    • icon_visOff 关闭点云可视化。

    • icon_color 设置3D视图中点云的颜色。取值范围:[-2,360]。默认值:-1 。

    • icon_size 设置点云中点的尺寸。取值范围:[1,50] 。默认值:1 。

  • 深度图/depth_image:设置深度图在 2D 视图中的可视化属性。

    • icon_visOn 打开深度图可视化。

    • icon_visOff 关闭深度图可视化。

  • 彩色图/color_image:设置彩色图在 2D 视图中的可视化属性。

    • icon_visOn 打开彩色图可视化。

    • icon_visOff 关闭彩色图可视化。

数据信号输入输出

输出:

  • 点云 :

    • 数据类型:PointCloud

    • 输出内容:点云

  • 深度图 :

    • 数据类型:Image

    • 输出内容:深度图

  • 彩色图 :

    • 数据类型:Image

    • 输出内容:彩色图

  • 深度图标定参数 :

    • 数据类型:CalibInfo

    • 输出内容:深度图相机参数

  • 彩色图标定参数 :

    • 数据类型:CalibInfo

    • 输出内容:彩色图相机参数

功能演示

使用 TyFrameLoad 算子加载图漾相机帧数据。

步骤1:算子准备

添加 Trigger、TyFrameLoad 算子至算子图。

步骤2:设置算子参数

设置 TyFrameSave 算子参数:

  • 相机资源 → TycameraResource

  • 目录 → icon_more→ 图漾相机帧数据

  • 点云 → icon_visOn

  • 深度图 →icon_visOn

  • 彩色图 → icon_visOn

步骤3:连接算子

image-20240919173056857

步骤4:运行

点击 RVS 运行按钮,触发 Trigger 算子。

运行结果

在 3D 和 2D 视图中显示加载的点云、深度图、彩色图。

image-20240919173744980

TCP通讯

RVS 提供了 TCP服务器连接资源 。该算子属于资源类线程算子,用于在 RVS 的分线程中启动一个TCP服务器资源。

通过添加TCP服务器连接资源,使用 RVS 中 TCPServerReceive 算子(TCP服务器接收) 和 TCPServerSend 算子(TCP服务器发送) 来获取TCP服务器收到的消息 或 通过TCP服务器给已连接的客户端发出消息。

具体使用方法请参照算子在线文档。

TCPServerConnectionResource_demo1_11

点云滤波

降采样

DownSampling 算子,作用是对点云进行稀疏化处理。对于部分算子,少量稀疏的点云足以完成计算,过于稠密的点云只会降低算子执行效率,此时可以考虑首先对原始点云进行降采样稀疏化处理再进行后续运算。下面是一个 DownSampling 算子的连接示例。

image-20240815101821556

修改该算子属性面板中 X/Y/Z方向采样可以指定 xyz 轴方向点云重采样间距,此处指定为 0.005m ,表示在 0.005m * 0.005m * 0.005m 的空间尺度内仅取一个点。

image-20240815102217489

下图显示了过滤前后的点云。

downsampling_result

点数过滤

CloudFilter 算子,可以对输入的点云进行点数判断。可以修改 CloudFilter 的属性模式 ,该属性表示点云过滤的方法。

属性最小点数和最大点数数值,该属性指定了输入的点云点数的阈值。模式与点数数值配合,触发 finished ,否则触发 failed 。

image-20240815104130143

平面滤波

FindElement 算子,可以自动查找当前点云的对应的几何图形,并根据点到平面的距离阈值来过滤点云。type 属性包含:Plane 、Cylinder 、Sphere 、Circle 、Line 。 连接示例如下图所示。

image-20240815110003388

属性图如下。

image-20240815110417973

可以通过修改属性 距离阈值 来调整点云过滤的距离阈值,下图分别展示了原始点云 、查找平面后点云输出。

findelement_result

区域裁剪

CloudSegment 算子,类型属性包含:立方体切割、平面切割、XYZ切割、点轴切割、差异切割、NNPD切割。

立方体切割根据输入的立方体区域对点云进行切割,需要结合 Emit-Cube 算子使用。示例如下图所示。

image-20240815134519435

您可以通过调整 3D 视图中的 Cube 位置及大小来切割出所需要的点云区域。右图为切割出的点云。

cloudsegment_result

目标定位

定位目标上表面姿态

MinimumBounddingBox 算子,其作用是根据目标上表面点云来获取点云的最小立方体包围框。常用于箱包等物体的姿态定位。

注意:由于目标是上表面点云的最小矩形包围框,所以在进行 MinimumBounddingBox 算子计算之前,往往需要对点云进行平面查找(FindElement->平面)算子处理,目的是去除目标侧面上的点云。

该算子找到目标的最小立方体后,会将立方体的中心作为输出姿态的中心,将立方体的三个轴的方向 Hight-Width-Depth 作为输出姿态的三个轴 XYZ 的方向。

image-20240815140555387

上图中有个 ref_pose 数据端口。当连接 ref_pose ,结果 Cube 则会参照算子左侧的 ref_pose 端口输入的 pose 姿态进行 Hight - Width - Depth 同 X Y Z 的匹配。如果该端口不连接数据,则 Hight - Width - Depth 默认与 Pose(0,0,0,0,0,0) 中 X Y Z 匹配。

算子定位效果如下。

minimumboundingbox_result

中心定位

CloudProcess 算子中 type 属性为 CloudCentroid,作用是输入一个点云,输出点云的坐标中心。

注意:输出的姿态自动选择为基坐标系而不是沿着目标的长宽方向。

连接示例与效果如下图所示。

image-20240815145135923

cloudprocess_result

点云聚类

ClusterExtraction 算子。作用是根据设定的最小距离参数公差值(如下图属性图所示),将彼此间距超过该距离的两个目标点归为两类,间距小于该距离的点云归为一类,最终将多个目标点云彼此分开。另外,该算子还限制类每一个点云类别的点云最小数量与最大数量 。

image-20240815145223119

使用该算子时应该根据需要调整 tolerance 算子,下面两图中,分别展示了聚类前后的对比。(每个颜色对应一个类别)

clusterextracyionresult

坐标系说明与姿态变换

坐标系说明

RVS软件有一个自带的 3D 视图显示环境,该显示坐标系即 世界坐标系 BaseXYZ ,坐标原点 (0,0,0)。我们通过 Emit-Pose 等算子生成的 pose 全是基于 BaseXYZ 坐标系。

我们的仿真机器人是由数模文件定义的,机器人有一个自身的 基座坐标系 RobotXYZ ,由于制作机器人数模时我们都将机器人的基座坐标系同制作软件的世界坐标系保持对齐,所以在 RVS 软件中导入数模文件后,RobotXYZ 默认同 BaseXYZ 对齐。

图漾相机的 3D 点云图也有一个自带的坐标系,相机左 IR 坐标系 CameraXYZ 。当我们在 BaseXYZ 中显示 CameraXYZ 时,默认是将相机的左 IR 按照 Pose(0,0,0,0,0,0) 的姿态摆放的,所以此时 CameraXYZ 同 BaseXYZ 是同一个坐标系。但是这样的显示实际上毫无意义,我们需要找到相机在机器人坐标系下的空间姿态 pose_true,进而按照该姿态在 BaseXYZ 中矫正 CameraXYZ 坐标系。

另外我们相机拍摄的目标比如箱子,其本身也有一个物体坐标系 ObjXYZ 。该体坐标系即为该目标的 pose 。

RVS 软件中每一个 Pose(x,y,z,rx,ry,rz) 既表示一个姿态,又表示一个 4*4 坐标转化矩阵,xyz 代表该矩阵的平移量 rx/ry/rz 代表了矩阵的旋转量。

坐标变换

Transform算子,属性 类型坐标 ,示例如下。

image-20240816160320622

图中 Emit( TCP2robot )为机器人的法兰盘在机器人坐标系下的位姿(或者说转换矩阵),Emit( rgb2TCP )为手眼标定的结果,表示相机的 rgb 坐标系到机器人法兰盘坐标系的坐转换矩阵,前者连接到 Transform 算子的左侧 relative 端口,后者连接到 Transform 算子的左侧 base 端口,表示前者矩阵左乘后者矩阵,继而可得相机的rgb坐标系到机器人坐标系的转换矩阵,以 pose 的形式输出到 Transform 算子的右侧 transformed 端口。

另外,上图中的 Emit 算子( TCP2robot 以及 rgb2TCP ),不仅有一个 pose 端口输出,还有一个 inverse_pose 端口输出,后者表示前者的逆矩阵。

单位变换

Pose 的单位可以从米/毫米、角度/弧度之间相互切换,对应算子为 ScalePose 。设置其 XYZ比例 :0.001,即可从米切换为毫米。设置其 RPY 比例:0.01745329 即可将角度切换为弧度。类似的,可以反向切换。

image-20240816170757264

Pose 默认的旋转方式绕着 Z-Y-X 的顺序对不固定轴进行旋转,可以切换成欧拉角(绕着 X-Y-Z 的顺序对固定轴进行旋转),对应算子为 ConvertPose 算子中,类型属性为 EulerToPose 以及 PoseToEuler。

image-20240816170823466

AI模块

RVS 软件嵌入了前沿的 CNN 深度学习模块,可以对 rgb 图像进行目标检测、实例分割。我们分别提供了算子进行数据的训练与识别。

AITrain

image-20240815170357016

训练前需要进行数据集的准备,具体操作详见自动拆垛—AI训练模块。

标注 YOLOTrain 网络的训练数据时,如果目标是箱子这样的矩形目标,建议每一个目标只标注四个点。如果是多边形目标,可以标注任意多个点(实际运行时,算法会自动根据标注点来生成四个点的旋转矩形)。

注意:对于 YOLOTrain ,在训练时请确保至少使用两个类别的数据进行训练,单类别训练的效果较差。如果确实只有一个类别的数据,建议额外增加一个当前项目用不到的其他数据一起训练。

另外,为了保证训练效果,每一类的物体数量应不低于200个目标个数(一张图中一般会有多个目标)。

标注 KeyPoint 网络的训练数据时,有两类标注对象。

  1. 是标注目标本身,在 Labelme 软件标注时选择 “ 多边形 / PolyRect ” 的标注工具,每个标注点都必须沿着目标的轮廓,此时的标注方法等同于 MaskRCNN 网络的数据标注。

  2. 是目标内的关键点标注,在 Labelme 软件标注时选择 “点 / Point ”的标注工具,同时关键点的位置必须位于所属的目标内。比如我们的标注对象是桌子,设计的关键点是桌角,并且已经给桌子标注了一个四边形的区域,则此时给桌角标注关键点时,这个标注点必须在桌子所标注的四边形区域内部,不能在边界上,也不能在边界外。如果多个目标的标注区域有重叠,比如同时标注箱子以及箱子上面的条码区,则我们设计的关键点不允许标注在箱子条形码区域内,因为条形码区域是重叠区域。

AITrain 算子在实际执时,会自动对标注好的数据集进行格式转换并进行训练。目前 RVS 支持 3 类神经网络,分别是 MaskRCNN 、KeyPoint 、YOLOTrain。

在运行之前,需要手动新建一个以 “.txt” 结尾命名的类别标签文件。

对于 MaskRCNN 以及YOLOTrain 两类网络,其类别标签文件中,每一个类别单独占一行,比如: apple banana pear

上述的类别名称“ apple 、banana 、pear ”即为数据标注时所定义的实际类别名称,每一行的名称中不允许带有空格。

对于 KeyPoint 网络,其类别标签文件中每一行还可以额外包含有对应的关键点名称。如: pear banana top bottom orange

banana 后面的 top 以及 bottom 表示对于 banana 这一类目标,设置了两个关键点。

创建上述文件后,将该文件作为 AITrain 算子的 classnames_filepath 属性输入。并将标注好的训练数据所在的文件夹作为算子的 data_directory 属性输入。

该算子用于神经网络的训练,训练完成后会自动生成一个 train_output 的文件夹。而对于 RotatedYOLO 网络,训练结束后,一般需要 box_loss 降低到0.03以下才能达到较好的训练效果,且其训练完成后,会在 used_data / 目录下自动创建 train_output 文件夹,里面包含训练好的权重文件:

used_data

  • train_output

    • weights

    • best.pt

    • last.pt

其中,train_output 文件夹里面会基于最后的 best.pt ,随机选取一部分图像数据进行推理测试并将结果保存为图像文件,其中,val_batch? _ labels.jpg 是原始标注数据,对应的 val_batch?_pred.jpg 是推理数据,可以据此粗略查看训练效果。

更详细的算子属性说明请参照 AITrain 算子说明文档。

AIDetectGPU

image-20240816172047933

该算子可以调用 AITrain 算子在 MaskRCNN 以及 KeyPoint 网络下的训练结果,对于一张输入图像进行一次推理,进而获得目标检测或实例分割的结果。

MaskRCNNGPU 在同一个 RVS 中可以启动多个。使用该算子,必须安装 nvidia 的独立显卡,且显存不低于 4G 。

推理完成后,会将目标的推理掩码以图像列表的形式输出到 obj_list 输出端口,其中的每一张图像对应一个检测目标的掩码图。掩码图长宽同原图保持一致,并且是一张灰度图,背景灰度为 0,检测目标的位置区域用灰度 255 填充。

AIDetectGPU 算子除了输出掩码图列表以及结果显示图,还会输出所有推理结果的类名,均以 list 形式输出,里面的序号一一对应。额外的,对于 KeyPoint 网络,还额外给出每个目标含有的关键点信息列表(keypt_list)。

类名文件路径:对于 MaskRCNN 网络,可以直接使用训练时所用的类名文件,即以 txt 作为文件后缀(或者以 names 为文件名后缀),但是对于 RVS1.3 及以前旧版本的训练方式,也可以选择训练数据转换时生成的 annotations.json 文件作为该命名文件。而对于 KeyPoint 网络,只能选择训练过程中生成的annotations.json文件作为该命名文件。

权重文件地址:对于 RVS1.3 及以前旧版本的训练方式,该属性不应该输入任何参数。对于现有的训练方式,在该属性中输入训练时所生成的 train_output/config.yaml 文件。

更详细的算子属性说明请参照 AIDetectGPU 算子说明文档。

AIDetectCPU

image-20240816172621492

该算子适用于没有 nvidia 显卡的纯 cpu 机器推理使用。参数与 AIDetectGPU 一致。

更详细的算子属性说明请参照 AIDetectCPU 算子说明文档。

YOLODetect

image-20240816172644054

该算子可以调用 AITrain 算子在 YOLOTrain 网络下的训练结果,对于一张输入图像进行一次推理,进而获得目标检测结果。该算子在同一个 RVS 中可以启动多个。该算子支持 GPU 以及 CPU 两种模式,使用该算子的 GPU 模式,必须安装 nvidia 的独立显卡。

YOLODetect 深度学习模块同 AIDetectGPU/AIDetectCPU 推理算子彼此不互斥,也同 python 算子不互斥,且均可以在同一个 RVS 软件中运行多个。

由于 YOLODetect 模型相对简单,则推理速度更快,但是相应的,其训练收敛所需要的标注数据也会远大于 MaskRCNN ,每次训练的时长也往往大于 3 个小时,并且最终的目标推理精度相比与 MaskRCNN 也会有所欠缺。

更详细的算子属性说明请参照 YOLODetect 算子说明文档。

ProjectMask

image-20240815165359799

ProjectMask 算子可以把 AI 算子的 rgb 目标分割结果转换到点云图中,进而生成多个目标点云列表 cloudlist 。更详细的算子属性说明请参照 ProjectMask 算子说明文档。

ProjectPoints

ProjectPoints 算子可以把 rgb 图像中的像素点转换到点云中的 3D 点(以坐标形式呈现),进而生成一系列的坐标列表。

image-20240815163737187

更详细的算子属性说明请参照 ProjectPoints 算子说明文档。

机器人仿真

仿真机器人资源算子

RVS 软件已为国内外多款常用机器人创建仿真数模,文件格式为“ *.rob ”,并且数模文件库还在不断扩大更新中。通过数模文件,可以在 RVS 软件内控制机器人仿真移动与姿态控制。

在算子列表中找到机器人仿真控制资源算子,将该算子放置到 ResourceGroup 中。

image-20240815150052815

一般需要将机器人的自动启动(机器人资源自动运行)、打开机器人可视化属性。另外,在运行之前需要将机器人模型文件属性更改为自己需要的机器人 rob 文件(如果在 runtime 目录中没有找到所需的 rob 文件,可以向图漾技术支持人员申请所需的机器人数模文件。)。同时如果为机器人定制了夹具吸盘等工具,可以在工具模型属性中添加进去。控制速度的四个属性:

  • 最大关节速度:用于控制机器人 MoveJoints 时的关节最大速度。单位:弧度每秒。

  • 最大关节加速度:用于控制机器人 MoveJoints 时的关节最大加速度。单位:弧度每平方秒。

  • 最大线性速度:用于控制机器人线性运动时的最大线速度。单位:米每秒。

  • 最大线性加速度:用于控制机器人线性运动时的线速最大加速度。单位:米每平方秒。

    机器人运行后的显示画面效果如图所示。

robot

机器人控制面板

鼠标双击上 3D 视图中的机器人,可以弹出机器人控制面板:

robotpanel

可以通过在关节值编辑栏(上图黄色框)中输入对应的角度来调整机器人关节角度,也可以直接拖动右侧的浮标(上图绿色框)控制机器人关节转动。也可以转动旋钮来调节姿态 x 、y 、z 、rx 、ry 、rz ,如上图红色框所示。所有的当前姿态 pose 数值会在上方蓝色框显示出来,并且可以调节显示单位(上图紫色框)。

还可以主动控制机器人移动到某个位置,继而再查看此时的姿态。首先单击 RVS 软件左上角的停止 键,然后勾选上图蓝色框中的 ROBOT TCP,此时可以查看到机器人末端的 TCP pose 姿态,如下图所示。拖动图上的这些箭头,可以带动整个机器人进行移动。移动过程中的机器人姿态信息可以随时在控制面板中查阅。

tool1

通过算子控制机器人仿真移动

在项目实际使用时,往往是已知目标位姿,需要将机器人移动过去进行仿真显示,此时可以使用 RobotMovement移动TCP 算子,如下图所示。使用时,需要将机器人移动前的关节坐标连接到左侧 ref_joint,并将需要移动的目标姿态(或者姿态列表)连接到左侧 goal_pose ,运行完成后,会将机器人移动后的关节坐标输出到右侧 ik_solution_joint 。可以调整算子的速度以及加速属性来调整算子当前运动的速度和加速度。调整 线性运动 属性来决定是否直线运动。

image-20240815160821078

如果已知机器人需要移动到某个位置的关节坐标,则可以使用 RobotMovement 中 移动关节 算子。使用时,需要将机器人需要移动的关节坐标连接到左侧 关节输入端口

image-20240815161638169