V-rep学习笔记:机器人模型创建3—搭建动力学模型

摘要:
然后遵循前面写的V-rep学习笔记:机器人模型创建2-添加关节以继续机器人创建过程。将它们设置为动态对象并放置在地面上。因此,机器人模型与外部环境交互和接触的部分优选为Pureshape,以提高计算效率和稳定性。在任何时候,用户都可以根据自己的模拟需求快速地从一台发动机切换到另一台发动机。物理发动机支持的多样性在于,物理模拟是一个复杂的任务,可以在不同的精度、速度或不同功能的支持下实现。2.纯复合形状:复合形状是由多种形状组成的组。它具有几乎相同的膨胀和相似的性质。纯复合形状可以由多个形状组成。在VREP软件的motionPlanningAndGrassingDemo.tt场景中,桌子上有一个水杯,可以稳定地接触桌子。

   接着之前写的V-rep学习笔记:机器人模型创建2—添加关节继续机器人创建流程。如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierarchy and finish the model definition)。但是想要进行动力学仿真(碰撞、接触、自由落体...)的话,还需要进行额外的一些操作:

  • Building the dynamic shapes

  VREP中几何体的属性可以分为:

  1. dynamic or static: 具有动态属性的物体会在重力影响下坠落或在其它外力/力矩作用下发生运动状态的改变。而静态物体则会在场景中静止不动,如地面,或跟随其父节点运动(or follow the movement of its parent in the scene hierarchy)。
  2. respondable or non-respondable:  respond是回答,响应的意思。a respondable shape will cause a collision reaction with other respondable shapes. 即respondable属性用于控制物体的碰撞响应,non-respondable物体在与其它物体发生碰撞时,物理引擎不会进行计算,会出现穿透的现象。

  During dynamic simulation, static shapes will not be influenced (i.e. their position relative to their parent object is fixed), whereas non-static shapes will be directly influenced by gravity or other constraints (e.g. dynamically enabled joints. Respondable shapes influence each other during dynamic collision (i.e. they produce a mutual collision reaction, they will bounce off each other). 

  可以进行动力学仿真的物体在仿真过程中可以通过下面的图标来识别:

V-rep学习笔记:机器人模型创建3—搭建动力学模型第1张

[Icon marking dynamically simulated objects]

   当由于某些原因导致物体不能进行动力学仿真时,会提示警告:

V-rep学习笔记:机器人模型创建3—搭建动力学模型第2张

[Warning icon when an object cannot be dynamically simulated]

   为了进行快速稳定的仿真计算,Respondable物体的形状应该越简单越好。物理引擎可以仿真下面5种几何体,其性能和稳定性各有差异:  

  1. Pure shapesa pure shape will be stable and handled very efficiently by the physics engine. The draw-back is that pure shapes are limited in geometry: mostly cuboids, cylinders and spheres. If possible, use those for items that are in contact with other items for a longer time (e.g. the feet of a humanoid robot, the base of a serial manipulator, the fingers of a gripper, etc.).

  看下面的一个例子,左边的立方体是在Blender软件中导出的STL网格模型,是一个最简单的8个顶点的立方体;右边是VREP中添加的Primitive立方体。将它们设为动态物体,并且respondable,放置在地面上。选择Bullet物理引擎开始仿真,可以看出左边导入的网格模型不稳定,一会就掉了下去,而右边的primitive shape始终保持稳定;如果物理引擎换成ODE,开始仿真一会左边导入的模型将会弹飞...;如果换成Vortex或Newton引擎,结果会好很多,两个物体都能稳定在地面。因此,机器人模型与外界环境发生交互和接触的部分最好是Pure shape,以提高计算效率和稳定性。At any time, the user is free to quickly switch from one engine to the other according to his/her simulation needs. The reason for this diversity in physics engine support is that physics simulation is a complex task, that can be achieved with various degrees of precision, speed, or with support of diverse features.

V-rep学习笔记:机器人模型创建3—搭建动力学模型第3张

  2. Pure compound shapes: a pure compound shape is a grouping of several pure shapes. It performs almost as well as pure shapes and shares similar properties. Pure compound shapes can be generated by grouping several pure shapes.

  在VREP软件的motionPlanningAndGraspingDemo.ttt场景中桌子上有一个水杯,这个水杯能稳定地与桌面接触。虽然看上去这像是一个导入的网格体,但实际上它是由许多pure cuboid组成的pure compound shapes(见图中右侧的杯子),它被隐藏在图层9中,只用网格模型来做显示,而用更稳定的pure compound shapes来计算与桌面的接触。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第4张

  3. Convex shapes: a convex shape will be a little bit less stable and take a little bit more computation time when handled by the physics engine. It allows for a more general geometry (only requirement: it need to be convex) than pure shapes. 

  Whenever possible, try using pure shapes as respondable shapes. This is however not always easy to do, or practical. In that case, you can generate a convex shape, or a convex decomposed shape. Convex shapes perform faster and are more stable than random shapes (but they are still not as fast and stable as pure shapes!). Select the shapes you wish to simplify as convex shapes, then select [Menu bar --> Edit --> Morph selected shapes into convex shapes...]

V-rep学习笔记:机器人模型创建3—搭建动力学模型第5张

[Non-convex model (left) and corresponding convex-decomposed model (right)]

  4. Compound convex shapes: a convex compound shape is a grouping of several convex shapes. It performs almost as well as convex shapes and shares similar properties. It can be generated by grouping several convex shapes.

  5. Random shapes: a random shape is a shape that is not convex nor pure. It generally has poor performance (calculation speed and stability). Avoid using random shapes as much as possible.

  注意当直接把简化后的网格体设为respondable时会弹出警告对话框,提示这样做会影响物理引擎的计算性能,最好使用pure shapes或convex shapes代替。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第6张

   只从性能来看,选择的优先顺序为:pure shapes > pure compound shapes > convex shapes > compound conves shapes ≫ random shapes. 综合仿真性能以及几何外观,我们考虑使用基本圆柱体作为UR机器人基座,凸壳或其组合作为连杆来构建机器人动力学模型。用圆柱体和凸壳搭建机器人动态模型虽然可以提高计算性能,但是如果直接用它作为外观展示就不太好了,这样会显得模型比较粗糙。因此,我们可以将其移动到隐藏图层中,作为之前创建的可视化模型的对应。The hidden part will represent the dynamic model and be exclusively used by the physics engine, while the visible part will be used for visualization, but also for minimum distance calculations, proximity sensor detections, etc.

  下面以官方帮助文档中的UR5机器人为例进行讲解。首先处理机器人基座:进入网格编辑模式,先删除多余的线缆,然后选中所有面后提取圆柱体,如下图所示:

V-rep学习笔记:机器人模型创建3—搭建动力学模型第7张

 [Pure cylinder generation procedure, in the triangle edit mode]

  将生成的圆柱体重命名为robot_dyn,并移动到图层9中隐藏起来。剩下的连杆可以用凸壳或凸壳组合来模拟。先选中第一个连杆,然后通过[Menu bar --> Add --> Convex hull of selection]来添加凸壳,同样将其重命名为robot_link_dyn1并移动到图层9中隐藏。 

V-rep学习笔记:机器人模型创建3—搭建动力学模型第8张V-rep学习笔记:机器人模型创建3—搭建动力学模型第9张[Original shape, and convex shape]

  当提取的凸壳包含的形状细节不够多时可以先手动提取多个凸壳,然后将其合并为一个整体[Menu bar --> Edit --> Grouping/Merging --> Group selected shapes];或者可以使用VREP提供的自动提取凸壳组合体的工具[Menu bar --> Add --> Convex decomposition of selection]:

V-rep学习笔记:机器人模型创建3—搭建动力学模型第10张

  这里用到了一个开源库V-HACDThe V-HACD library decomposes a 3D surface into a set of "near" convex parts),这个开源库可以将原始形状复杂的几何体提取成凸壳组合,既保留了凸壳的运算性能,又逼近了原始形状。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第11张

  至于为什么有时不能单纯的用凸壳来代替原始物体可以看看下面这个例子。下图中原本加上尾翼的汽车尾部是呈现凹状的,但由于使用凸壳来近似代,如果放一个箱子在那个位置,会导致箱子“悬浮”在汽车上面,违反物理常识。一个更直观的例子是如果我们把一个碗简单的提取出凸壳,那么我们将不能在这个碗里放入任何东西!Objects will just float on top of it. In this case, we can use a convex decomposition of the concave shape.

