对于v-rep的学习来说,国内的中文资料相对来说比较少,就VREP User Manual又是全英文的教程,读起来其比较麻烦。我个人比较推荐的还是对软件进行实际操作,在操作的过程中,我们会遇到许多问题,在解决问题的过程中,我们会对软件更加熟悉!
在我做BubbleRob 的过程中,建模过程很顺利,但是以下部分不是很熟悉,所以今天就来分享下吧。
01
—
Models
模型是场景的子元素。模型本身不可能存在,除非在一个"*.ttm"类型的文件中,不能单独对其进行模拟。一个模型必须包含在一个场景中,这样才能运行。
模型是通过构建在同一层次树上的场景对象的选择来定义的,其中树的基础必须是一个标记为object的对象,即model base。可以用 [Menu bar --> File --> Load model...][菜单栏—>文件—>加载模型…]加载。然而,通过模型浏览器和场景视图之间的拖放操作来加载模型要容易得多,也方便得多。可以通过[Menu bar --> File --> Save model as...][菜单栏—>文件—>保存模型为…],只需要确保选中一个被标记为object is model base的对象,否则Save model as…-菜单项将不被启用。
模型的定义步骤如下:
- 将逻辑上属于模型的所有对象附加到一个基对象,这样基对象就是模型树的基。
- 检查对象公共属性中的模型基项。
- 在上面的对话框中, 检查object/model can transfer or accept DNA。如果您在稍后的阶段修改模型,这将简化模型的重新初始化。
- 在上面的对话框中,单击Edit model properties,您可以定义特殊的覆盖属性(例如,使整个模型不可见,不可冲突,等等)。这允许快速禁用模型中定义的所有对象的一些属性。
- 对于模型中的所有对象,除了基本对象之外,请检查对象公共属性中的 select base of model instead。这将保护您的模型:您将不能直接选择模型中的单个对象,并且几乎可以作为单个对象来操作模型。
- 对于所有通常不可见的对象,请选中 Don't show as inside model selection“不在模型选择项中显示”。这将使模型包围框以正确的大小出现在模型周围。
- 考虑模型的角色:能够将它附加到其他对象上吗?(例如,你的模型是一个可以连接到机械臂手腕的夹具)。或者你能给它加上别的模型吗?(例如,您的模型是一个可以接受夹持器模型的机械手)。一旦确定了角色,就定义模型的组装行为。还请参考这一动态设计考虑。
现在,在模型基础上构建的单个对象在场景中不能再被选中了(选择它们将会选择模型的基础),但是它们仍然可以通过在选择过程中按住ctrl和shift键进行单独选择,或者在场景层次结构中选择它们。此外,当选中基对象时,会出现一个点画包围框,包围整个模型,如下图所示:
注意模型标记在被标记为模型基的对象图标的左侧:
双击模型标签会打开模型对话框,可以在其中调整模型属性。一旦模型被编辑,为了容易地确定逻辑分组的元素/模型的数量,拆分模型的层次结构也是一个很好的实践:
当子脚本以编程方式访问对象时,将多个对象分组为一个模型也很重要;请记住,在V-REP中,对象/模型可以在任何时候复制,也可以在模拟期间复制。为了使复制的子脚本能够访问正确的对象(不是原始对象,而是复制的对象),子脚本应该总是与它访问的对象同时复制。保证这一点的一种方法是创建一个模型(如上所述),并确保访问模型中的对象的子脚本与模型中包含的对象相关联。最好的方法是将一个子脚本(也可能有第二个子脚本)与模型的基础相关联。
为了使模型能够很容易地组合(即构建在彼此之上)而不需要任何额外的修改,考虑模型将扮演什么角色是很重要的:它将被动态模拟吗?它是附在其他模型上,还是接受附在它上面的其他模型?这些问题的答案将允许您选择作为模型基础的最佳对象类型。
复制和粘贴模型的行为与保存模型并加载模型完全相同(但是使用内存缓冲区而不是磁盘空间)。模型可以像其他对象一样从一个场景复制到另一个场景。模型文件(“*.ttm”-文件)也支持资源管理器窗口和应用程序窗口之间的拖放操作。模型文件也可以双击,在这种情况下,它们将启动V-REP应用程序并加载到一个默认场景中。
模型的属性可以在模型对话框中单独调整。
02
—
Object common properties
对象通用属性对话框是场景对象属性对话框的一部分,对话框位于[菜单栏—>工具—>场景对象属性]。你也可以双击场景层次结构中的对象图标来打开对话框,或者单击它的工具栏按钮:
在“场景对象属性”对话框中,单击“公共”按钮以显示“对象公共属性”对话框。对话框显示最后选择对象的设置和参数。如果没有选择对象,对话框是不活动的。如果选择了多个对象,则可以将一些参数从最后选择的对象复制到其他选择的对象(应用于选择按钮):
- Selectable可选择:指示是否可以在场景中选择对象。对象总是可以在场景层次结构中选择。也参考sim.setObjectProperty函数。
- Invisible during selection在选择过程中不可见:当启用时,对象将在选择过程中不可见(即可以通过对象进行选择)。
- Ignored by depth pass忽略深度通道:当启用时,对象将在深度渲染通道中被忽略。深度渲染通道用于为摄像机移动正确定位红色球体 。
- Select base of model instead:如果启用,那么在场景中选择对象将会选择它的第一个被标记为object is model base。此属性在保护模型不受错误操作时非常方便,允许将其作为单个实体与其他对象一起操作。参考关于模型的章节,也参考sim.setObjectProperty函数。
- Ignored by model bounding box模型包围框忽略:当被选中时,对象是模型的一部分,那么模型包围框(即模型选择包围框)将不包含该对象。这对于那些可能使模型边界框看起来太大的不可见的对象非常有用。此属性没有功能影响。也参考sim.setObjectProperty函数。
- Ignored for view-fitting视图拟合时忽略:当没有选择对象时,将场景拟合到视图时,将不考虑选中此项的对象。通常地板和类似的将被标记为这样。也请参考view fitting toolbar按钮和sim.cameraFitToView api函数。
- Cannot be deleted during simul无法仿真期间删除。:当启用时,当模拟运行时,对象将忽略删除操作(但是,当通过代码触发删除操作时,删除操作仍然有效)。
- Cannot be deleted不能删除:当启用时,对象将忽略删除操作(但删除将仍然工作时,通过代码触发)。
- Extension string扩展字符串:描述附加对象属性的字符串,主要用于扩展插件(参见sim.getExtensionString API函数)。
- Camera visibility layers摄像机可见层:V-REP中的每个对象都可以被分配到一个或多个可见层。如果至少有一个可见层与图层选择对话框的图层相匹配,那么当从相机上看到该对象时,它将是可见的。默认情况下,一个形状被指定给第一层,一个关节被指定给第二层,一个假关节被指定给第三层,等等。
- Can be seen by:允许指定一个摄像机或视觉传感器(或包含摄像机或视觉传感器的集合),它将是唯一能够看到对象的。
- Collidable可碰撞:允许对选定的可碰撞对象启用或禁用碰撞检测功能。
- Measurable可测量:允许启用或禁用所选可测量对象的最小距离计算能力。
- Detectable可检测:允许启用或禁用所选可检测对象的接近传感器检测功能。单击details允许您编辑可检测的详细信息。
- Renderable可渲染的:允许启用或禁用所选的可渲染对象的视觉传感器检测功能。
- Object is model base对象是模型基:指示该对象是否应该作为模型的基。一个标记为base of model的对象具有特殊的属性(例如,保存或复制该对象也会自动保存/复制它的所有子对象和子对象的子对象,等等)。此外,当这样一个对象被选中时,选择边界框显示为粗点画线,包括整个模型。
- Edit model properties编辑模型属性:允许打开模型对话框。
- Object / model can transfer or accept DNA对象/模型可以传输或接受DNA:当为对象或模型启用此功能时,它将与所有副本共享相同的标识符。然后,通过“转移DNA”工具栏按钮,一个对象或模型可以将其DNA(即复制自身的一个实例)转移到它的所有兄弟对象(即具有相同标识符的对象/模型)。想象一下,在你的场景中有100个相同的机器人,你想用类似的方式对它们进行修改:只需修改其中一个,选中它,然后单击“转移DNA”工具栏按钮。这个项目几乎总是应该检查一个模型库(见进一步),以方便模型重新瞬变。
Collection self-collision indicator收集自冲突指示器:当在两个相同的收集之间执行冲突(或最小距离)计算时,V-REP通常会将所有收集项与该收集中的所有其他项进行核对。在某些情况下,例如运动学链,人们不想检查连续的链接,因为它们可能在界面上不断地碰撞。在这种情况下,可以使用collection self-collision indicator:同一collection中的两个item,如果它们的indicator difference正好为1,则不进行核对,如下图所示:
Scaling可伸缩:在V-REP中,对象或模型可以以一种灵活的方式伸缩。对象或模型的大小,以及所有相关属性都进行了适当的缩放(例如关节范围、速度设置、质量等),以便缩放的对象或模型可以正常地继续运行(但以不同的比例)。
Assembling装配:打开一个对话框,允许指定装配工具栏按钮将如何在装配过程中处理对象(如果对象以不同于装配工具栏按钮的方式进行装配,则以下设置不受影响):
- Required match values for parent父对象的必需匹配值:该对象可以附加到另一个对象(即成为另一个对象的子对象),但是只有当列出的父对象的必需匹配值之一与它的新父对象的子对象的必需匹配值之一匹配时才可以。这个特性对于设置夹具兼容性标准很有用(例如,夹持器a只能与具有a类型工具提示的机器人连接)。
- Required match values for child子对象的必需匹配值:对象可以有另一个对象附加到它自己(即成为另一个对象的父对象),但只有当它的一个子对象的必需匹配值与它的新子对象的父对象的必需匹配值之一匹配时。这个特性对于设置夹具兼容性标准很有用(例如,夹持器a只能与具有a类型工具提示的机器人连接)。
- When assembling, a specific local transform. matrix will be applied装配时,一个特定的局部变换。矩阵将被应用:如果勾选此项,那么对象在装配时将不会呆在原地:一个特定的变换矩阵将被用作其新的局部变换矩阵。默认情况下,这个矩阵是单位矩阵,但是您可以通过单击Set matrix指定一个特定的矩阵。这个特性在自动定位和定位一个对象时是有用的,它与它的新父对象相关(例如,为了让一个钳子自动正确地放置在机器人的工具提示上)
对象选择顺序对于装配操作非常重要,即首先选择要成为的子对象,然后选择要成为的父对象。如果选择顺序错误,或者to-become-parent-object不合适,那么V-REP将尝试猜测用户的真实意图(例如,通过在to-be -parent-object的后代中搜索合适的匹配项),如果没有歧义的话。
未完待续~~~
谢谢大家支持
有任何问题欢迎大家批评指正!