闲来无聊,记录下最近几天测试的一些内容,最近突然想搞一个机械臂仿真测试,搜了下github,发现有个很好的例子,链接是:GitHub - junkle-wxt/Qt_Robots: 记录Qt关于机器人仿真的工具,主要使用Coin3D、msvc2008、Qt4.8.6记录Qt关于机器人仿真的工具,主要使用Coin3D、msvc2008、Qt4.8.6. Contribute to junkle-wxt/Qt_Robots development by creating an account on GitHub.https://github.com/junkle-wxt/Qt_Robots

编译也很简单,运行效果如下图:

拖动滚动条即可操作各个关节,因为读取的关节点是wri文件模型,后面想用OCC做个类似的功能,因为对这块实在没什么接触,咨询了下我的好朋友,看了写有关的知识点(也没这么看懂) ,后面看到github的案例时,本人觉得一个速成的方法就是为做个程序增加一个stp模型转换接口就好了,所以晚上脑补了下关于COIN3D的渲染,了解了他的基本流程,也做了一些模型绘制测试,效果都还可以,于是我根据OCC的一些接口(主要是离散接口)做了从OCC到COIN3D的转换接口,效果如下:

注意:模型不一样,DH设置也是不一样的。这里需要自己根据自己的模型进行设置即可。

接口我写的比较随意(主要是做测试使用),代码如下:

///

//occ to coin3d  以读取stp为例
SoSeparator* Robot::readSTP(const std::string& filename)
{
    SoSeparator* robot = new SoSeparator;
   //
    STEPControl_Reader StepReader;   //const char*
    Standard_Integer status = StepReader.ReadFile(filename.c_str());
    if (status == IFSelect_RetDone)
    {
        StepReader.TransferRoots();
        TopoDS_Shape aShape = StepReader.OneShape();
        if (!aShape.IsNull())
        {
            BRepMesh_IncrementalMesh(aShape, 0.01, Standard_False, 0.5, Standard_True);

TopExp_Explorer faceExplorer;
            for (faceExplorer.Init(aShape, TopAbs_FACE); faceExplorer.More(); faceExplorer.Next())
            {
                SoCoordinate3* points = new SoCoordinate3();
                SoMaterial* color = new SoMaterial();
                color->diffuseColor.setValue(1, 1, 0);
                color->transparency.setValue(0);
                robot->addChild(color);
                SoFaceSet* soface = new SoFaceSet;
                robot->addChild(soface);
                robot->addChild(points);
                
                TopLoc_Location loc;
                TopoDS_Face aFace = TopoDS::Face(faceExplorer.Current());
                //2020-06-14
                Handle_Poly_Triangulation triFace = BRep_Tool::Triangulation(aFace, loc);

gp_Pnt vertex1;
                gp_Pnt vertex2;
                gp_Pnt vertex3;

Standard_Integer nVertexIndex1 = 0;
                Standard_Integer nVertexIndex2 = 0;
                Standard_Integer nVertexIndex3 = 0;

if (triFace.IsNull())
                {
                    continue;
                }

Standard_Boolean hasNormal = triFace->HasNormals();
                Standard_Boolean hasuvNormal = triFace->HasUVNodes();
                Standard_Integer l = triFace->Nodes().Length();
                Standard_Integer nTriangles = triFace->NbTriangles();

TColgp_Array1OfPnt nodes(1, triFace->NbNodes());
                Poly_Array1OfTriangle triangles(1, triFace->NbTriangles());
                nodes = triFace->Nodes();
                triangles = triFace->Triangles();
                points->point.setNum(l);
                int verindex = 0;
                for (Standard_Integer i = 1; i <= nTriangles; i++)
                {
                    vertex1.SetCoord(0.0, 0.0, 0.0);
                    vertex2.SetCoord(0.0, 0.0, 0.0);
                    vertex3.SetCoord(0.0, 0.0, 0.0);

nVertexIndex1 = 0;
                    nVertexIndex2 = 0;
                    nVertexIndex3 = 0;

Poly_Triangle aTriangle = triangles.Value(i);
                    aTriangle.Get(nVertexIndex1, nVertexIndex2, nVertexIndex3);

//顶点
                    vertex1 = nodes.Value(nVertexIndex1).Transformed(loc.Transformation());
                    vertex2 = nodes.Value(nVertexIndex2).Transformed(loc.Transformation());
                    vertex3 = nodes.Value(nVertexIndex3).Transformed(loc.Transformation());
                    {
                        //
                        points->point.set1Value(verindex, vertex1.X(), vertex1.Y(), vertex1.Z());
                        points->point.set1Value(verindex+1, vertex2.X(), vertex2.Y(), vertex2.Z());
                        points->point.set1Value(verindex+2, vertex3.X(), vertex3.Y(), vertex3.Z());
                        verindex+=3;;
                    }
    
                    }

}
    
            }
        }
    return robot;
}

//

以上就是测试的基本内容,请多多指教。