V-rep学习笔记:机器人模型创建3—搭建动力学模型第12张

  鉴于上面这种情况,就需要将凹状物体(或形状复杂的物体)分解为几个简单凸壳的组合。在许多例子中,凸分解(convex decomposition)的工作常常由手工完成,因为实时仿真中最重要的就是性能,而几何体的形状会严重影响计算性能(It’s generally a good idea to create very simple physical representations for complex graphic objects)。下图是凸分解后的汽车: 

 V-rep学习笔记:机器人模型创建3—搭建动力学模型第13张

  再回到我们的UR机器人,从下图可以看出与之前简单添加的凸壳相比使用V-HACD提取的凸壳组合更接近真实形状:

V-rep学习笔记:机器人模型创建3—搭建动力学模型第14张

[Original shape, and convex decomposed shape pendant]

  接下来我们可以使用同样的方法处理剩下的几个连杆,处理完成后将每个表现外观的几何体拖到其相应的动态几何体下(attach each visible shape to its corresponding invisible dynamic pendant) :

V-rep学习笔记:机器人模型创建3—搭建动力学模型第15张

[Visible shapes attached to their dynamic pendants] 

  到这里我们的动力学模型基本已经构建完毕,但还有下面一些选项要设置:

  首先,我们搭建在隐藏图层的动力学模型只是为了供物理引擎进行动力学计算,因此其它一些不必要的计算可以取消。在物体的Object common properties属性对话框的Object special properties栏去掉所有选项

