Windows-C++ 二次开发实现

当您成功安装 RVS 时,Windows 版本的二次开发案例代码已存放在 RobotVisionSuite\rvs_sdk\RvsPluginNodeExample 中。

Windows 二次开发代码案例与 Linux-C++ 中案例类似,如注册算子端口、定义算子属性等,请参考 Linux-C++ 二次开发实现

本章节将详细介绍 Windows 中如何进行编译,与如何在 RVS 软件中使用二次开发算子。

image-20240220141544486

rvs 加载自定义算子由 rvsPluginFactory (算子包,一个dll文件)实现算子注册,在启动时加载该包中的所有算子。 此工程中的算子包文件为 “NodeExampleLib.cpp/.h” ,用于管理或注册该包中的所有算子。 算子包名为项目名(rvs_plugin_nodeExample),该名称决定了算子包的名称。

注意:包名必须使用 “rvs_plugin_” 前缀。

算子为继承于 rvs::Node 的 class ,通过覆写其中的 Process() 函数实现自定义功能。

此工程中包含算子文件如下 (.cpp/.h)

  • “HelloRvsPluginNode”

  • “EmitPosePluginNode”

  • “LineDetectorPluginNode”

  • “LoadImagePluginNode”

  • “LoadPointCloudPluginNode”

  • “VoxelGridPluginNode”

注意:尾缀为 “PluginNode”。
编译所需环境为 RVS 安装后,安装目录下的 rvs_sdk 文件夹,具体目录为 *$(RVS_ROOT)\\rvs_sdk*,其中 `$(RVS_ROOT)` 为 RVS 安装目录,安装过程中该值自动写入环境变量。

此工程加载开发环境的方式为 视图->其他窗口->属性管理器->右击 Release|x64-> 添加现有属性表->手动找到安装目录 /rvs_sdk 里面的 rvsPluginNode.props

image-20240223101808293

注意:rvs_sdk不包含 pdb 和三方库的 debug 库,因此仅推荐在 Release 模式下编译运行。

代码解析

参照案例代码中HelloRvsPluginNode.cpp/.h文件,新建一个类,类名尾缀 PluginNode,继承 rvs::Node,实现实例化和 Process() 函数。

本案例作用为简单日志输出,若想要深入学习,请参考 Linux-C++ 二次开发实现中函数接口介绍、代码解析。

HelloRvsPluginNode.h

#pragma once
#include "rvs_plugin/Node.h"

class HelloRvsPluginNode : public rvs::Node
{
public:
	HelloRvsPluginNode();
protected:
	virtual int Process() override;
};

HelloRvsPluginNode.h

#include "HelloRvsPluginNode.h"
#include "rvs_plugin/rvsLoggingCN.h"


HelloRvsPluginNode::HelloRvsPluginNode()
	: rvs::Node("HelloRvs")
{
}

int HelloRvsPluginNode::Process()
{
	RVS_PLUGIN_NODE_LOG(info,
		"Hello,RVS","你好,RVS");
	return 1;
}

在算子包文件中(NodeExampleLib.cpp)注册二次开发的算子。

image-20240220165017923

编译

注意

此项目为 VS2019(vc142)项目包。如果您想在其他更高版本的 VS 中(例如 2022(vc143))使用,请在 VisualStudioInstaller 中安装 VC142 编译环境。然后,选择项目(不是解决方案)右键属性->常规->平台工具集-> vc142,或者将该项目重定向到 vc143。

如下图所示:

image-20240205165610718

编辑步骤:

在解决方案资源管理器中右击rvs_plugin_nodeExample 工程,选择生成

image-20240220155330864

预期结果:

生成文件 rvs_plugin_nodeExample.dll,文件位置在该解决方案目录下的 rvsPluginNodeExample\x64\Release 文件夹中。

image-20240205171553298

生成失败:

假如报错 找不到 rvs_xxx.h,检查模式为 release 64 并且属性表已经加载,属性表中的目录有效,指通过环境变量 $(RVS_ROOT) 找到 rvs_sdk 目录。

假如报错 attribute 之类的,见解决方案/工程的新建和移植

使用二次开发算子

找到生成的 dll 文件,拷贝到 RVS 安装目录里的 RvsResources\lib 目录下。image-20240205171437537 启动或重新启动 RVS,即可在算子列表找到该算子库。

image-20240205175143269

解决方案/工程的新建和移植

新建 c++ 工程,选择控制台应用项目模板。

image-20240223100848289

对于工程名,应使用前缀“rvs_plugin_”,如果没有添加该前缀,可以通过重命名进行修改。

点击创建

image-20240223102211126

创建完成后,需要进行项目配置。

  1. 右击项目名-> 属性->常规->配置类型->动态库(.dll)

    image-20240223101145757

  2. 右击项目名->属性->c/c++ ->预处理器->预处理器定义 添加以下内容:

    RVS_WINDOWS_VERSION
    BOOST_ALL_DYN_LINK
    \_CRT_SECURE_NO_WARNINGS
    

    image-20240223103436453

  3. 加载开发环境:。

    • 视图->其他窗口->属性管理器。

    image-20240223101425306

    • 右击 Release|x64->添加现有属性表。

      image-20240223101719917

    • 手动找到RVS安装目录/rvs_sdk里面的”rvsPluginNode.props”,点击打开

    image-20240223101808293

参照NodeExampleLib.cpp/.h文件编写算子包文件。

参照HelloRvs.cpp/.h文件编写算子文件

参照本手册编译运行。