知识库
RVS 软件涉及到一些重要的概念和术语,以下是一些解释:
-
算子
:RVS 中一个重要的概念,它们对应着具体的任务或功能。例如,Load 算子可以进行对 Cube、Image、PointCloud 等元素的加载。Emit 算子可以生成Cube、Line、Circle 等元素。算子通过相互连接可以实现任务的整合和处理。 -
Group
:在 RVS 中,可以将多个算子绑定成一个 Group,提高算子的复用性和可维护性。 -
XML
:XML 文件是 RVS 中的重要配置文件。它包含了整个项目的结构信息、算子的输入输出信息、界面配置等内容。在使用 RVS 开发项目时,需要根据实际需求编写并保存对应的 XML 文件。 -
资源
:用于硬件设备或者虚拟设备同 RVS 进行交互。如果需连接相机,需添加 TyCameraResource 资源算子,连接成功后,可以进行图像、点击采集等操作。总之,RVS 是一个基于算子的 3D 机器视觉开发平台,通过 XML 配置文件和资源的规范化管理,实现了算法流程的组织、管理和可视化。
算子库
-
2D 算子(2D):用于 2D 图像处理。
-
3D 算子(3D):用于 3D 图像处理。
-
基础算子(Basic):基础算子。例如加载元素、保存元素、遍历元素等。
-
拆垛算子(Box Unstack):用于拆垛。
-
标定算子(Calibration):用于不同形式的标定算法。
-
通讯算子(Communication):用于同不同机器人,工控机之间的通讯。
-
文件操作算子(File):用于系统文件管理。
-
几何模型探测算子(Geometry Detection):用于圆柱和平面的探测和过滤。
-
点云模板匹配算子(ICP):用于 icp 算法进行模板匹配。
-
机器人运动规划算子(Motion Planning):用于机器人机械臂运动规划。
-
Python算子(Python):用于 AI 的训练和推理,python 的二次开发。
-
机器人算子(Robot):用于控制模拟机器人的运动行为以及主要模型生成。
-
多边形表面算子(Surface):用于 polydata 的数据处理。
-
图漾相机算子(Tycamera):用于控制管理图漾原生相机和SDK。
-
UR机器人算子(Universal Robots):用于 UR 机器人的主动控制。
-
资源类算子(Resource):用于硬件设备(包含虚拟设备)同 RVS 的交互。
各个算子可以在算子介绍中查询使用。
控制信号
算子橙色的 ▶为控制信号端口,控制信号端口不区分类型类别,可以相互连接。
▶ 端口名 | 功能 |
---|---|
start | 触发算子。 |
finished | 该算子被触发并成功运行,此时算子的 finished 端口会发出触发信号,若 finished 连到下一个算子,则会触发下一个算子。 |
failed | 该算子已经被触发,并且运行完成,但是没有获得预期的输出结果,此时该算子的 failed 端口会给出触发信号。 |
stop | 暂停算子运行。 |
reset | 重置算子。 |
iterate | 迭代运行。 |
started | 左侧 start 端口被触发的情况下,此时右侧的 started 信号会被触发。 |
processing | / |
stopped | 当触发 stop 端口时,该端口被触发。 |
reset | 当触发 reset 端口时,该端口被触发。 |
iterated | 当触发 iterate 端口时,该端口被触发。 |
数据信号
天蓝色的 ● ■ 为数据信号端口,● 为单个数据, ■ 为列表数据。数据端口有数据类型的区别,常用的端口包括点云 cloud 、图像 image 、字符串 string 、坐标 pose 、立方体 cube 以及各自对应的列表数据如 cloud_list 、image_list 等。只有相同类型的数据端口才能相互连接。
常用的数据类型对应的端口如下。
数据类型 | ●■ 端口名 | 名称 |
---|---|---|
Image/ImageList | image/image_list | 图像/图像列表 |
ImagePoints/ImagePointList | image_points/image_points_list | 图像点/图像点列表 |
Pose/PoseList | pose/pose_list | 坐标/坐标列表 |
JointArray/JointArrayList | joint/joint_list | 关节值/关节值列表 |
Cube/CubeList | cube/cube_list | 立方体/立方体列表 |
Sphere/SphereList | sphere/sphere_list | 球体/球体列表 |
Angle/AngleList | angle/angle_list | 夹角/夹角列表 |
Circle/CircleList | circle/circle_list | 圆圈/圆圈列表 |
Line/LineList | line/line_list | 线段/线段列表 |
Path/PathList | path/path_list | 路径/路径列表 |
PointCloud/PointCloudList | cloud/cloud_list | 点云/点云列表 |
Cylinder/CylinderList | cylinder/cylinder_list | 圆柱体/圆柱体列表 |
String/StringList | string/string_list | 字符串/字符串列表 |
PolyData/PolyDataList | polydata/polydata_list | 多边形/多边形列表 |
Object/ObjectList | object/object_list | 物体/物体列表 |
Text/TextList | text/text_list | 文本/文本列表 |
CameraInfo | camera_info | 相机信息 |
CalibInfo | calib_info | 相机标定信息 |
RobotInfo | robot_info | 机器人信息 |
RotatedRect | rect/rect_list | 矩形/矩形列表 |
MotionPlan | motion | 运动规划 |
PlannedGrasp | grasp/grasp_list | 规划抓取策略/规划抓取策略列表 |
坐标系说明
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 坐标转换矩阵。
这个姿态包含了平移和旋转信息:
-
(x, y, z)表示矩阵的平移量,即物体在三维空间中的位置。
-
(rx, ry, rz)表示矩阵的旋转量,即物体相对于参考坐标系的旋转角度。
欧拉角介绍
在三维空间中,坐标系绕原点旋转具有三个自由度,因此需要三个独立的旋转参数来描述。欧拉角是一种常用的旋转参数表示方法,最早由欧拉提出。
它由三个角度组成,分别称为滚动角(roll)、俯仰角(pitch)和偏航角(yaw)。
相比于方向余弦矩阵和四元数,欧拉角表示法具有以下优点:参数数量最少,只需要三个角度;物理含义更直观,更容易理解。
欧拉角的旋转方式采用不定轴旋转,即旋转轴随着旋转而变化。欧拉角的定义并不唯一,根据坐标系绕其坐标轴旋转的顺序不同,存在多种不同的定义方式。
欧拉角可以分为两大类,经典欧拉角和泰特布莱恩角。其中,泰特布莱恩角更为普遍使用。这两种欧拉角根据旋转顺序可分为如下12种:
经典欧拉角:Z-X-Z,Z-Y-Z,X-Y-X,X-Z-X,Y-X-Y,Y-Z-Y
泰特布莱恩角:X-Y-Z,X-Z-Y,Y-X-Z,Y-Z-X,Z-X-Y,Z-Y-X
在 RVS 中,姿态的旋转角定义采用的是 Z-Y-X 顺序,即先绕 Z 轴旋转 yaw,再绕旋转后的 Y 轴旋转 pitch,最后绕旋转后的 X 轴旋转 roll。
这种旋转方式遵循右手坐标系法则,旋转角的单位为弧度。
RVS 中 Pose 的旋转顺序如下图所示: