说明:本次内容基于上两篇文章《基于C#的机器人仿真平台和机器人运动学算法实现》和《六轴机器人轨迹规划(直线轨迹规划,弧线轨迹规划)——C#实现+ABB为例(规划直接下发离线程序运动)》进行模型优化和相关算法和结构Code进行优化,并将其整合。

一,模型优化

1.鉴于上篇文章中模型不够好看和模型细节不到位的问题在本次修改中做出了相应的修改

老规矩,先上图:

Program Interface:

Robot Model1 —— IRB2600

Robot Model2 —— IRB6700

PS:在模型优化中对新模型的各连杆机构进行不同程度重构,最终将拼接起来的机器人展示在界面中并且可以达到模型各连杆之间模型不冲突,可以按要求做到连贯连续的动作。

GIF动画:

可以看到,模型在运动过程中没有出现各连杆错位或者模型错误的情况。

Reference Code(Not all of it but core code)

#if IRB6700        private const string MODEL_PATH1 = "IRB6700-MH3_245-300_IRC5_rev01_BASE_CAD.stl";private const string MODEL_PATH2 = "IRB6700-MH3_245-300_IRC5_rev02_LINK01_CAD.stl";private const string MODEL_PATH3 = "IRB6700-MH3_245-300_IRC5_rev00_LINK02_CAD.stl";private const string MODEL_PATH4 = "IRB6700-MH3_245-300_IRC5_rev02_LINK03_CAD.stl";private const string MODEL_PATH5 = "IRB6700-MH3_245-300_IRC5_rev01_LINK04_CAD.stl";private const string MODEL_PATH6 = "IRB6700-MH3_245-300_IRC5_rev01_LINK05_CAD.stl";private const string MODEL_PATH7 = "IRB6700-MH3_245-300_IRC5_rev01_LINK06_CAD.stl";private const string MODEL_PATH8 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO1_CAD.stl";private const string MODEL_PATH9 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO2_CAD.stl";private const string MODEL_PATH10 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO3_CAD.stl";private const string MODEL_PATH11 = "IRB6700-MH3_245-300_IRC5_rev00_CYLINDER_CAD.stl";private const string MODEL_PATH12 = "IRB6700-MH3_245-300_IRC5_rev02_LINK01_CABLE.stl";private const string MODEL_PATH13 = "IRB6700-MH3_245-300_IRC5_rev02_LINK01m_CABLE.stl";private const string MODEL_PATH14 = "IRB6700-MH3_245-300_IRC5_rev00_LINK02_CABLE.stl";private const string MODEL_PATH15 = "IRB6700-MH3_245-300_IRC5_rev00_LINK02m_CABLE.stl";private const string MODEL_PATH16 = "IRB6700-MH3_245-300_IRC5_rev00_LINK03a_CABLE.stl";private const string MODEL_PATH17 = "IRB6700-MH3_245-300_IRC5_rev00_LINK03b_CABLE.stl";private const string MODEL_PATH18 = "IRB6700-MH3_245-300_IRC5_rev02_LINK03m_CABLE.stl";private const string MODEL_PATH19 = "IRB6700-MH3_245-300_IRC5_rev01_LINK04_CABLE.stl";private const string MODEL_PATH20 = "hanqiang.stl";private const string GUAN_DAO = "guandao1.stl";
#elseprivate const string MODEL_PATH1 = "IRB2600_12_165_base_CAD_01.step.STL";private const string MODEL_PATH2 = "IRB2600_12_165_link1_CAD_01.STL";private const string MODEL_PATH3 = "IRB2600_12_165_link2_CAD_01.STL";private const string MODEL_PATH4 = "IRB2600_12_165_link3_CAD_01.STL";private const string MODEL_PATH5 = "IRB2600_12_165_link4_CAD_02.STL";private const string MODEL_PATH6 = "IRB2600_12_165_link5_CAD_02.STL";private const string MODEL_PATH7 = "IRB2600_12_165_link6_CAD_01.STL";private const string MODEL_PATH8 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO1_CAD.stl";private const string MODEL_PATH9 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO2_CAD.stl";private const string MODEL_PATH10 = "IRB6700-MH3_245-300_IRC5_rev00_LOGO3_CAD.stl";private const string MODEL_PATH11 = "IRB2600_12_165_cables_link1a_CAD_00.STL";private const string MODEL_PATH12 = "IRB2600_12_165_cables_link1b_CAD_00.STL";private const string MODEL_PATH13 = "IRB2600_12_165_cables_link2_CAD_00.STL";private const string MODEL_PATH14 = "IRB2600_12_165_cables_link3_CAD_00.STL";private const string MODEL_PATH20 = "hanqiang2.stl";private const string GUAN_DAO = "guandao2.stl";private const string ZHENGTI = "zhengti.stl";
#endifpublic UserControl1(){InitializeComponent();
#if IRB6700RoboticArm.Content = Initialize_Environment(MODEL_PATH1, MODEL_PATH2, MODEL_PATH3, MODEL_PATH4, MODEL_PATH5, MODEL_PATH6, MODEL_PATH7, MODEL_PATH8, MODEL_PATH9, MODEL_PATH10, MODEL_PATH11,MODEL_PATH12, MODEL_PATH13, MODEL_PATH14, MODEL_PATH15, MODEL_PATH16, MODEL_PATH17, MODEL_PATH18, MODEL_PATH19, MODEL_PATH20);
#elseRoboticArm.Content = Initialize_Environment(MODEL_PATH1, MODEL_PATH2, MODEL_PATH3, MODEL_PATH4, MODEL_PATH5, MODEL_PATH6, MODEL_PATH7, MODEL_PATH8, MODEL_PATH9, MODEL_PATH10, MODEL_PATH11,MODEL_PATH12, MODEL_PATH13, MODEL_PATH14);
#endif//显示模型的函数\//Zhengti.Content = ZhengTi();hanqiang11.Content = Hanqiang();sanjiaoxing.Content = GUandao();viewPort3d.Children.Add(RoboticArm);//helixviewPort3d的name:viewPort3d;这句code的意思是将机械臂显示在helexviewport3d上   viewPort3d.Children.Add(sanjiaoxing);viewPort3d.Children.Add(hanqiang11);//viewPort3d.Children.Add(Zhengti);viewPort3d.Camera.LookDirection = new Vector3D(500, -1000, -500);//初始视角}public void Refresh3D(){try{T = new TranslateTransform3D(0, 0, 0);F1.Children.Add(T);T= new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), g1), new Point3D());F2.Children.Add(T);F2.Children.Add(R);F2.Children.Add(F1);            //T = new TranslateTransform3D(0, 0, 0);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), g2), new Point3D());F3.Children.Add(T);F3.Children.Add(R);F3.Children.Add(F2);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), g3), new Point3D());F4.Children.Add(T);F4.Children.Add(R);F4.Children.Add(F3);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), g4), new Point3D());F5.Children.Add(T);F5.Children.Add(R);F5.Children.Add(F4);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), g5), new Point3D());F6.Children.Add(T);F6.Children.Add(R);F6.Children.Add(F5);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), g6), new Point3D());F7.Children.Add(T);F7.Children.Add(R);F7.Children.Add(F6);//T = new TranslateTransform3D;//R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), g6), new Point3D());//F11.Children.Add(T);//F11.Children.Add(R);//F11.Children.Add(F7);//R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 0), new Point3D());//F11.Children.Add(T);//F11.Children.Add(R);//F11.Children.Add(F7);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), -90), new Point3D());F8.Children.Add(T);F8.Children.Add(R);F8.Children.Add(F2);T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0), new Point3D());RotateTransform3D R1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), -90));F9.Children.Add(T);F9.Children.Add(R);F9.Children.Add(R1);F9.Children.Add(F5);//T = new TranslateTransform3D;R = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0), new Point3D());F10.Children.Add(T);F10.Children.Add(R);F10.Children.Add(F9);}catch (Exception e){//MessageBox.Show("refresh Exception Error:" + e.StackTrace);}}