V-rep学习笔记:机器人模型创建3—搭建动力学模型第16张

  然后,设置每个连杆的碰撞属性: 勾选Body is respondable选项。并勾选基座的Local respondable mask的前4位,连杆1相应的后4位,连杆2前4位...这样一直交替错开,避免机械臂自身连杆之间的碰撞相应(once the model will be defined, consecutive dynamic shapes of the robot will not generate any collision response when interacting with each other)。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第17张

  Respondable mask: indicates when a collision response is generated. The mask is composed by two 8-bit values, local and global. If two colliding shapes share any of their parents (direct or indirect), then the local masks are used, otherwise the global masks are used. If two shapes' AND-combined masks (local or global) is different from zero, then a collision response will be generated. 即当两个物体碰撞掩码按位与时如果得到非零值,则两个物体干涉时会发生碰撞;如果得到零,则两个物体会相互穿透。

   下面举一个简单的例子:创建两个立方体(没有共同的父节点),则Global respondable mask会起作用。第一个立方体勾选前面4位,第二个立方体勾选后4位,掩码之间没有重合,因此按位与的结果为0。仿真时上方的物体自由坠落,会穿透下面的立方体,最终落在地板上。如果将上面的立方体掩码全部去掉,仿真时它会连地板一起穿透,直接掉下去(因为去掉了Global respondable mask的所有位,不会与场景中任何物体发生碰撞)。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第18张

  最后,将之前提取的凸壳设置为dynamic:在Rigid Body Dynamics Properties对话框中勾选Body is dynamic。我们可以人工输入几何体的质量和惯性矩,或者通过点击"Compute mass & inertia properties for selected convex shapes"按钮,根据几何体形状和设定的密度自动计算出质量以及惯性矩

