.NET6如何构建WPF框架下的现代三维工业机器人软件?

2026-05-23 16:121阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计933个文字,预计阅读时间需要4分钟。

.NET6如何构建WPF框架下的现代三维工业机器人软件?

基于原文介绍,Ribbon界面、组件化、MVVM模式等内容,我们构建了一个软件框架。本框架将整合相关内容至RapidCAX框架中,实现一个简单的机器人正向模拟模块。

基于前文介绍的Ribbon界面、插件化、MVVM模式等内容,我们搭建了一个软件雏形。本文将综合之前的内容在RapidCAX框架中集成Robot组件,实现一个简单的机器人正向模拟模块。

基于前文介绍的Ribbon界面、插件化、MVVM模式等内容,我们搭建了一个软件雏形。本文将综合之前的内容在RapidCAX框架中集成Robot组件,实现一个简单的机器人正向模拟模块。

1 目标

基于MVVM模式在RapidCAX中增加以下的机器人交互界面:

  • 加载机器人模型后,在左侧的目录树里面显示机器人模型的名称
  • 在目录树中选中机器人节点后,在右侧的属性面板中显示机器人的配置参数
  • 修改机器人的关节参数,更新机器人模型,实现正向模拟
2 整体设计

总体上采用插件机制,即机器人模块Rapid.Robot.Plugin依赖主程序Rapid.CAX.exe,主程序动态加载机器人模块。

模块内采用MVVM架构,以分离界面和逻辑实现。

命名约定:

  • ProjectBrowser:项目目录树
  • PropertyView: 属性面板

交互过程

  • 点击加载机器人命令由RobotViewModel处理,加载模型并显示
  • RobotViewModel监听ProjectBrowerViewModel的选择修改,并创建PropertyView和PropertyViewModel
  • 修改属性后,RobotPropertyView通知RobotModel更改机器人关节参数,并更新视图
3 具体实现

Rapid.Robot.Plugin项目创建,Ribbon界面创建过程这里不再赘述,可以参考之前的内容创建。

3.1 机器人描述

单模型多机械臂的结构设计,详细参照 样例模型

3.2 模型加载

由MachineTemplate类实现,具体参考代码实现。
加载后创建RobotModel对象。

//RobotViewModel.cs var template = AnyCAD.Robot.MachineTemplate.Load(dlg.FileName, (int progress) => { //TODO: }); if (template == null) { MessageBox.Show("打开配置文件失败"); return; } var robot = template.CreateInstance(); viewer3d.ShowSceneNode(robot); mRobotControl = new RobotModel(robot); viewer3d.ShowSceneNode(mRobotControl.TrackingPath); var treeNode = new BrowserTreeNode { DisplayName = mRobotControl.Name, Tag = mRobotControl }; MainWindow.Instance()?.ProjectBrowser.TreeNodes.Add(treeNode); 3.3 动态创建属性

RobotViewModel收到选择了机器人后,动态创建RobotPropertyView并挂接到属性面板上。

//RobotViewModel.cs void OnSelectionChagned(object? sender, PropertyChangedEventArgs e) { var pbCtrl = MainWindow.Instance()?.ProjectBrowserCtrl; if (pbCtrl == null) return; var node = (BrowserTreeNode)pbCtrl.SelectedItem; if(node == null) return ; if(node.Tag == mRobotControl && mRobotControl!=null) { var panel = MainWindow.Instance()?.PropertyPanel; if(panel != null) panel.Content = new RobotPropertyView(mRobotControl); } } 3.4 机器人关节修改

机器人控制和模拟在《一种机器人运动模拟装置》一文中做了比较详细的介绍,这里不再赘述。

以更改参数A属性为例,ViewModel部分代码如下:

//RobotPropertyViewModel.cs private uint mBaseOffset = 1; //用来调整轴的起始位置偏移 public double A { get => mRobot.GetVariable(mArmIndex, 0+ mBaseOffset); set=> SetProperty(0 + mBaseOffset, value, nameof(A)); } Vector3 mFinalPosition = new Vector3(0); void SetProperty(uint idx, double val, string name) { var old = mRobot.GetVariable(mArmIndex, idx); var delta = val - old; if(SetProperty(ref old, val, name)) { // 更新关节参数 mRobot.AddVariable(mArmIndex, idx, delta); var viewer3D = MainWindow.Instance()?.Viewer3D; viewer3D?.RequestDraw(EnumUpdateFlags.Scene); // 计算末端点的位置 var trf = mRobot.GetFinalPosition(mArmIndex); mFinalPosition.x = mFinalPosition.y = mFinalPosition.z = 0; mFinalPosition.applyMatrix4(trf); // 增加路径点 mRobot.AddTrackingPoint(mFinalPosition); // 更新界面 OnPropertyChanged(nameof(FinalPositionX)); OnPropertyChanged(nameof(FinalPositionY)); OnPropertyChanged(nameof(FinalPositionZ)); } } 4 总结

本文涉及的内容主要是前文几部分的综合应用,这里主要列举了关键的代码实现,详细的代码实现可以从gitee上Rapid.CAX项目上下载。

最终效果如下:

www.bilibili.com/video/BV1Pu411q7JK/

.NET6如何构建WPF框架下的现代三维工业机器人软件?