二,代码结构处理和真实机器人联动功能

1.在本次创作中,首次添加了真实仿真模块,和算法模块仿真不同,该仿真模块基于现实机器人的动作进行仿真,摆脱了机器人厂家自带的仿真平台,可以拓展各个型号的机器人

上图,下图展示了获取真实机器人的位置和姿态信息,并且做出相应动作

Robotstudio中2600位姿如图:

仿真程序中2600位姿如图:

ps:焊枪不同,所以视觉看起来位置有误差,其实位姿和Robotstudio中机器人完全相同

GIF图(通过示教器控制仿真程序中机器人)

相关代码在之前文章中有类似,在此不做重复说明!

三,同样可以根据点位规划离线程序,具有更强的可视化性

如图:

Fi:算法仿真模块可以看上篇文章《基于C#的机器人仿真平台和机器人运动学算法实现》中的相关内容,本片文章不再做阐述,谢谢大家,后续会继续推出更有趣的机器人内容!!!

机器人仿真搭建(以ABB为例)相关推荐

  1. 机器人仿真控制(以ABB为例)

    说明:本次内容基于本博客四篇文章<基于C#的机器人仿真平台和机器人运动学算法实现>.<六轴机器人轨迹规划(直线轨迹规划,弧线轨迹规划)--C#实现+ABB为例(规划直接下发离线程序运 ...

  2. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)

    ROS中阶笔记(四):机器人仿真-Gazebo物理仿真环境搭建(重点) 文章目录 1 ros_control 1.1 ros_control安装 2 Gazebo仿真步骤(重点) 2.1 配置物理仿真 ...

  3. Webots平台下NAO机器人仿真环境的搭建

    Webots平台下NAO机器人仿真环境的搭建 一.前期准备 Webots-8.6.2(版本在R2019前(不包含R2019)均可) Choregraphe(我使用的是最新版本) naoqi环境 二.W ...

  4. pybullet机器人仿真环境搭建 1.安装pybullet,测试官方示例,基础环境搭建

    pybullet机器人仿真环境搭建 1.安装pybullet 前言 安装 测试官方示例 基础环境搭建 导入pybullet 创建服务端 (可选)配置图形GUI 添加资源路径 设置重力 加载模型 迭代运 ...

  5. Robocup 2D仿真足球机器人环境搭建快速搭建

    虽然之前已经写了Robocup 2D仿真足球机器人环境搭建,但是后面我找到了更快搭建环境的方法.而且现在很多团队都是在agent底层代码的基础上编写的.之前的方法配置的环境运行agent球队代码会出现 ...

  6. 基于Mathematica的机器人仿真环境(机械臂篇)

    目的 本文手把手教你在 Mathematica 科学计算软件中搭建机器人的仿真环境,具体包括以下内容: 1 导入机械臂的三维模型 2 正\逆运动学仿真 3 碰撞检测 4 轨迹规划 5 正\逆动力学仿真 ...

  7. 基于 Mathematica 的机器人仿真环境(机械臂篇)

    目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些函数,所以请使用最新版.robin ...

  8. [转]基于Mathematica的机器人仿真环境(机械臂篇)

    目的 本文手把手教你在 Mathematica 科学计算软件中搭建机器人的仿真环境,具体包括以下内容: 1 导入机械臂的三维模型 2 正\逆运动学仿真 3 碰撞检测 4 轨迹规划 5 正\逆动力学仿真 ...

  9. Nvidia Isaac Sim ROS机器人仿真和AMR开发环境

    效果非常赞. ☞ 2020年最好的机器人学仿真工具软件汇总_zhangrelay的博客-CSDN博客_机器人仿真软件 由 Omniverse 提供支持的 NVIDIA Isaac Sim 是一种可扩展 ...

  10. unity3d 模拟电脑实现_基于Unity3D的机器人仿真实验系统

    龙源期刊网 http://www.qikan.com.cn 基于 Unity3D 的机器人仿真实验系统 作者:庄严 卢阿丽 杨庆 来源:<电子技术与软件工程> 2018 年第 03 期 摘 ...