V-rep学习笔记:机器人模型创建3—搭建动力学模型第19张

  注意机器人的基座有些特别:通常基座都固定在地面静止不动,因此不需要设置成动态体,否则仿真时会掉下去。但当我们想把机器人装在一个移动小车上使用时,就要将其设置为dynamic。在动力学属性对话框中先勾选"Set to dynamic if gets parent",然后去掉 "Body is dynamic"选项,即可实现把基座装在移动小车上时它是动态的,单独使用(没有父节点)时它是静态的。

V-rep学习笔记:机器人模型创建3—搭建动力学模型第20张

V-rep学习笔记:机器人模型创建3—搭建动力学模型第21张

参考:

Building a clean model tutorial

Designing dynamic simulations

Khaled Mamou's Blog

https://github.com/kmammou/v-hacd

Video Game Physics Tutorial - Part II: Collision Detection for Solid Objects

免责声明:文章转载自《V-rep学习笔记:机器人模型创建3—搭建动力学模型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【CentOS6.5】安装nginx报错:No package nginx available. Error: Nothing to do【uoj#228】基础数据结构练习题 线段树+均摊分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ABB机器人功能程序(FUNC)

定义:功能程序能够返回一个特定数据类型的值,在其他程序中当做功能来调用。 功能程序的使用范围非常的广,熟练者可以根据不同的需求创建相对应的功能程序,功能程序固定格式:以FUNC开始,return结束。在ABB学习中很多同学都对功能程序一知半解,甚至在真正使用的时候无从下手。 在学习ABB期间,遇到过几种使用情况,特把它们整理归纳在一起,以便加深理解。  ...

hook千牛 千牛破解发消息 千牛机器人 千牛发消息组件 调用千牛发消息 实时获取千牛聊天记录 可以提供代码

由于开发的时候,需要调用千牛发消息,所以研究了如何调用千牛发消息的组件,非协议破解,需要挂机,基本不弹发消息的窗体,非模拟发送,直接调用千牛的某个方法直接发送的,挂机后还能获取订单,实时获取聊天记录,能拿来做机器人等,需要的私聊我。可以提供源代码或组件...

web版微信自动发消息(实现微信个人号机器人)

1.打开 浏览器;2.访问微信网页版,并扫描登录;3.在左侧找到该联系人,选中后对话,右侧会显示进入聊天窗口;4.把你要发的内容写在输入框内,恩,不要点「发送(Send)」;5.打开调试台(F12)6.在控制台下输入如下代码后回车: 循环发送(每隔3秒发送一次):setInterval(function(){$('.edit_area').html('需要...

神牛微信信使,微信消息通知,微信消息关键字监控,微信通知机器人

当创业遇到瓶颈,当对项目感到绝望,那就做一些自己感兴趣的东西。闲极无聊做了个微信通知机器人。 机器人地址:https://x8xm.com/message 什么是”神牛微信消息助手“?简而言之,就是我们有个微信机器人,您只要用您的微信加它为好友,然后get/post发消息给它,它就可以把消息转发到到您的微信上! 第1步:扫码添加机器人为微信好友 第2步:...

ROS入门笔记(四):ROS实践(小海龟仿真)—ROS Topics

ROS入门笔记(四):ROS实践(小海龟仿真)— ROS Topics 1 基础知识    1.1 运行ROS Master所在主机的资源地址    1.2 ROS常用命令        1.2.1 查看所有以ros开头的命令        1.2.2 命令的快捷方式    1.3 重要命令2 ROS Topics    2.1 使用rqt_graph ...

modelsim脚本文件的编写

第一章 ModelSim介 绍本指南是为 ModelSim5.5f版本编写的,该版本运行于UNIX和Microsoft Windows 95/98/Me/NT/2000的操作系统环境中。本指南覆盖了VHDL和Verilog模拟仿真,但是你在学习过程中会发现对于单纯的HDL设计工作而言,它是一个很有用的参考。ModelSim具备强大的模拟仿真功能,在设计、编...