基于OpenCascade 与COIN3D的机械臂仿真测试相关推荐

  1. matlab机械臂dh仿真,基于MATLAB Robotics Tools的机械臂仿真

    基于MATLAB Robotics Tools的机械臂仿真 [摘要]在MATLAB环境下,对puma560机器人进行运动学仿真研究,利用Robotics Toolbox工具箱编制了简单的程序语句,建立 ...

  2. 基于matlab 宗晓萍,基于ADAMS和MATLAB的机械臂控制仿真

    基于ADAMS和MATLAB的机械臂控制仿真 宗晓萍;李月月 [期刊名称]<微计算机信息> [年(卷),期]2009(000)035 [摘要]运用多体系统动力学分析软件ADAMS建立虚拟模 ...

  3. 【机器人1】基于POE公式的UR5机械臂正运动学建模求解与matlab仿真

    基于PoE公式的UR5机械臂正运动学建模求解与matlab仿真 基于PoE公式的UR5机械臂正运动学分析 1.1 运动旋量的螺旋释义(理论基础) 1.2 基于PoE公式的UR5机械臂正运动学模型 1. ...

  4. 基于Simulink、Simscape、S-Function联合的机械臂仿真

    目录 C-0 概述与前期准备 1. urdf C-1 Robotics system toolbox 获取机械臂动力学参数 P-1 官方文档 P-2 使用流程 C-2  Simscape 创建机械臂对 ...

  5. Udacity机器人软件工程师课程笔记(十六)-机械臂仿真控制实例(其一)-Gazebo、RViz和Moveit!

    机械臂仿真控制实例 目录 环境设置 项目工具介绍 Gazebo (1)Gazebo组件 (2)Gazebo界面 统一机器人描述格式(URDF) RViz Moveit! 1.环境设置 对于此项目,使用 ...

  6. 基于ROS设计一款机械臂控制系统 [转发]

    ROS探索总结-66.基于ROS设计一款机械臂控制系统 ROS探索总结-66.基于ROS设计一款机械臂控制系统 说明: 介绍如何基于ROS设计一款机械臂控制系统 正文 今天我们将从以下两个方面为大家介 ...

  7. Dynamic Movement Primitives与UR5机械臂仿真

    Dynamic Movement Primitives (DMP),中文译名为动态运动基元.动态运动原语等,最初是由南加州大学的Stefan Schaal教授团队在2002年提出来的,是一种用于轨迹模 ...

  8. Udacity机器人软件工程师课程笔记(十八)-机械臂仿真控制实例(其三)-KR210机械臂反向运动学

    机械臂仿真控制实例(其二)-KR210正向运动学 目录 反向运动学概述 为Kuka KR210创建IK解算器 1.反向运动学概述 KR210的最后三个关节是满足三个相邻的关节轴线在单点处相交的旋转关节 ...

  9. 【强化学习与机器人控制论文 1】基于深度强化学习的机械臂避障

    基于深度强化学习的机械臂避障 1. 引言 2. 论文解读 2.1 背景 2.2 将NAF算法用在机器人避障中 3. 总结 1. 引言 本文介绍一篇2018年发表在 European Control C ...

  10. UR机械臂仿真和用上位机编程控制

    UR机械臂仿真和用上位机编程控制 在没有实物UR机械臂时怎么办,优傲提供了仿真工具可以满足开发者需求,这样也减少了实际操作机械臂时的麻烦. 需要下载和安装的软件 虚拟机 使用VMware是不错的选择, ...

最新文章

  1. dos系统不能安装python模块,无法使用pip命令安装python第三方库的原因及解决方法...
  2. List 系列 ArrayList LinkedList CopyOnWriteArrayList Queue系列 ArrayDeque ConcurrentLinkedDeque LinkedBlo
  3. openstack环境准备
  4. 采样算法哪家强?一个针对主流采样算法的比较
  5. php连接中文数据库乱码问题,如何解决php的数据库中文乱码问题
  6. Linux_2.6字符设备驱动实例
  7. 将军令:数据安全平台建设实践 1
  8. ajax中url是什么意思_装修中的阳台封窗是什么意思?
  9. 服务器比虚拟主机安全,虚拟主机比较安全配置
  10. scipy.cluster模块实现kmeans聚类
  11. python项目开发:用RabbitMQ实现异步RPC
  12. unity3d自己写角色移动脚本
  13. php实现小说字典功能_PHP实现微信小程序人脸识别刷脸登录功能
  14. jCasbin:支持MAC、RBAC、ABAC多种模型的Java权限管理框架
  15. 流程和企业成熟度模型(PEMM)
  16. drawboard pdf拆分文件_Drawboard PDF 免费版
  17. 以空间换时间经典算法
  18. Android屏幕渲染
  19. 数据库——postgresql数据库中standard_conforming_strings对‘\\’的影响
  20. android开机logo和动画修改

热门文章

  1. 信息系统分析与设计课程心得
  2. Android studio毕设制作液体动画Animation(毕业设计2048小游戏)
  3. Windows开发之——局域网内搭建论坛
  4. 3500份课程课后习题答案与大家分享
  5. 米4s刷Linux,小米4S刷recovery教程_小米4S第三方recovery下载
  6. 安全跑路指南2013之乌云版
  7. IEEE2019_A Survey of Event Extraction from Text
  8. C#操作明华澳汉读写器读写M1卡往扇区块写入读取值小结
  9. 欧姆龙编程软件SysmacStudio卸载方法
  10. 第五章 编码/加密——《跟我学Shiro》[张开涛]