# mt_robot_framework **Repository Path**: ikunCtrl/mt_robot_framework ## Basic Information - **Project Name**: mt_robot_framework - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-15 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mt_robot_framework `mt_robot_framework` 是面向 Windows、MSVC 2022 x64 和 C++20 的多厂商机器人核心动态库。主要产物 `mt_robot_framework.dll` 通过统一的 `mt::robot::IRobot` 提供连接、原生状态、实时 TCP、程序管理、工程点位和程序变量 Session,并将厂家 SDK 类型限制在动态库内部。 仓库中的业务模块建立在核心公共 API 之上。业务是否支持某种机器人由业务自己的 Profile 决定;核心适配器可用,不代表该机器人自动支持所有业务。Qt GUI 仅用于接口联调和业务验证。 ## 支持矩阵 | 能力 | 智流行 IMF / 钱江 | 珞石 Rokae / xCoreSDK | |---|---|---| | 核心适配器 | 支持 | 可选构建,支持六轴 `xMateRobot` | | 原生状态与实时 TCP | 支持 | 支持 | | 程序上传与启动 | 支持 | 支持 RL 工程导入与启动 | | 正式停止程序 | 支持 | 不支持,SDK 没有等价接口 | | 通用编号 IO 诊断 | 支持 | 不支持,SDK 使用命名工程变量 | | 程序变量 Session | 编号寄存器、DI/DO、GVar、工程数值变量 | 命名 RL 工程变量 | | 工程点位读取 | 支持 P 点 | 支持 `pN` 笛卡尔工程变量 | | 手眼标定结果读取 | 支持,默认 `TaskLaserTrackCaliSetting_1` | 支持,默认 `laserhandeyedata1` | | 多层多道业务 | 支持 | 未实现 Profile,返回业务不支持 | 准确能力以 `IRobot::supports()` 为准。IMF 的正式暂停和继续能力关闭,但保留厂家命令状态迁移诊断;Rokae 的能力边界见[珞石 Rokae 适配器](docs/适配器/珞石_Rokae.md)。 ## 架构 ```mermaid flowchart LR App["上位机应用"] Business["业务模块
Workflow / Profile / Renderer"] subgraph Core["mt_robot_framework.dll"] Api["公共 API
IRobot / RobotProgramSession"] Adapters["内置适配器
IMF / Rokae"] end Vendor["厂家运行库"] Robot["机器人控制器"] Gui["GUI 测试工具
可选"] App --> Api App --> Business --> Api Api --> Adapters --> Vendor --> Robot Gui -.-> Api Gui -.-> Business ``` - `mt_robot_framework_shared` 生成主要运行库 `mt_robot_framework.dll`;适配器源码直接编译进该 DLL,不是独立插件。 - `imf_api.dll`、`xCoreSDK.dll` 是适配器使用的厂家运行库,不进入公共类型系统。 - 业务目标位于核心 DLL 外部,只依赖 `mt_robot_framework` 公共 API。 - Profile 将业务逻辑信号映射到具体厂家的程序变量,并同步生成程序正文、点位和 Manifest。 - `RobotState` 和 `RobotTelemetry` 只来自厂家 SDK 原生快照;扫描阶段、焊接段/层/道由业务 Session 解释。 完整组件关系、编译与运行时依赖、调用时序和扩展模型见[总体方案设计](docs/总体方案设计.md)。 ## 核心能力 - 统一的机器人生命周期、能力查询和显式错误返回。 - 单次 SDK 快照生成机器人状态、TCP XYZ/RPY 和 Base→TCP 变换矩阵。 - 状态变化订阅和每轮成功采样的实时遥测订阅。 - 适配器自描述的 IO 来源、类型、读写权限和地址范围。 - 工程示教点批量读取及坐标系、构型、工具、工件和外部轴元数据。 - 按名称读取统一的 `TCP ← Camera` 手眼标定齐次变换,平移单位为毫米。 - 程序查询、上传、启动及厂家确实支持的控制能力。 - 类型化、白名单式、单活动实例 `RobotProgramSession`。 - UTF-8 公共字符串和保留厂家详情的 `RobotError`。 核心不提供任意控制器变量自动枚举,不使用业务变量推断机器人本体状态,也不把语义不同的厂家接口包装成同一种公共能力。 ## 依赖与构建 | 依赖 | 用途 | 位置 | |---|---|---| | IMF SDK | IMF 适配器 | `third_party/imf` | | MySQL Connector/C++ JDBC | IMF 手眼标定数据库读取 | `third_party/mysql-connector-c++-26.7.0-winx64`,官方二进制包被 Git 忽略 | | Rokae xCoreSDK 0.5.0 | Rokae 适配器 | `third_party/librokae-v0.5.0.C130_40`,本地目录被 Git 忽略 | | `mt_coordinate` | 位姿和坐标变换 | 仓库构建使用 `third_party/mt_coordinate`;安装包消费者通过独立 CMake package 提供 | | spdlog | 适配器日志 | Git submodule | | GoogleTest | 自动测试 | Git submodule,生产配置默认关闭、开发回归显式启用 | | Qt 6.8.3 | 可选 GUI 测试工具 | 仅启用 GUI 时需要 | 核心动态库、静态辅助目标、适配器和无界面业务不依赖 Qt。 准备子模块和本地 Rokae SDK 后运行: ```bat git submodule update --init --recursive build.bat ``` `build.bat` 使用规定的 MSVC、CMake 和 Ninja 环境完成标准 Release、启用 Rokae 的无 Qt 构建、关闭 Rokae 的无 Qt 构建,并安装标准配置。具体命令和新增模块方法见[开发指南](docs/开发指南.md)。 常用选项: | 选项 | 默认值 | 说明 | |---|---:|---| | `MT_ROBOT_FRAMEWORK_ENABLE_ROKAE` | `ON` | 是否编译 Rokae 适配器 | | `MT_ROBOT_FRAMEWORK_BUILD_BUSINESS_MULTI_LAYER_MULTI_PASS` | `ON` | 是否编译多层多道业务 | | `MT_ROBOT_FRAMEWORK_BUILD_GUI_TESTS` | `ON` | 是否编译 Qt GUI 测试工具 | | `MT_ROBOT_FRAMEWORK_BUILD_TESTS` | `OFF` | 是否构建并注册自动测试 | | `ROKAE_SDK_DIR` | 仓库内厂家包目录 | 可覆盖的 xCoreSDK 根目录 | ## 构建产物 默认安装根目录为 `install`。核心 SDK 与业务 SDK 是两个并列交付包: ```text install/ ├─ mt_robot_framework/ │ ├─ bin/ 核心 DLL、PDB 和厂家 runtime │ ├─ include/mt_robot_framework/ 核心公共头文件 │ ├─ lib/ 核心库和 CMake package │ └─ tools/robot_gui_test/ 可选通用 GUI 自包含目录 └─ businesses/ └─ multi_layer_multi_pass/ ├─ include/multi_layer_multi_pass/ 业务公共头文件 ├─ lib/ mt_robot_businesses_mlmp.lib 和 CMake package └─ GUI/ 可选业务联调程序自包含目录 ``` `mt_robot_framework` 目录只包含 `bin`、`include`、`lib` 和可选的 `tools`。它不内置 `mt_coordinate` 或业务 SDK;`mt_robot_frameworkConfig.cmake` 使用标准 `find_dependency(mt_coordinate CONFIG REQUIRED)`。多层多道 Config 只查找直接依赖 `mt_robot_framework`。依赖位置由使用方通过标准 CMake 搜索路径提供。 GUI 目录中的核心 DLL、厂家 runtime 和 Qt runtime 是工具运行副本;核心 `bin` 不包含 GUI EXE 或 Qt 文件。业务是静态库,因此业务包没有 `bin` 目录。 ## 使用核心动态库 安装后通过 CMake package 链接主要动态库目标: ```cmake find_package(mt_robot_framework CONFIG REQUIRED) target_link_libraries(my_target PRIVATE mt_robot_framework::shared) ``` 最小调用示例: ```cpp #include mt::robot::RobotConnectionConfig config; config.vendor = mt::robot::RobotVendor::IMF_QIANJIANG; config.ip = "192.168.1.2"; config.port = 23333; config.adapter_options["udp_port"] = "23334"; config.program_storage_directory = "robot_project"; auto created = mt::robot::createRobot(config); if (!created.has_value()) { return; } std::unique_ptr robot = std::move(*created); if (const auto connected = robot->connect(); !connected.has_value()) { return; } const auto telemetry = robot->getRobotTelemetry(); if (telemetry.has_value()) { // state、tcp_pose 和 base_to_tcp 来自同一次 SDK 采样。 } ``` 公共 API 返回的 `std::string` 均为 UTF-8。调用可选操作前应查询 `supports()`,并检查每个 `RobotResult`。 `mt_robot_framework::static` 作为辅助静态链接目标保留;使用时还需要满足对应厂家 SDK 的静态消费者链接要求。 ## 使用多层多道业务 多层多道业务通过独立 CMake package 交付: ```cmake find_package(mt_robot_businesses_mlmp CONFIG REQUIRED) target_link_libraries(my_target PRIVATE mt_robot_businesses_mlmp) ``` 业务 Config 会通过标准 `find_dependency(mt_robot_framework CONFIG REQUIRED)` 获得核心目标。业务公共 C++ API 位于: ```cpp namespace mt::robot_framework::businesses::multi_layer_multi_pass { // ProgramPackage、ScanWorkflow、WeldExecutionSession 等。 } ``` ## 文档索引 - [总体需求说明](docs/总体需求说明.md) - [总体方案设计](docs/总体方案设计.md) - [总体接口说明](docs/总体接口说明.md) - [总体测试说明](docs/总体测试说明.md) - [开发指南](docs/开发指南.md) - [智流行 IMF 适配器](docs/适配器/智流行_IMF.md) - [珞石 Rokae 适配器](docs/适配器/珞石_Rokae.md) - [多层多道业务](docs/业务/多层多道/需求说明.md) - [GUI 测试工具](docs/工具/GUI测试程序.md)