最新文章

  1. 网速测量、流量监控软件 Bandwidth Meter Pro
  2. IO多路复用:select/poll/epoll
  3. guid主分区表损坏怎么办_遇到水泥球磨机温度升高的现象应该怎么办
  4. 数字编码电位器c语言,单片机小白学习之路(三十八)---AD转换电位器编码
  5. linux socket读写函数,Linux网络编程入门
  6. Linux下 JNI的使用
  7. 关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
  8. 基于C++11的高精度多级时间轮定时器
  9. 如何处理 mka 格式的音频文件
  10. 如何使用PM2 部署 nodejs 项目
  11. php遇到Allowed memory size of 134217728 bytes exhausted错误解决方法
  12. 网上图书商城项目学习笔记-018生成订单
  13. 大家保险发布“早下班一小时”倡议,呼吁“重阳节,不脱节”
  14. python报错No module named XXX通用解决方法
  15. ip地址映射-方便开发微信公众号,小程序等
  16. 计算机网络第七版(谢希仁)学习目录
  17. bootice添加黑苹果引导_NUC8 x 黑苹果抄作业续集,快速迁移 OpenCore + 升级 Big Sur...
  18. 计算机课件制作技能,第六章:多媒体课件制作技能详解.doc
  19. CAS中文乱码,登录报错
  20. 基于VC++的四国军棋局域网联网游戏的设计与实现

热门文章

  1. 关于peer‘s certificate issuer is not recognized问题的解决方法
  2. 傅里叶变换的意义和理解(通俗易懂)
  3. 思岚A1激光雷达hector_mapping建图与定位
  4. C#实现Omron欧姆龙PLC的Fins Tcp协议
  5. python 经典图书排行榜_书榜 | 计算机书籍(3.30-4.5)销售排行榜
  6. 如何安装perl模块
  7. 艾里斑大小与像元尺寸的匹配问题
  8. 【线代】矩阵转置性质及代码证明
  9. 怎么在当前文件目录下打开CMD
  10. 08.音频系统:第006课_音频系统HAL分析:第001节_HAL之框架