希望本文可以对大家开发机器人应用有所启发~

本文共计933个文字,预计阅读时间需要4分钟。

.NET6如何构建WPF框架下的现代三维工业机器人软件?

基于原文介绍,Ribbon界面、组件化、MVVM模式等内容,我们构建了一个软件框架。本框架将整合相关内容至RapidCAX框架中,实现一个简单的机器人正向模拟模块。

基于前文介绍的Ribbon界面、插件化、MVVM模式等内容,我们搭建了一个软件雏形。本文将综合之前的内容在RapidCAX框架中集成Robot组件,实现一个简单的机器人正向模拟模块。

基于前文介绍的Ribbon界面、插件化、MVVM模式等内容,我们搭建了一个软件雏形。本文将综合之前的内容在RapidCAX框架中集成Robot组件,实现一个简单的机器人正向模拟模块。

1 目标

基于MVVM模式在RapidCAX中增加以下的机器人交互界面:

  • 加载机器人模型后,在左侧的目录树里面显示机器人模型的名称
  • 在目录树中选中机器人节点后,在右侧的属性面板中显示机器人的配置参数
  • 修改机器人的关节参数,更新机器人模型,实现正向模拟
2 整体设计

总体上采用插件机制,即机器人模块Rapid.Robot.Plugin依赖主程序Rapid.CAX.exe,主程序动态加载机器人模块。

模块内采用MVVM架构,以分离界面和逻辑实现。

命名约定:

  • ProjectBrowser:项目目录树
  • PropertyView: 属性面板

交互过程

  • 点击加载机器人命令由RobotViewModel处理,加载模型并显示
  • RobotViewModel监听ProjectBrowerViewModel的选择修改,并创建PropertyView和PropertyViewModel
  • 修改属性后,RobotPropertyView通知RobotModel更改机器人关节参数,并更新视图
3 具体实现

Rapid.Robot.Plugin项目创建,Ribbon界面创建过程这里不再赘述,可以参考之前的内容创建。

3.1 机器人描述

单模型多机械臂的结构设计,详细参照 样例模型

3.2 模型加载

由MachineTemplate类实现,具体参考代码实现。
加载后创建RobotModel对象。

//RobotViewModel.cs var template = AnyCAD.Robot.MachineTemplate.Load(dlg.FileName, (int progress) => { //TODO: }); if (template == null) { MessageBox.Show("打开配置文件失败"); return; } var robot = template.CreateInstance(); viewer3d.ShowSceneNode(robot); mRobotControl = new RobotModel(robot); viewer3d.ShowSceneNode(mRobotControl.TrackingPath); var treeNode = new BrowserTreeNode { DisplayName = mRobotControl.Name, Tag = mRobotControl }; MainWindow.Instance()?.ProjectBrowser.TreeNodes.Add(treeNode); 3.3 动态创建属性

RobotViewModel收到选择了机器人后,动态创建RobotPropertyView并挂接到属性面板上。

//RobotViewModel.cs void OnSelectionChagned(object? sender, PropertyChangedEventArgs e) { var pbCtrl = MainWindow.Instance()?.ProjectBrowserCtrl; if (pbCtrl == null) return; var node = (BrowserTreeNode)pbCtrl.SelectedItem; if(node == null) return ; if(node.Tag == mRobotControl && mRobotControl!=null) { var panel = MainWindow.Instance()?.PropertyPanel; if(panel != null) panel.Content = new RobotPropertyView(mRobotControl); } } 3.4 机器人关节修改

机器人控制和模拟在《一种机器人运动模拟装置》一文中做了比较详细的介绍,这里不再赘述。

以更改参数A属性为例,ViewModel部分代码如下:

//RobotPropertyViewModel.cs private uint mBaseOffset = 1; //用来调整轴的起始位置偏移 public double A { get => mRobot.GetVariable(mArmIndex, 0+ mBaseOffset); set=> SetProperty(0 + mBaseOffset, value, nameof(A)); } Vector3 mFinalPosition = new Vector3(0); void SetProperty(uint idx, double val, string name) { var old = mRobot.GetVariable(mArmIndex, idx); var delta = val - old; if(SetProperty(ref old, val, name)) { // 更新关节参数 mRobot.AddVariable(mArmIndex, idx, delta); var viewer3D = MainWindow.Instance()?.Viewer3D; viewer3D?.RequestDraw(EnumUpdateFlags.Scene); // 计算末端点的位置 var trf = mRobot.GetFinalPosition(mArmIndex); mFinalPosition.x = mFinalPosition.y = mFinalPosition.z = 0; mFinalPosition.applyMatrix4(trf); // 增加路径点 mRobot.AddTrackingPoint(mFinalPosition); // 更新界面 OnPropertyChanged(nameof(FinalPositionX)); OnPropertyChanged(nameof(FinalPositionY)); OnPropertyChanged(nameof(FinalPositionZ)); } } 4 总结

本文涉及的内容主要是前文几部分的综合应用,这里主要列举了关键的代码实现,详细的代码实现可以从gitee上Rapid.CAX项目上下载。

最终效果如下:

www.bilibili.com/video/BV1Pu411q7JK/

.NET6如何构建WPF框架下的现代三维工业机器人软件?

希望本文可以对大家开发机器人应用有所启发~