CoppeliaSim用户手册中文翻译版(一)「建议收藏」

CoppeliaSim用户手册中文翻译版(一)「建议收藏」CoppeliaSim用户手册文章目录主要功能历史版本许可证致谢和鸣谢概述1.用户界面1.1页面和视图1.2自定义用户界面1.3位置/方向操作1.3.1位置对话框1.3.2方向对话框1.3.3使用鼠标移动物体1.4欧拉角1.5用户设置1.6快捷键1.7命令行2.场景和模型2.1场景2.2模型2.2.1模型对话框3.环境3.1环境对话框3.2纹理对话框  CoppeliaSim是一款基于分布式控制架构,具有集成开发环境的机器人仿真器。每个对象/模型都可以通过内嵌.

大家好,欢迎来到IT知识分享网。


CoppeliaSim 用户手册

文章目录

在这里插入图片描述

  CoppeliaSim是一款基于分布式控制架构,具有集成开发环境的机器人仿真器。每个对象/模型都可以通过内嵌脚本、插件、ROS节点、BlueZero节点、远程API客户端或定制的解决方案进行单独控制。这使得CoppeliaSim非常通用和理想的应用于多机器人。控制器可以使用C/C++、PythonJava、Lua、Matlab、Octave或Urbi编写。

CoppeliaSim的一些应用:

  • 工厂自动化系统的仿真
  • 远程监控
  • 硬件控制
  • 快速成型和验证
  • 安全监测
  • 快速算法开发
  • 机器人相关教育
  • 产品演示

  CoppeliaSim可以作为一个独立的应用程序使用,也可以很容易地嵌入到主客户端应用程序中,其占用空间小和复杂的API使CoppeliaSim成为嵌入高级应用程序的理想候选者。集成的Lua脚本解释器使CoppeliaSim成为一个非常通用的应用程序,用户可以自由地组合低/高级功能以获得新的高级功能。

主要功能

  • 模拟器和仿真是完全可定制的,具有6种相互兼容的编程方法,甚至可以携手工作。6种完全支持的编程语言。
  • 常规API:C和Lua;远程API:C、Python、Java、Matlab、Octave和Lua;ROS和BlueZero界面:发布者,订阅者和服务呼叫。支持所有标准消息,可扩展。
  • >100个可嵌入的CoppeliaSim功能:远程控制仿真或仿真器本身(例如:从真实的机器人或另一台PC)。易于使用,可扩展,支持同步或异步操作。
  • 支持4个物理引擎(Bullet Physics、ODE、Vortex Studio和Newton Dynamics),用于快速和可自定义的动力学计算,以模拟现实世界中的物理和对象交互(碰撞响应、抓握等)。
  • 任何类型的机制(分支、闭合、冗余、包含嵌套循环等)的反向/正向运动学计算。提供了IK / FK算法的可嵌入版本(即可以在您的机器人上运行)。
  • 支持可自定义的粒子,可用于模拟空气或水射流、喷气发动机、螺旋桨等。
  • 碰撞检测。
  • 最小距离计算。
  • 跨平台的,并允许创建可移植、可伸缩和易于维护的内容;单个可移植文件可以包含功能完整的模型(或场景),包括控制代码。
  • 强大而逼真的传感器模拟(可自定义检测体积内的精确最小距离计算)。与离散射线传感器相比,连续操作要多得多。在网格,超频树和点云上运行。
  • 视觉传感器的仿真具有多种图像处理功能,完全可定制和可扩展(例如:通过插件)。
  • 通过结合基本对象并通过嵌入式脚本链接各种功能,可以在CoppeliaSim中构建任何东西,从传感器或执行器到整个机器人系统。每个场景对象都可以有自己的嵌入式脚本。
  • 通过包装在CoppeliaSim插件中的OMPL库,可以非常灵活地支持路径规划/运动规划。
  • 各种各样的可记录数据流(包括用户定义的)可以显示时间图,或者可以相互组合以形成x / y图或3D曲线。
  • 无限数量的完全可定制的用户界面元素。
  • 支持特殊的网格编辑模式(包括半自动原始形状提取方法、凸分解、网格抽取等)。
  • 支持以下文件格式(也可以通过API调用):URDF、COLLADA、DXF、3DS、OBJ、STL(ASCII和二进制)
  • 该RRS-1接口规范的全面实施,以及Reflexxes运动库II型是完全支持。
  • 场景组成在场景层次视图中直观地可视化,指示对象名称、类型、关联的控制脚本、循环关闭、选择和可见性状态、警告等。
  • 集成的模型浏览器支持拖放操作(在仿真过程中也是如此!),以方便进行场景合成。用户可以轻松扩展在每个版本中更新的可用模型库。
  • 在仿真过程中也可以进行完全交互:可以将模型及其相关行为(即嵌入式脚本)移动、旋转、复制/粘贴、缩放、擦除等操作,而无需调整任何代码。

更多功能包括:

  • 各种类型的关节(旋转、棱柱、螺旋或球形)。
  • 精细的运动运动的路径或轨迹功能。
  • 分布式控制和脚本驱动:每个场景对象都可以附加一个嵌入式脚本,所有脚本都以线程或非线程方式同时运行。
  • 简单的仿真只需很少或不需要编程。
  • 完全可定制的主客户端应用程序循环。
  • 同时打开的场景无限数量。
  • 完整的复制/粘贴功能,不仅针对对象,还针对其相关行为(程序),还包括在仿真期间。
  • 模型的自我复制或自我破坏能力(来自模型本身)以及关联的计算对象和嵌入式脚本。
  • 内置录像机。
  • 凸分解和凸包计算功能。
  • 强大而灵活的无线通信仿真和可视化。
  • CoppeliaSim内部或与外界的通讯非常精细且易于扩展。
  • 可自定义的图形对象(点、线、三角形等)。允许模拟油漆、焊缝等。
  • 可定制的动态粒子。允许模拟空气或水射流、喷气发动机、螺旋桨等。
  • 静态和动态纹理。
  • 多级撤消/重做。
  • 对象和附加功能在仿真过程中也是完全可伸缩的(可调整大小)。
  • 在仿真过程中可以进行仿真速度控制。
  • 紧凑的场景和模型文件(一个压缩的二进制文件,其中包含所有需要的文件(对象和程序))。
  • 可以从进一步的版本/修改,脚本内容查看或资源导出中锁定场景。
  • 非常高的内部技术开发和实施。
  • 详尽而全面的文档。

历史版本

CoppeliaSim版本格式定义如下:

Version X.Y.Z (rev. W)
  • X 表示特殊版本(每两年一次)
  • Y 表示年度发布(每年递增)
  • Z 表示一年之内的发布
  • W 表示修订版本号(对于Beta版本,通常为0,对于第一个常规版本为1)

CoppelisSim V4.1.0(2020年7月21日)

  • 修复了几个错误。 感谢Jakub Turaj、Rieky Barady、Jian Ye、Jaime Boal、Mathias Thor、Pável Axel Mc Campos Peña、Filipe Rocha、Patrick Gruener、Thomas Wilmotte、Lorenzo Romanini、Pablo Bustos、Sonny Tarbouriech、Johan Relefors、Adrian Schoisengeier、Arturs Pauur、Wei Wei、David Page、Ayush Patel、Aleksander SIL和Cameron Kabacinski注意到或帮助解决了这些问题。
  • Ubuntu20.04支持。
  • 已在Windows上切换到Qt5.15.0和VC2019。
  • CoppeliaSim的运动学功能(即正运动学和反向运动学)现在也可以通过Lua脚本使用;这意味着,除了通过GUI创建和处理运动学任务之外,用户还可以完全以非常灵活的方式通过编程创建和处理它们。 两个示例场景说明了这一点:scenes/ik_fk_simple_examples/8-computingJointAnglesForRandomPoses.ttt和scenes/ik_fk_simple_examples/9-programmaticallySettingUpIk.ttt。
  • CoppeliaSim在形状、OC树和点云上的碰撞检测和最小距离计算功能现在也可以通过Lua脚本使用:您现在还可以执行相同类型的计算,而无需创建任何场景对象或修改场景内容。 这在以下示例场景中进行了说明:scenes/sceneObjectIndependentGeometricCalculationExample.ttt。
  • 用于ROS2 Foxy Fitzroy的ROS2接口插件,支持主题、服务、动作、参数、TF2广播和图像传输。
  • GLTF插件可以以GLTF 2.0格式导出静态场景和动画。 该功能可通过附加菜单或相关API函数使用。
  • URL拖放插件允许通过拖放从远程位置加载场景(例如,从浏览器窗口拖放URL)。
  • 现在可以使用-v、-w和-x参数从命令行调整详细级别(控制台、状态栏和简单对话框)。 要输出消息,插件现在应该使用simAddLog和脚本sim.addLog。
  • 可以通过带有-c参数的命令行执行可选的Lua脚本字符串。
  • 添加了说明简单马达控制器的示例场景:Scenes/Motor ControllerExsames.ttt。
  • 添加了示例场景,说明如何将反向运动学应用于动态启用的模型/操纵器:scenes/ik_fk_simple_examples/10-applyingIkToDynamicallyEnabledModels.ttt。
  • 添加了一个示例场景,说明Reflex运动库的简单用法:Scenes/refexxesMotionLibraryExamples.ttt。
  • 增加了与使用传统远程api和基于B0的远程api相关的示例场景,说明如何发送运动序列,或者如何同步收发图像:Scenes/movementViaRemoteApi.ttt、Scenes/pControllerViaRemoteApi.ttt和scenes/synchronousImageTransmissionViaRemoteApi.ttt.。 相关Python脚本可以在Programming/remoteApiBindings/python/python/和Programming/b0RemoteApiBindings/python/中找到。
  • 新增sim.setJointMaxForce和sim.getJointMaxForce,包括远程API等效项。 Sim.setJointForce现在已弃用。
  • 添加了sim.yawPitchRollToAlphaBetaGamma和sim.alphaBetaGammaToYawPitchRoll,以在这两个不同的Euler角度表示之间进行转换。
  • 还附带了真正的无头CoppeliaSim库(即coppeliaSimLibHeadless.dll或类似库)。 这是对通过-h命令行选项支持的无头模式的补充,该模式简单地禁止常规CoppeliaSim库的所有GUI元素。
  • Sim.setVisionSensorImage现在还可用于应用视觉传感器深度缓冲区。
  • 修复了一些形状导出问题(即法线和/或纹理)。
  • 由迭戈·丹尼尔·圣地亚哥提供的Simulink-CoppeliaSim通信插件现已面世。
  • 许多CoppeliaSim视频教程由Leopoldo Armesto提供。

CoppeliaSim V4.0.0(2019年11月26日)

  • 我们停止了V-REP的开发。相反,我们将精力集中在CoppeliaSim上。CoppeliaSim与V-REP 100%兼容(即它是V-REP项目的一个分支)。它运行速度更快,并且具有比V-REP更多的功能。当然,Coppelia Robotics将与CoppeliaSim支持和许可证完全互换地处理V-REP支持和许可证。
  • 修复了几个错误。感谢Mark Hartenstein,Stephen James,Simon Birrell,Sahil Sharma,Adrian Schoisengeier,RémiLux,Kilian Freitag,MaëlHörz和Eric Rohmer的注意或帮助解决它们。
  • 完全重写了计算例程,以处理碰撞检测、最小距离计算、接近传感器模拟、超频树和点云。可以显著提高速度。现在,这些例程在几何插件中进行了分组。几何插件的核心是Coppelia几何例程,可用于独立应用程序。
  • 您可以导入和导出XML文件。
  • 您可以从脚本编辑器中,通过上下文菜单在鼠标指针下打开函数/常量的API文档。
  • 在所有3个平台上都切换到Qt5.12.5。
  • 增加了对ROS 2.0支持,见compiledRosPlugins文件夹和ROS2接口源代码。还可以查看ROS 2.0 API和ROS 2.0教程。
  • 不再支持视觉传感器过滤。它们被视觉回调函数取代,后者允许更灵活的操作。旧场景会自动更新。添加了一个演示新的图像处理方法的演示场景:imageProcessingDemo.ttt。
  • 为视觉传感器、接近传感器和力/扭矩传感器添加了触发回调功能。
  • 添加了用户配置回调函数,该函数允许在双击用户参数图标时实现自定义行为。
  • 添加了用于将场景内容导出为glTF数据的附加功能:simAddOnFunc_gltfExporter.lua
  • 在仿真过程中,也可以将OpenGL3渲染器选择为相机的渲染器。
  • 添加了由亚历山大·奥利瓦(Alexander Oliva)、马可·科涅蒂(Marco Cognetti)和克劳迪奥·加兹(Claudio Gaz)提供的Franka Emik Panda机器人模型。
  • CoppeliaSim模拟可以通过Boris Bogaerts的CoppeliaSim-Blender-Tools导出到Blender 。
  • RLBench是一个雄心勃勃的大型基准测试和学习环境,旨在促进在视觉引导的操纵研究领域中的研究,这些领域包括:强化学习、模仿学习、多任务学习、几何计算机视觉,尤其是小样本学习。RLBench由Stephen James创建,围绕PyRep和CoppeliaSim 构建。
  • 添加了Niryo One机器人的模型。

许可证

致谢和鸣谢

概述

  CoppeliaSim是机器人仿真器里的“瑞士军刀”:你不会发现一个比它拥有更多功能,特色甚至更详尽的应用编程接口的机器人仿真器:

  • 跨平台(Windows,MacOS,Linux)
  • 六种编程方法(嵌入式脚本、插件、附加组件、ROS例程、远程客户端应用程序编程接口、BlueZero例程)
  • 6种编程语言(C/C++、Python、Java、Lua、Matlab和Octave)
  • 超过400种不同的应用编程接口函数
  • 4种物理引擎(ODE、Bullet、Vortex、Newton)
  • 集成射线追踪仪(POV-Ray)
  • 完整的运动学解算器(对于任何机构的逆运动学和正运动学)
  • 网格、OC树、点云-网孔干扰检测
  • 网格、OC树、点云-网孔最短距离计算
  • 路径规划(在2到6维中的完整约束,对于车式车辆的非完整约束)
  • 嵌入图像处理的视觉传感器 (完全可扩展)
  • 现实的接近传感器(在检测区域中的最短距离计算)
  • 嵌入式的定制用户界面,包括编辑器
  • 完全集成的第四类Reflexxes运动库 + RRS-1接口规范
  • 数据记录与可视化(时距图,X / Y图或三维曲线)
  • 整合图形编辑模式
  • 支持水/气体喷射的动态颗粒仿真
  • 带有模拟功能的模型浏览器(在仿真中依旧可行)
  • 多层取消/ 重做、影像记录、油漆的仿真、详尽的文档等

  机器人、机器人学、仿真器、仿真、运动学、动力学、路径规划、最短距离计算、碰撞检测、视觉传感器、图像处理、接近传感器、油漆分散仿真。

1. 用户界面

CoppeliaSim应用程序由几个元素组成。它的主要元素是:

  • 控制台窗口:在Windows下,当CoppeliaSim应用程序启动时,会创建一个控制台窗口,但它会再次直接隐藏。隐藏控制台窗口的默认行为可以在用户设置对话框中更改。在Linux下,需要从控制台启动CoppeliaSim,该控制台在整个CoppeliaSim会话中始终可见。在MacOSX下,最好是从终端启动CoppeliaSim,以使消息可见。控制台或终端窗口显示了加载了哪些插件以及它们的初始化过程是否成功。控制台窗口不是交互式的,仅用于输出信息。用户可以使用Lua打印命令(从脚本内部),或者使用C printf或std::cout命令从插件内部直接将信息输出到控制台窗口。除此之外,用户还可以通过编程方式创建辅助控制台窗口,以显示特定于模拟的信息。
  • 应用程序窗口:应用程序窗口是应用程序的主窗口。它用于显示、编辑、模拟场景并与之交互。在应用程序窗口中激活鼠标左右键、鼠标滚轮以及键盘具有特定功能。在应用程序窗口中,输入设备(鼠标和键盘)的功能可能会因上下文或激活位置而异。
  • 几个对话框:在应用程序窗口旁边,用户还可以通过调整对话框设置或参数来编辑场景并与场景进行交互。每个对话框将一组相关功能或应用于同一目标对象的功能分组。对话框的内容可能是上下文相关的(例如,取决于对象选择状态)。

以下是CoppeliaSim应用程序的典型视图:
在这里插入图片描述
  当您启动CoppeliaSim应用程序时,CoppeliaSim将初始化一个默认场景。用户可以自由地并行打开多个场景。每个场景与其他场景共享应用程序窗口和对话框,但是在应用程序窗口或对话框中只有活动的场景内容可见(在给定时间仅一个场景可见)。

在下一节中,将简要介绍应用程序窗口的元素。有关对话框的详细信息,请参阅本参考手册中的相关页面。

  • 应用程序栏:应用程序栏指示您的CoppeliaSim副本的许可证类型,当前正在显示的场景的文件名,一次渲染过程(一次显示过程)所用的时间以及模拟器的当前状态(模拟状态或活动编辑模式的类型)。应用程序栏以及应用程序窗口内的任何表面也可以用于将与CoppeliaSim相关的文件拖放到场景中。支持的文件包括“ * .ttt”文件(CoppeliaSim场景文件)和“ * .ttm”文件(CoppeliaSim模型文件)。
  • 菜单栏:菜单栏允许访问模拟器的几乎所有功能。大多数时候,菜单栏中的项目会激活一个对话框。菜单栏内容是上下文相关的(即,它将取决于模拟器的当前状态)。也可以通过弹出菜单,双击场景层次结构视图中的图标或单击工具栏按钮来访问菜单栏中的大多数功能。
  • 工具栏:工具栏提供经常访问的功能(例如,更改导航模式、选择其他页面等)。工具栏1中的某些功能以及工具栏2中的所有功能也可以通过菜单栏或弹出菜单访问。进一步了解更多细节。这两个工具栏都可以停靠和取消停靠,但是停靠仅适用于它们各自的初始位置。下图说明了每个工具栏按钮的功能:
    在这里插入图片描述
  • 模型浏览器:默认情况下,模型浏览器是可见的,但可以使用其相应的工具栏按钮进行切换。它的上部显示CoppeliaSim模型文件夹结构,而下部显示所选文件夹中包含的模型缩略图。可以将缩略图拖放到场景中以自动加载相关模型。如果拖放区域不受支持或不合适,则捕获的缩略图将显示为黑色。
    在这里插入图片描述
  • 场景层次结构:默认情况下,场景层次结构是可见的,但可以使用其相应的工具栏按钮进行切换。 它显示场景的内容(即组成场景的所有场景对象)。 由于场景对象是按类似层次结构的结构构建的,因此场景层次结构将显示此层次结构的树,并且各个元素都可以展开或折叠。 双击图标可打开/关闭与单击的图标相关的属性对话框。 双击对象名称可以对其进行编辑。 鼠标滚轮以及场景层次视图的滚动条的拖动允许向上/向下或向左/向右移动内容。 始终支持Ctrl和Shift选择。 可以将场景层次结构中的对象拖放到另一个对象上,以创建父子关系。 如果模拟器处于编辑模式状态,则场景层次将显示不同的内容。 有关更多信息,请参考形状编辑模式和路径编辑模式。
    在这里插入图片描述
  • 页面:每个场景最多可以包含8个页面,每个页面可以包含不限数量的视图。可以将页面视为视图的容器。请参阅页面和视图部分以获取更多详细信息。
  • 视图:页面中可以包含无数个视图。视图用于显示通过可见对象(例如,摄像机、图形或视觉传感器)看到的场景(本身包含环境和对象)。
  • 信息文本:信息文本显示与当前对象/项目选择以及运行模拟状态或参数有关的信息。可以使用页面左上方的两个小按钮之一来切换文本显示。另一个按钮可用于切换白色背景,根据场景的背景颜色提供更好的对比度。
  • 状态栏:状态栏显示与执行的操作、命令有关的信息,还显示来自Lua解释器的错误消息。用户还可以从脚本中使用sim.addStatusbarMessage函数将字符串输出到状态栏。默认情况下,状态栏仅显示两行,但可以使用其水平分隔手柄调整其大小。
  • Lua命令程序:一个读-评估-打印循环,它将文本输入添加到CoppeliaSim状态栏,从而可以像在终端机中一样快速输入和执行Lua代码。该代码可以在沙盒脚本或CoppeliaSim中的任何其他活动脚本中运行。
  • 自定义用户界面:自定义用户界面是用户定义的UI界面,可用于显示信息(文本、图像等)或自定义对话框,从而允许以自定义方式与用户进行交互。
  • 弹出菜单:弹出菜单是单击鼠标右键后出现的菜单。要激活弹出菜单,请确保在单击操作期间鼠标没有移动,否则可能会激活摄像机旋转模式(有关更多详细信息,请参见摄像机部分)。应用程序窗口内的每个界面(例如,场景层次视图、页面、视图等)可能会触发不同的弹出菜单(上下文相关)。弹出菜单的内容也可能根据当前的模拟状态或编辑模式而改变。除了仅在视图或页面上激活弹出菜单时才会显示的视图菜单项,大多数弹出菜单功能也可以通过菜单栏访问。

1.1 页面和视图

  CoppeliaSim中的页面是场景的主要查看界面。它不是直接的视图,而是可以根据需要包含一个、两个或任意多个视图。视图是用来显示必须是可见对象的特定对象的图像内容的视图。例如,如果视图与相机对象相关联,则它可以显示相机看到的内容。下图说明了页面,视图和可见对象的关系:
在这里插入图片描述
  视图在页面内可以具有固定位置,也可以在页面上具有浮动位置。以下页面配置说明了页面上方,视图和可见对象之间的关系:
在这里插入图片描述
  CoppeliaSim中的每个场景都有八个可自由配置的页面。可以通过页面选择器工具栏按钮访问(即显示)各个页面:
在这里插入图片描述
  创建新场景时,将以不同方式预配置8个页面中的每个页面。可以使用[弹出菜单->删除页面]来删除页面。页面不存在(即已删除的页面)显示暗灰色的表面。然后可以使用[弹出菜单->使用…设置页面]创建页面和具有空视图的默认页面配置。可以使用几种页面配置,如下图所示(数字表示视图索引):
在这里插入图片描述
  以上页面配置允许显示1-8个固定视图。浅灰色表面中的每一个对应一个空视图(即未关联的视图)。任何时候都可以使用[弹出菜单->删除页面]来删除页面。删除页面还将删除其包含的所有视图,但不会删除任何关联的对象。在现有页面配置之上,可以使用[弹出菜单->添加->浮动视图]添加无限数量的浮动视图。下图显示了这样一个示例:
在这里插入图片描述
  浮动视图可以移动和调整大小,但不允许使用鼠标左键或右键进行导航(例如,摄像机平移、摄像机旋转等)。双击一个浮动视图以将其内容与视图索引0交换(但是可以通过编程禁用它来禁止此操作)。要删除浮动视图,只需单击其右上角的按钮。

  要将可查看对象与视图关联,请选择该对象,然后在要与之关联的视图上单击[弹出菜单->视图->将视图与所选摄像机关联]或[弹出菜单->视图->将视图与选定的视觉传感器关联](弹出菜单将根据最后选定的对象自动调整其内容)。创建视图但尚未与可见对象关联时,[弹出菜单->添加->摄像机]命令将添加摄像机并将其直接与视图关联(即浏览)。给定的可见对象可以同时与任意数量的视图关联。

  或者,您还可以通过激活视图中的以下弹出窗口将视图与可见对象相关联:[弹出菜单->视图->视图选择器…]。这将打开视图选择器。

  将查看对象与视图关联后,将显示其图像内容,但视觉传感器的操作方式除外:视觉传感器需要生成其图像内容,并且只有在调用适当的API命令时才会发生。默认情况下,主脚本包含一个将处理场景中所有视觉传感器的命令(sim.handleVisionSensor(sim.handle_all))。除非将视觉传感器标记为显式处理而不是explicitely handled,否则它将在模拟过程中生成其图像内容。

可以通过以下方式自定义或调整与相机关联的视图:

  • 可以以实体或线框显示相机视图:[弹出菜单->视图->实体渲染]
  • 可以透视或正射投影模式显示摄像机视图:[弹出菜单->视图->透视投影]
  • 可以显示或隐藏边缘:[弹出菜单->视图->可见边缘]
  • 可以将边缘显示为粗线或细线:[弹出菜单->视图->粗线]
  • 可以打开和关闭纹理显示:[弹出菜单->视图->启用形状纹理]
  • 其关联的摄像机可以跟踪上一个选定的对象:[弹出菜单->视图->跟踪选定的对象]

1.2 自定义用户界面

  Federico Ferri提供的自定义UI插件(simExtCustomUI)提供了基于Qt框架的功能。 该插件的源代码可以在这里找到。

  自定义UI插件提供Qt样式的小部件,例如集成按钮、编辑框、滑块、标签、图像等的对话框。对自定义UI的任何操作(例如,按钮单击、文本编辑、滑块移动)都报告为脚本回调 。 其他功能可通过相关的API函数调用来访问。 这样可以在很大程度上自定义仿真。 以下显示了一个典型的自定义UI:
在这里插入图片描述

1.3 位置/方向操作

  用户可以使用以下工具栏按钮之一来修改和操纵对象或项目的位置和方向 :
在这里插入图片描述
  第一个显示位置对话框,第二个显示方向对话框。 在这两种情况下,用户都将能够使用鼠标移动选定的对象或项目。

1.3.1 位置对话框

  当选择对象转换工具栏按钮时,位置对话框变为可见:
在这里插入图片描述
  该对话框具有四个不同的选项卡:

鼠标移动
在这里插入图片描述
  在对话框的此部分中,可以设置用鼠标操作的对象的移动参数。另请参见有关通过鼠标移动对象的页面。

  • 相对于世界/父坐标系/自身坐标系:表示鼠标拖动将在与绝对参考系对齐,与父对象参考系对齐或与对象自己的参考系对齐的平面或直线上平移所选对象。
  • 移动步长:用鼠标拖动移动所选对象时使用的步长(有关默认步长,请参见用户设置对话框)。在按下鼠标按钮后按Shift键,仍可以在操作过程中使用较小的步长
  • 首选轴:沿着X /沿着Y /沿着Z:表示鼠标拖动会沿着上面选择的参考系的首选轴平移所选对象。在按下鼠标按钮后按ctrl键,可以在操纵过程中使用其他轴

位置
在这里插入图片描述
  在对话框的此部分中,可以在对象或项目上实现精确定位。

  • 相对于世界/父坐标系:表示坐标是相对于绝对参考系,还是相对于父参考系。
  • X- / Y- / Z坐标:所选对象相对于指示参考系(世界或父级)的位置。

平移
在这里插入图片描述

  在对话框的此部分中,可以实现精确的对象或项目移动。

  • 相对于世界/父坐标系/自身坐标系:表示平移将相对于绝对参考系,相对于父参考系或相对于对象自身参考系。
  • 沿X/Y/Z轴平移:表示沿指示参考系(世界、父级或自身坐标系)的x、y和z轴的所需平移量。

位置缩放
在这里插入图片描述

  在对话框的此部分中,可以实现对象或项目位置的精确缩放。

  • 相对于世界/父坐标系:表示位置缩放将相对于绝对参考系或相对于父参考系。
  • 沿X/Y/Z轴缩放:表示沿指示参考系(世界或父级)的x、y和z轴的所需位置缩放。

1.3.2 方向对话框

  选择对象旋转工具栏按钮时,方向对话框将可见:
在这里插入图片描述
  该对话框具有三个不同的选项卡:

鼠标旋转
在这里插入图片描述
  在对话框的此部分中,可以设置用鼠标操作的对象的旋转参数。另请参见有关通过鼠标移动对象的页面。

  • 相对于世界/父坐标系/自身坐标系:表示鼠标拖动将使所选对象绕绝对参考系,父对象参考系或对象自身参考系的轴旋转。
  • 旋转步长:用鼠标拖动旋转所选对象时使用的步长(有关默认步长,请参见用户设置对话框)。在按下鼠标按钮后按Shift键,仍可以在操作过程中使用较小的步长。
  • 首选轴:沿着X/Y/Z:表示鼠标拖动允许围绕上方选择的参考系的首选轴旋转所选对象。在按下鼠标按钮后按ctrl键,可以在操纵过程中使用其他轴。

方向
在这里插入图片描述
  在对话框的此部分中,可以设置精确的对象方向。

  • 相对于世界/父坐标系:指示所指示的欧拉角是相对于绝对参考系,还是相对于父参考系。
  • Alpha / Beta / Gamma:选定对象相对于指示参考系(世界或父级)的欧拉角。

旋转
在这里插入图片描述
  在对话框的这一部分中,可以实现精确的对象旋转。

  • 相对于世界/父坐标系/自身坐标系:指示旋转将相对于绝对参考系,相对于父参考系或相对于对象自身参考系。
  • 绕X / Y / Z旋转:表示围绕指示参考系(世界、父级或自己坐标系)的x、y和z轴的所需旋转量。

1.3.3 使用鼠标移动物体

  除了通过坐标和变换对话框修改对象配置之外,还可以使用鼠标直接操作对象:选择对象(和某些项目)后,可以使用以下工具栏按钮来平移或旋转对象:
在这里插入图片描述
  默认情况下,平移是在世界的X-Y平面上执行的。对于每个对象,还可以沿着不同的轴/平面并且相对于不同的参考系执行此操作,具体取决于位置对话框中的设置。青色覆盖图表示当前平移平面或轴。
  默认情况下,绕对象自己的Z轴执行旋转。对于单个对象,还可以围绕不同的轴或相对于不同的参考系执行该操作,具体取决于方向对话框中的设置。青色叠加图表示当前的旋转轴。
在这里插入图片描述
  可以在用户设置对话框中调整默认的平移和旋转步长(捕捉),但是建议分别保持5厘米和5度的值,或者分别设置对象的步长。在对象操作过程中按下鼠标按钮后,按住Shift键可以暂时禁用捕捉。以类似的方式,在对象操作过程中按下鼠标按钮后,按住ctrl键可以临时激活其他平移或旋转轴。
  当模拟器处于顶点编辑模式或路径编辑模式时,也可以使用对象/项目转换工具栏按钮。

1.4 欧拉角

  欧拉角是描述刚体方向的三个角度。 谈论欧拉角时有十二种不同的约定。 在CoppeliaSim中,欧拉角 α \alpha α β \beta β γ \gamma γ(或(a,b,g))描述了由三个基本旋转组成的旋转:
在这里插入图片描述
  其中Rx,Ry和Rz分别代表绝对参考系围绕x、y和z轴的元素旋转。

  对于刚体或场景对象,如果按照以下顺序围绕其自身的参考系旋转,则可以获得相同的变换:围绕自身X旋转 α \alpha α,然后围绕自身Y旋转 β \beta β,接着围绕自身Z旋转 γ \gamma γ

1.5 用户设置

  CoppeliaSim中的某些值和设置不依赖于场景或模型,而是依赖于用户。 可以使用[菜单栏->工具->设置]或单击以下工具栏按钮来访问用户设置对话框(部分反映了system/usrset.txt的内容):
在这里插入图片描述

  • 平移步长:在对象操作模式下平移对象时使用的线性步长。建议保持5厘米的值。可以在坐标和变换对话框中为对象分配特定的步长。
  • 旋转步长:在对象操作模式下旋转对象时使用的角度步长。可以在坐标和变换对话框中为对象分配特定的步长。
  • 移除相同的顶点,容差:选中后,位于其他顶点附近的顶点将被分组以形成一个顶点(然后将在周围的三角形之间共享)。这减少了所需的内存资源量。导入网格时此参数会影响网格,而在退出形状编辑模式时会影响形状。容差指定将顶点分组时要考虑的距离阈值。通常,保持较低的值,但不要为零;某些网格数据格式(例如STL)会为每个三角形分配单独的顶点,而不管某个顶点与另一个三角形中的另一个顶点是否相同;这会大大增加所需的内存量。
  • 删除相同的三角形:选中后,在导入操作期间或形状离开形状编辑模式时,将删除网格资源中的相同三角形。
  • 忽略三角形缠绕:三角形可以有两个不同的方向(因为它有两个不同的面)。选择此项目时,在识别相同三角形时将忽略三角形方向。
  • 启用撤消/重做:启用或禁用撤消/重做功能。该功能通过每次记录更改将整个场景序列化(保存)到内存中来进行操作。仅存储与先前撤消点的差异,以节省内存。这是一种非常有效且具有故障保护功能的撤消/重做,插件或主客户端应用程序也支持此撤消/重做,并且仅由于CoppeliaSim的序列化例程非常快而被允许。但是,有时候计算机真的很旧或场景内容非常大(例如非常详细的cad数据)时,这种方法会使整个应用程序变慢。在这种情况下,只需禁用撤消/重做功能
  • 显示世界参考:在摄像机视图的左下方显示一个小的世界参考系。与CoppeliaSim中的每个地方一样,红色,绿色和蓝色箭头分别对应于x轴,y轴和z轴。
  • 显示选定对象的边界框:在选定对象周围显示白色/黄色边界框。
  • 启用自动保存:启用自动保存后,将定期保存每个打开的场景。如果发生崩溃,可以恢复自动保存的场景。可以在文件system/usrset.txt中调整自动保存延迟
  • 隐藏控制台窗口:允许隐藏或显示控制台窗口。默认情况下,控制台窗口是隐藏的。在Mac上,该项目不可用(可以在系统控制台(应用程序/实用程序/控制台)中查看标准输出)。
  • 在模拟过程中隐藏层次结构:在模拟运行时自动隐藏场景层次结构。
  • 调整OpenGL设置:打开一个对话框,可调整与OpenGL相关的大多数设置:

在这里插入图片描述

  • Offscreen上下文类型:Offscreen渲染上下文的类型。 默认为不可见窗口。
  • FBO类型:帧缓冲区对象的类型。 默认为Mac上基于Qt的FBO,以及Windows和Linux上基于非Qt的FBO。
  • VBO操作:是否使用顶点缓冲区对象。 默认选项使用VBO。(ssh -X 远程运行coppeliaSim headless模式,4.0.0版本前似乎需要将此选项改成Disabled;4.1.0开始为真正的headless模式,直接ssh -X即可远程启动)
  • 空闲fps:空闲时每秒的帧数。

1.6 快捷键

当焦点位于场景层次结构或页面上时,支持以下快捷键:

  • CTRL+A:全选
  • <esc>:清除选择
  • CTRL+C:复制选择
  • CTRL+V:粘贴复制缓冲区
  • CTRL+X:剪切选择
  • <delete>:删除选择
  • <backspace>:删除选择
  • CTRL+O:打开一个场景
  • CTRL+N:打开一个新场景
  • CTRL+S:保存场景
  • CTRL+W:关闭场景
  • CTRL+Q:退出应用程序
  • CTRL+<space>:开始/停止模拟
  • CTRL+E:在1)普通2)对象平移3)对象旋转鼠标模式之间切换
  • CTRL+D:打开对象属性对话框
  • CTRL+G:打开计算模块对话框
  • CTRL+B:调整视图以适合选定的对象;如果未选择任何对象,则调整整个场景。 重点需要放在视图上。
  • CTRL+ALT+C:将焦点放在Lua命令行控制栏上
  • CTRL+L:清除状态栏(当焦点在Lua命令行控制栏上时)

1.7 命令行

通过命令行启动CoppeliaSim时,支持以下命令行选项:

  • -h:在无头模式下运行CoppeliaSim(即没有任何GUI)
  • -sXXX:自动开始仿真。 XXX表示可选的模拟时间(以毫秒为单位),此后模拟应再次停止。
  • -q:在第一次模拟运行结束后自动退出CoppeliaSim。
  • -aXXX:加载并运行通过其文件名(XXX)指定的附加加载项脚本。该加载项将仅在第一个场景中加载并运行。
  • -bXXX:加载并运行通过其文件名(XXX)指定的附加加载项脚本。加载项将针对将要打开的所有场景加载并运行。
  • -GYYY = XXX:命名参数:YYY表示键,XXX表示值,可以在CoppeliaSim中使用simGetStringNamedParam进行查询。
  • -gXXX:XXX表示一个可选参数,可以在CoppeliaSim中使用sim_stringparam_app_arg参数进行查询。该参数可用于各种自定义目的。
  • -gREMOTEAPISERVERSERVICE_PORT_DEBUG_PREENABLESYNC:该参数可用于请求在CoppeliaSim启动时启动连续的旧式远程API服务器服务。为此,请在以下字符串中替换以下内容:
    • PORT是端口号
    • DEBUG是调试模式(设置为TRUE或FALSE)
    • PREENABLESYNC允许预启用同步模式(设置为TRUE或FALSE)
  • -gGUIITEMS_XXX:该参数可用于禁用特定的GUI项目。为此,请使用启动选项中的十进制位编码值替换上面的字符串XXX。
  • XXX.ttt:加载CoppeliaSim场景。
  • XXX.ttm:加载CoppeliaSim模型。
  • XXX.brs:加载XReality场景。
  • XXX.brm:加载XReality模型。

  例如,要以无头模式启动CoppeliaSim,加载场景myScene.ttt,运行模拟5秒钟,然后停止模拟并自动再次离开CoppeliaSim,从CoppeliaSim主文件夹中键入:

Windows:coppeliaSim.exe -h -s5000 -q myScene.ttt
Mac:./ coppeliaSim.app/Contents/MacOS/coppeliaSim -h -s5000 -q ../../../myScene.ttt
Linux:./ coppeliaSim.sh -h -s5000 -q myScene.ttt

2. 场景和模型

  场景和模型是CoppeliaSim的主要模拟元素。模型是场景的子元素,明确标记为模型。场景可以包含任何数量的模型。下图说明了场景模型关系:
在这里插入图片描述
场景和模型都可能包含以下元素中的一个或多个:

  • 对象
  • 集合
  • 对象的碰撞
  • 距离对象
  • 逆运动学组
  • 子脚本
  • 自定义用户界面

除上述元素外,场景还将包含以下元素:

  • 环境
  • 主脚本
  • 页面和视图

  场景保存在*.ttt文件中,模型保存在*.ttm文件中。这两种文件类型都可以通过从资源管理器窗口中将它们拖放到CoppeliaSim应用程序来打开。也可以双击打开它们。

2.1 场景

  与模型相比,场景可以包含完全相同类型的元素,但还包括特定于场景的以下元素:

  • 环境
  • 主脚本
  • 页面和视图

  场景或场景图像内容可以通过一个与视图相关联的可视对象查看,视图本身包含在一个页面中。当创建一个新的场景时([菜单栏->文件->新场景]),默认的场景将包含以下元素:

  • 几个相机对象:如果相机与一个视图相关联,它就可以看到场景。
  • 几个灯光对象:没有灯光,场景几乎是不可见的。灯光是用来照亮场景。
  • 几种视图:视图与相机关联,并显示相机所看到的内容。视图包含在页面中。
  • 多个页面:一个页面包含一个或多个视图。
  • 环境:环境由环境光、雾、背景色等属性组成。
  • 地板:地板由模型中分组的对象组成。
  • 默认主脚本:默认主脚本应允许运行最少的模拟,而无需子脚本。如果子脚本与场景对象相关联,则在稍后阶段复制到场景中的子脚本也将自动执行(由主脚本调用)。

  可以使用[菜单栏->文件->打开场景…]打开(加载)场景,并使用[菜单栏->文件->保存场景]或[菜单栏->文件->保存场景为…]保存场景。场景文件(“*.ttt”-files)也支持在资源管理器窗口和应用程序窗口之间的拖放操作。也可以双击场景文件,在这种情况下,它们将启动CoppeliaSim应用程序并打开。
  只需在场景层次结构的上部单击即可切换已打开的场景(所有打开的场景都在场景层次结构的顶部分组),或者通过相关工具栏按钮使用场景选择器来实现:
在这里插入图片描述

2.2 模型

  模型是场景的子元素。除了文件(“ * .ttm”-文件类型)外,模型本身不能存在,也不能通过自身进行模拟。模型必须包含在场景中才能运行。
  通过在同一层次树上构建的场景对象的选择来定义模型,其中树的基础必须是标记为对象是模型基础的对象。可以通过[菜单栏->文件->加载模型…]来加载它们。但是,通过在模型浏览器和场景视图之间进行拖放操作来加载模型更加容易和方便。可以使用[菜单栏->文件->将模型另存为…]保存模型,只需确保选择了一个标记为对象为模型库的单个对象,否则将模型另存为…-菜单项未启用。还请确保遵循有关如何构建清晰仿真模型的教程。

通过以下步骤定义模型:

  • 将逻辑上属于模型的所有对象附加到基础对象,以使基础对象成为模型树的基础。
  • 检查对象是否是对象通用属性中的模型基本项目。
  • 在与上述相同的对话框中,检查对象/模型是否可以转移或接受DNA项目。如果稍后进行修改,这将简化模型的重新实例化。
  • 在与上述相同的对话框中,点击编辑模型属性,您可以定义特殊的替代属性(例如,使整个模型不可见、不碰撞等)。这样可以快速禁用模型中定义的所有对象的某些属性。
  • 对于模型中的所有对象(基础对象除外),请在对象公共属性中检查选择模型的基础而不是项目。这将保护您的模型:您将无法直接选择模型中的单个对象,并且几乎可以将其作为单个对象来操纵模型。
  • 对于通常不可见的所有对象,请选中“不显示为内部模型”选择项。这将使模型边界框在模型周围以正确的尺寸显示。(感觉像是Scene Object Properties/General properties中的Ignored by model bounding box,使得整个模型忽视超声、视觉的可视范围,而使用真正的模型大小)
  • 考虑一下模型的作用:您能否将其附加到其他对象上? (例如,您的模型是可以连接到机械手腕上的抓手)。还是可以附加一些其他模型? (例如,您的模型是可以接受机械手模型的操纵器)。确定角色后,定义模型的组装行为。另请参阅此动力学设计注意事项。

  现在,无法再在场景中选择建立在模型基础上的单个对象(选择它们将改为选择模型的基础),但是仍然可以通过在选择过程中按住Ctrl和Shift键来单独选择它们,或者通过在场景层次中选择它们。除此之外,当选择基础对象时,将显示一个包围整个模型的点画边界框,如下图所示:
在这里插入图片描述
  注意标记为模型基础的对象图标左侧的模型标签:
在这里插入图片描述
  双击模型标签可打开模型对话框,可在其中调整模型属性。修改模型的层次结构后,最好折叠模型的层次结构,以便轻松识别逻辑分组的元素/模型的数量:
在这里插入图片描述
  当子脚本以编程方式访问对象时,将多个对象分组为模型也很重要。请记住,在CoppeliaSim中,对象/模型可以随时复制,甚至在模拟过程中也可以复制。为了使复制的子脚本能够访问正确的对象(不是原始对象,而是复制的对象),应始终在访问子脚本的同时复制子脚本。保证的一种方法是创建模型(如上所述),并确保访问模型中对象的子脚本与模型中包含的对象相关联。最好的方法是将一个子脚本(也可能有第二个子脚本)与模型的基础关联。有关更多信息,请参考以编程方式访问对象部分。
  为了使模型易于组合(即彼此构建)而无需进行任何其他修改,重要的是要考虑模型将扮演什么角色;会动态模拟吗?它会被附加到其他型号,还是会接受其他附加模型?这些问题的答案将使您能够选择最佳对象类型作为模型基础。有关更多信息,请参考设计动态仿真部分。
  复制和粘贴模型的行为与保存模型然后加载(就像使用内存缓冲区而不是磁盘空间一样)完全相同。可以将模型从一个场景复制到另一个场景,就像其他对象一样。模型文件(“ * .ttm”文件)还支持资源管理器窗口和应用程序窗口之间的拖放操作。也可以双击模型文件,在这种情况下,它们将启动CoppeliaSim应用程序并加载到默认场景中。
  可以在模型对话框中单独调整模型的属性。

2.2.1 模型对话框

  可以在模型对话框中单独调整模型的属性。可以双击场景层次中的模型图标来打开它:
在这里插入图片描述

  • 选择模型缩略图:保存模型时,会弹出一个对话框,要求提供模型缩略图(将在模型浏览器中显示)。但是,如果您希望以其他配置保存模型的缩略图(例如,您希望以直线配置保存蛇形机器人的模型,但是希望缩略图以弯曲的形态可视化蛇形机器人),则可以在此处指定缩略图。
  • 覆盖属性:您可以在此处为整个模型(即模型层次结构树中的所有对象)禁用(覆盖)特定属性。例如,这可以方便地快速禁用需要太多计算时间的模型。另请参见有关可碰撞对象,可测量对象,可呈现对象和可检测对象的部分,以及sim.setModelProperty API函数。
  • 模型内容确认/信息:与模型有关的信息。确认模型的原始作者或导入的网格始终是一个好习惯。打开包含确认信息的模型时,它将自动显示该信息。

3. 环境

  CoppeliaSim中的环境定义了属于场景但不属于场景对象的属性和参数。 保存模型时不保存环境属性和参数,而仅在保存场景时保存。

  环境定义以下属性和参数:

  • 背景颜色。
  • 雾参数。 如果选择了相应的选项,则雾参数不会与场景对象直接交互,除非与摄影机或视觉传感器交互。
  • 环境光。
  • 场景创建信息。
  • 其他设置。

3.1 环境对话框

  可以通过[菜单栏->工具->环境]或通过双击场景层次结构中的以下图标来访问环境对话框:
在这里插入图片描述

  • 背景(上/下):可以调整场景的背景色。向上部分对应于屏幕的上部(天空),向下部分对应于屏幕的下部。仅当禁用雾功能时,背景色才可见。
  • 环境光:可以调整场景的环境光。环境光可以看作是场景的最小光,它从各个方向以完全相同的方式照亮对象。有关场景照明的更多详细信息,请参见关于灯光的部分。
  • 调整雾参数:允许调整各种雾参数。
  • 最大三角形尺寸(绝对):此项目不会影响形状的外观。但是,它将影响大多数CoppeliaSim计算模块的执行速度。例如,在两个实体之间执行最小距离计算时,如果两个实体均由大小相似的三角形组成,则执行速度通常会更快。最大三角形大小值指定如何处理形状的内部表示形式(即,形状的计算结构的详细程度)。小尺寸将增加预处理时间,但是通常仿真执行速度会同时提高。此值将整体最大三角形大小设置为绝对值。另请参阅下一项和在三角形编辑模式下的缩小三角形尺寸项目。
  • 最小三角形尺寸(相对):与上一个项目相似,但该项目有助于避免创建太大的计算结构,而这可能会花费很长时间。此值将最小三角形尺寸设置为相对值(相对于给定对象的最大尺寸)。
  • 保存操作还会保存现有的计算结构:用于距离计算,碰撞检测等。在模拟(预处理)开始时或第一次涉及形状以加快速度时会计算数据结构计算。计算该数据结构可能很耗时,因此用户可以选择将其与场景或模型一起保存。但是,必须注意,将保存的其他信息很大,并且会导致文件更大(有时是两倍或更多)。
  • 禁用形状纹理:如果选中,则将禁用应用于形状的所有纹理。
  • 下一个场景保存后锁定场景:如果要从版本/修改,脚本内容查看和资源导出中锁定场景,请选择此项目。下一个场景保存操作后,场景将被锁定。如果希望以后可以修改同一场景,请确保已将其保存为未锁定状态。
  • 扩展字符串:描述附加环境属性的字符串,主要由扩展插件使用(另请参见sim.getExtensionString API函数)。
  • 清理对象名称:允许使用哈希标签将一些顺序放入对象名称中。这不是必需的,但是可以方便地减少哈希标记后的后缀数。
  • 清理重影:删除场景中可能包含的所有重影对象。另请参阅幻像录制功能。
  • 场景内容确认/信息:与场景相关的信息。最好先确认场景,模型或导入的网格的原始作者。当一个包含确认信息的场景被打开时,它将自动显示该信息。

3.2 纹理对话框

  纹理对话框允许您查看和修改与附加到形状的纹理相关的属性。 通过在形状属性对话框中单击“设置纹理项目”可以访问它:
在这里插入图片描述
  纹理是可以应用于曲面以使其看起来更真实的位图图像。 想象一下,在矩形表面上应用砖纹理以使其看起来像砖墙。 下图说明了带纹理的表面:
在这里插入图片描述
  CoppeliaSim将纹理应用于形状的默认方式是将其投影到形状的x / y平面上,如下图所示:
在这里插入图片描述
支持以下5种纹理映射方法:

  • 投影贴图:将纹理简单地投影到对象的X-Y平面上(请参见上文)。 将计算纹理坐标。
  • 圆柱贴图:将纹理包裹在对象的Z轴上。 将计算纹理坐标。
  • 球面贴图:将纹理球面贴图到对象上。 将计算纹理坐标。
  • 箱形贴图:将纹理应用于箱形对象的所有6个面上。 将计算纹理坐标。
  • 导入的纹理坐标:通过OBJ文件格式,可以在导入网格的同时导入特定的纹理坐标。

下图说明了5种映射方法:
在这里插入图片描述

加载新纹理时,将打开以下对话框:
在这里插入图片描述

  建议保持默认设置,以保持与旧显卡的高兼容性(选中“将纹理缩放至”时,无论如何将所有纹理的大小调整为2的幂),并且文件大小应较小。
  一旦纹理存储在内存中,就可以在实际映射发生之前对其进行缩放,移动和旋转,以获得所需的视觉外观。

可以通过单击“加载新纹理”按钮来加载静态纹理。 当前支持以下文件格式:

  • JPEG
  • PNG
  • TGA
  • BMP
  • TIFF
  • GIF

  除了从文件中加载纹理,您还可以选择已加载的静态纹理,甚至是视觉传感器生成的动态纹理。 只需单击“从现有纹理中选择纹理”按钮。 请注意,动态纹理仅在模拟过程中才能正确显示(并且只有在正确处理了相关视觉传感器的情况下才可以显示)。

4. 实体

  实体是指场景对象或集合的术语。 下图说明了场景对象、集合、实体之间的关系:

在这里插入图片描述

4.1 场景对象

  CoppeliaSim中用于构建模拟场景的主要元素是场景对象(简称为对象)。 对象在场景层次结构和场景视图中可见。 在场景视图中,对象具有三维表示,如下图所示:

在这里插入图片描述

下面简要介绍了每种对象类型的功能:

  • 形状:形状是由三角形面组成的刚性网格。
  • 关节:关节对象是关节或执行机构。 支持四种类型:转动关节、移动关节、螺钉和球关节。
  • 图形:图形用于记录和可视化仿真数据。
  • 虚拟对象:虚拟对象是一个有方向的点。 虚拟对象是多用途对象,可以有许多不同的应用。
  • 接近传感器:接近传感器以几何精确的方式检测其体积内的物体。 CoppeliaSim支持棱锥型、圆柱型、圆盘型、圆锥型和射线型接近传感器。
  • 视觉传感器:视觉传感器是一种相机类型的传感器,对光、颜色和图像做出反应。
  • 力传感器:力传感器是一种能够测量施加在其上的力和扭矩的对象。 如果给定的阈值过大,它还具有中断的能力。
  • 摄影机:摄影机是允许从各种视点查看模拟场景的对象。
  • 灯光:灯光是允许照亮模拟场景的对象。
  • 路径:路径是在空间中定义路径或轨迹的对象。 它可以用于各种目的,也可以作为定制的关节或执行机构。
  • OC树:OC树是由体素组成的空间划分数据结构。
  • 点云:点云是包含点的OC树结构。

以上某些对象可以具有特殊的属性,从而允许其他对象或计算模块与它们进行交互。 对象可以是:

  • 可碰撞:可以测试可碰撞对象是否与其他可碰撞对象发生碰撞。
  • 可测量:可以计算可测量对象与其他可测量对象之间的最小距离。
  • 可检测:可通过接近传感器检测到可检测的对象。
  • 可渲染:视觉传感器可以看到或检测到可渲染对象。
  • 可查看:可以通过视图查看、查看可查看对象,或者可以在视图中可视化它们的图像内容。 有关详细信息,请参阅页面和视图-部分。

  每个对象在模拟场景中都有一个位置和方向。 我们将物体的位置和方向称为物体的构型。 对象可以附加到其他对象(或在彼此的顶部构建)。 如果对象A构建在对象B之上,则对象B是父对象,而对象A是子对象。 要在对象B和对象A之间创建父子关系,请选择对象A,然后选择对象B(选择顺序很重要)。 然后选择[菜单栏–>编辑–>使最后选择的对象为父对象]。 下图说明了此操作:

在这里插入图片描述

  或者,可以将一个对象拖放到场景层次中的另一个对象上,以获得类似的结果。 请注意,对象A的配置没有更改(两个对象都保留了各自的配置)。 但是,查看场景层次结构,您可以看到对象A成为对象B的子对象。如果现在移动对象B,对象A将自动跟随,因为对象A附加到对象B。通过选择对象A,然后选择[菜单栏–>编辑–>使所选对象孤立],可以分离对象A。 这样做将在不更改其配置的情况下分离对象A。 或者,您可以将对象拖放到世界图标上以获得类似的结果。

  每个对象都具有相对于世界参考系的绝对配置(或累积配置)和相对于父对象参考系的本地配置(或相对配置)。 在上面的示例中,当对象A成为对象B的子级时,对象A的绝对配置没有改变,但是它的本地配置被修改了。

  最后选定对象的绝对配置显示在信息文本中。 要修改或调整对象的绝对或局部配置,请参考坐标和变换对话框以及有关对象位置/方向操纵的部分。

  一些对象数据可以由图形对象记录。 有关如何记录对象数据的详细信息,请参阅图形和图形数据流。

4.1.1 对象特征

  场景对象属性对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  场景对象属性对话框显示与对象(即场景对象)相关的属性。 该对话框是上下文相关的,其内容将主要取决于场景对象选择状态:仅显示最后选择的对象的属性。 这些属性分为两个部分:

  • 特定于对象类型的特性:特定于选定对象类型的特性。 有关详细信息,请参阅下面的更多内容。
  • 对象通用特性:所有对象类型的通用特性。

  对话框上部的2个按钮允许选择要显示的所需属性类型。 如果对象选择为空,则所有对话框项目都将处于非活动状态。

在这里插入图片描述
对话框的对象类型特定属性部分将显示以下对话框之一,具体取决于最后选择的对象的类型:

  • 摄像机属性。
  • 灯光属性。
  • 形状属性。
  • 关节特性。
  • 虚拟属性。
  • 图形属性。
  • 接近传感器属性。
  • 视觉传感器属性。
  • 力传感器属性。
  • 路径属性。

4.1.1.1 对象通用属性

  对象通用属性对话框是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述
  在场景对象属性对话框中,单击通用按钮以显示对象通用属性对话框。 该对话框显示最后一个选定对象的设置和参数。 如果未选择任何对象,则该对话框处于非活动状态。 如果选择了多个对象,则可以将一些参数从最后一个选择的对象复制到其他选择的对象(应用于选择-按钮)

在这里插入图片描述

  • 可选:表示是否可以在场景中选择对象。 始终可以在场景层次中选择对象。 另请参阅sim.setObjectProperty函数。
  • 选择过程中不可见:启用后,对象在选择过程中将不可见(即您可以通过对象进行选择)。
  • 被深度过程忽略:启用后,将在深度渲染过程中忽略对象。 深度渲染过程用于正确定位摄影机移动的红色球体。
  • 改为选择模型基础:如果启用,则在场景中选择对象将改为选择其标记为对象是模型基础的第一个子对象(请参见更下面的内容)。 此属性在保护模型不受错误操作的影响时非常方便,允许将其作为单个实体与其他对象一起进行操作。 请参阅有关模型的部分以及sim.setObjectProperty函数。
  • 被模型边界框忽略:如果选中此选项,并且对象是模型的一部分,则模型边界框(即模型选择边界框)将不包含该对象。 这对于可能使模型边界框看起来过大的不可见对象非常有用。 此属性没有功能效果。 另请参阅sim.setObjectProperty函数。
  • 忽略视图调整:在未选择任何对象的情况下,将场景调整到视图时,不会考虑选择此项目的对象。 通常,地板和类似的会被这样标记。 另请参阅视图管件工具栏按钮和sim.cameraFitToView API函数。
  • 在仿真过程中不能删除。:如果启用,则对象将在模拟运行时忽略删除操作(但是,通过代码触发时,删除仍然有效)。
  • 无法删除:如果启用,则对象将忽略删除操作(但是,通过代码触发时,删除仍然有效)。
  • 扩展字符串:描述附加对象属性的字符串,主要由扩展插件使用(另请参阅sim.getExtensionString API函数)。
  • 摄像机可见层:CoppeliaSim中的每个对象都可以分配给一个或多个可见层。 如果至少有一个可见层与层选择对话框层匹配,则从摄影机查看对象时将可见。 默认情况下,形状指定给第一层,关节指定给第二层,虚拟对象指定给第三层,依此类推。
  • 可通过以下方式查看:允许指定唯一能够看到对象的相机或视觉传感器(或包含相机或视觉传感器的集合)。
  • 可碰撞:允许启用或禁用选定可碰撞对象的碰撞检测功能。
  • 可测量:允许启用或禁用所选可测量对象的最小距离计算功能。
  • 可检测:允许启用或禁用所选可检测对象的接近传感器检测功能。 单击详细信息允许您编辑可检测的详细信息。
  • 可渲染:允许启用或禁用选定可渲染对象的视觉传感器检测功能。
  • Object is model base:指示对象是否应充当模型的基。 标记为模型基础的对象具有特殊属性(例如,保存或复制对象还会自动保存/复制其所有子项和子项,等等)。 此外,当选择这样的对象时,选择边界框显示为粗线,包含整个模型。 请参考模型,并选择模型的基础,而不是上面的项目。
  • 编辑模型属性:允许打开模型对话框。
  • 对象/模型可以传输或接受DNA:当为对象或模型启用此功能时,它将与其所有副本共享相同的标识符。 然后,对象或模型可以通过传输DNA工具栏按钮将其DNA传输(即复制其自身的实例)到其所有同级(即具有相同标识符的对象/模型)。 想象一下,场景中有100个相同的机器人,您想要以类似的方式修改它们:只需修改其中一个,选择它,然后单击传输DNA工具栏按钮。 为了便于模型重新实例化,几乎应该始终检查该项目的模型库(请参阅更多内容)。

在这里插入图片描述

  • 集合自碰撞指示器:当在两个相同的集合之间执行碰撞(或最小距离)计算时,CoppeliaSim通常会对照该集合中的所有其他项检查所有集合项。 在某些情况下,例如运动链,人们不希望检查连续的链接,因为它们可能会在接口处不断发生碰撞。 在这种情况下,您可以使用集合自碰撞指示器:如果同一集合的两个项目的指示器差恰好为1,则不会相互检查,如下图所示:

在这里插入图片描述

  • 缩放:在CoppeliaSim中可以灵活地缩放对象或模型。 对象或模型的大小以及所有相关属性都会适当缩放(例如,关节范围、速度设置、质量等)。 以便缩放的对象或模型可以正常继续操作(但比例不同)。

  • 装配:打开一个对话框,该对话框允许指定装配工具栏按钮在装配过程中如何处理对象(如果对象的装配方式与通过装配工具栏按钮不同,则以下设置不会有任何影响):

  • 在这里插入图片描述

    • 父对象的所需匹配值:对象可以附加到另一个对象(即成为另一个对象的子对象),但前提是列出的父对象所需匹配值之一与其新父对象的子值所需匹配值之一匹配。 此功能对于设置夹具兼容性标准非常有用(例如,夹具A只能与具有类型A的工具提示的机器人连接)。
    • 子对象的所需匹配值:该对象可以将另一个对象附加到其自身(即成为另一个对象的父对象),但前提是其子对象所需的匹配值之一与其新子对象的父值的所需匹配值之一匹配。 此功能对于设置夹具兼容性标准非常有用(例如,夹具A只能与具有类型A的工具提示的机器人连接)。
    • 集合时,特定的局部变换。 将应用矩阵:如果选中,则对象在组装时将不会停留在原地:特定的变换矩阵将用作其新的局部变换矩阵。 默认情况下,该矩阵是标识矩阵,但您可以通过单击“设置矩阵”指定特定矩阵。 此功能对于自动定位对象并使其相对于其新父级正确定向非常有用(例如,为了让夹爪自动正确地放置在机器人的工具提示上)。

  对象选择顺序对于装配操作很重要,即首先选择要成为子对象的对象,然后选择要成为父对象的对象。 如果选择顺序错误,或者成为父对象不合适,那么如果没有歧义,CoppeliaSim将尝试猜测用户的真实意图(例如,通过在成为父对象的后代中搜索合适的匹配)。

4.1.2 可碰撞对象

  可碰撞物体是可以测试与其他可碰撞物体碰撞的物体,即将记录碰撞状态的物体。 这并不意味着它们会对碰撞做出响应(即可响应),这是不同的。 可碰撞对象包括:

  • 虚拟对象
  • 形状
  • OC树
  • 点云

  由于基于点,因此虚拟对象和点云只能与OC树(基于体积)发生碰撞。

  集合也是可碰撞的,因为它们可能包含可碰撞的对象。

  可碰撞对象可以单独启用或禁用其可碰撞属性(默认情况下为非纯图形、OC树和点云启用)。 这可以在对象通用属性中设置,也可以通过sim.setObjectSpecialProperty API函数设置。

  此外,根据可碰撞对象的相关模型特性(如果它们是模型的一部分),可碰撞对象的可碰撞特性可以被替代。 有关详细信息,请参考模型对话框。

4.1.3 可测量对象

  可测量对象是可用于相对于其他可测量对象进行最小距离计算的对象。 它们包括:

  • 虚拟对象
  • 形状
  • OC树
  • 点云

  集合也是可度量的,因为它们可能包含可度量的对象。

  可以单独启用或禁用可测量对象的可测量特性(默认情况下为非纯形状、OC树和点云启用)。 这可以在对象通用属性中设置,也可以通过sim.setObjectSpecialProperty API函数设置。

  此外,根据可测量对象的相关模型特性(如果它们是模型的一部分),可测量对象的可测量特性可以被替代。 有关详细信息,请参考模型对话框。

4.1.4 可检测对象

  可检测对象是可由接近传感器检测到的对象。 它们包括:

  • 虚拟对象
  • 形状
  • OC树
  • 点云

  由于以点为基础,射线类型或随机化类型的接近传感器不能检测到虚拟对象和点云。

  所有接近传感器都可以检测到可检测的对象,或者只能通过特定类型的接近传感器,或者说列出的一个子类别的接近传感器可以检测到可检测的对象:

  • 超声波接近传感器
  • 红外接近传感器
  • 激光接近传感器
  • 感应式接近传感器
  • 电容式接近传感器

  集合也是可检测的,因为它们可能包含可检测的对象。

  可检测对象可以单独启用或禁用其可检测属性,这适用于所有类型的接近传感器(默认情况下为非纯形状启用)。 这可以在对象通用属性中设置,也可以通过sim.setObjectSpecialProperty API函数设置。

  此外,根据可检测对象的相关模型属性(如果它们是模型的一部分),可以覆盖它们的可检测属性。 有关详细信息,请参考模型对话框。

4.1.5 可渲染对象

  可渲染对象是视觉传感器可以看到或检测到的对象。 它们包括:

  • 形状
  • 路径(但是必须启用路径整形功能)
  • 图形(仅渲染非静态3D曲线)。
  • OC树
  • 点云

  集合也是可渲染的,因为它们可能包含可渲染对象。

  您可以使可渲染对象仅由特定视觉传感器看到。 可渲染对象还可以单独启用或禁用其可渲染属性(默认情况下启用,纯形状除外)。 这可以在对象通用属性中设置,也可以通过sim.setObjectSpecialProperty API函数设置。

  此外,根据可渲染对象的相关模型属性(如果它们是模型的一部分),可以覆盖可渲染对象的可渲染属性。 有关详细信息,请参考模型对话框。

4.1.6 可视对象

  可查看对象是可以透视、查看或可以显示某些图像内容的对象。 它们包括:

  • 摄象机
  • 视觉传感器

  可查看对象可以与将显示其图像内容的视图相关联。

4.1.7 凸壳

  CoppeliaSim允许计算和添加指定对象的凸壳。 网格集合的凸壳是包含所有网格的最小凸壳。 CoppeliaSim只允许提取可测量对象的凸壳。 计算出的凸面外壳可能不是“水密的”(即可能包含重叠的三角形或非共享边),因此该形状不会被标记为凸面。 但是,您可以对生成的形状运行凸分解函数。

  要添加凸面外壳,请选择要包含在凸面外壳中的对象,然后选择[菜单栏–>添加–>凸面外壳选择]([Menu bar–>Add–>Convex Hull of Selection])。

  根据情况的不同,凸壳可以大大减少计算时间,例如,在距离计算或接近传感器模拟的情况下。 如果改为使用复杂形状的更粗糙近似(即凸壳),也可以更快地执行碰撞检测。 还可以提取模型(例如机器人)的凸壳,然后使其不可见,但执行所有计算(碰撞检测、距离计算等)。 用不可见的凸包代替复杂的模型。

在这里插入图片描述

4.1.8 对象选择对话框

  对象选择对话框是根据对象类型选择对象的便捷方法,无需浏览场景层次。 在形状编辑模式或路径编辑模式下,该对话框还可用于反转项目选择。 可通过[菜单栏–>工具–>选择]或点击以下工具栏按钮进入:

在这里插入图片描述

  • 简单形状:选择场景中的所有简单形状。
  • 复合形状:选择场景中的所有复合形状。
  • 虚拟对象:选择场景中的所有虚拟对象。
  • 摄影机:选择场景中的所有摄影机。
  • 灯光:选择场景中的所有灯光。
  • 接近传感器:选择场景中的所有接近传感器。
  • 视觉传感器:选择场景中的所有视觉传感器。
  • 力传感器:选择场景中的所有力传感器。
  • 关节:选择场景中的所有关节。
  • 图形:选择场景中的所有图形。
  • 路径:选择场景中的所有路径。
  • OC树:选择场景中的所有OC树。
  • 点云:选择场景中的所有点云。
  • 清除选择:清除当前选择(对象或项目)。
  • 反转选择:反转当前选择(取消选择选定的对象或项目,选择未选定的对象或项目)。

4.1.9 图层选择对话框

  图层选择对话框是显示或隐藏场景特定部分的便捷方式。 可以将每个场景对象指定给16个可用可见性图层中的任何一个(请参阅对象通用属性)。 使用此对话框可以单独激活/取消激活每个层。 如果某些对象应该是不可见的,请尝试将它们隐藏在未激活的图层中(例如,当前图层+8)。 保存场景时,始终尝试保持默认激活状态(前8层全部启用,后8层禁用)。 其原因是,如果将模型从场景复制并粘贴到另一个场景中,则某些本应不可见的对象可能会突然变得可见。 在模拟期间,该对话框提供了仅显示场景的动态内容(仅可视化动态内容)的可能性,这通常有助于调试目的。

  图层选择对话框可通过[Menu Bar–>Tools–>Layers]或点击以下工具栏按钮访问:

在这里插入图片描述

4.1.10 摄像机

  相机是可查看的对象,这意味着您可以通过它们查看并显示它们正在查看的内容的视图。 您可以在场景中根据需要拥有任意多个摄影机,每个摄影机都提供不同的场景视图。 下面显示了一个包含多个摄影机的场景示例:

在这里插入图片描述

  一定不要把相机和视觉传感器弄混了。 以下是主要区别:

  • 相机没有特定的分辨率(即它会自动调整到视图大小)。 视觉传感器具有固定的分辨率。
  • 相机的图像内容不能通过接口直接获取(只能通过回调机制),不能直接支持图像处理。 视觉传感器的图像内容可以通过API访问,并通过视觉回调函数进行处理。
  • 相机通常需要较少的CPU时间,并且操作速度比视觉传感器更快。
  • 相机可以显示所有对象类型。 视觉传感器只能显示可渲染对象。

  可以通过[菜单栏–>添加–>摄像机]将摄像机添加到场景中。 但是,以这种方式添加相机会将对象添加到默认位置和方向。 更好的做法是在场景的特定视图上单击鼠标右键并选择[弹出菜单–>添加–>摄像机]来添加摄像机。 这会将对象添加到当前视图的正前方。 系统会自动选择添加的摄像机,然后您可以通过[弹出菜单–>视图–>将视图与所选摄像机关联]进行查看。 要使其正常工作,您必须确保在视图上激活了弹出菜单。 当视图创建完成但尚未关联可见对象时,[弹出式菜单–>添加–>摄像机]命令会添加一个摄像机,并将其与视图直接关联(即浏览)。 相机可以与任意数量的视图相关联。

  或者,您也可以通过在视图中激活以下弹出窗口将视图与摄像机关联:[弹出菜单–>视图–>视图选择器…]。 这将允许您从预览窗口中选择所需的相机视图。 当相机与视图相关联时,可以使用鼠标通过以下工具栏按钮对其进行操作:

在这里插入图片描述

  • 平移按钮:允许在垂直平面上将相机移动到视图方向。 场景中的单击点将以与鼠标移动相同的速率移动。 如果未单击特定点(即单击背景时),将对相机附近的不可见点执行Shift操作。
  • 旋转按钮:允许围绕场景中的单击点旋转相机。 如果未单击特定点(即单击背景时),将围绕相机附近的不可见点执行旋转操作。
  • Shift按钮:允许沿视图方向移动相机。 这会对透视投影模式下的摄影机视图产生缩放效果,但正交投影模式下的摄影机视图可能看不到任何效果(但是摄影机将沿其视图方向移动)。
  • 相机角度按钮:允许调整相机视图的透视投影角度(当处于透视投影模式时),或允许调整相机视图的视图大小(当处于正交投影模式时)。
  • 适应视图按钮:调整具有焦点的视图的相机,以便精确地框住所有选定的对象,如果未选择对象,则调整整个场景的边框。
  • 飞行按钮:允许在场景中“飞行”。 鼠标x和y运动转换为偏航和俯仰运动。 分别使用Shift-键和Ctrl-键实现加速和减速。 当同时按住Shift和Ctrl键时,鼠标x和y移动会沿相机的x和y轴执行平移。 除此之外,光标键允许将相机定向到与飞行方向不同的方向(在飞行期间)。

  虽然鼠标左键允许上述操作,但鼠标滚轮允许沿视图方向移动相机(如果相机视图处于透视投影模式)或允许调整相机视图的视图大小(如果相机视图处于正交投影模式)。 当在没有鼠标移动的情况下点击右键时,将激活弹出菜单,但是,如果在移动鼠标的同时保持按住右键,则可以实现围绕所点击的点的相机旋转。

  激活相机Shift按钮后,可以非常轻松地在场景中导航到任何所需的位置和方向,方法是:(1)使用鼠标左键垂直于视图方向移动,(2)使用鼠标滚轮沿视图方向移动,以及(3)使用鼠标右键绕单击点旋转:(1)鼠标左键用于垂直于查看方向移动,(2)用于沿查看方向移动的鼠标滚轮,以及(3)用于围绕单击点旋转的鼠标右键:

在这里插入图片描述

  通过选择要跟踪的对象,然后在适当的视图中选择[弹出式菜单–>视图–>跟踪选定的对象],摄像机可以自动跟踪对象(即,在对象移动时跟踪对象)。 跟踪相机将保持其位置不变,但会自动调整其观察方向,以便始终将要跟踪的对象保持在其视场中。 这不同于通过父子关系将摄影机附加到该对象。

4.1.10.1 摄像机特征

  摄像机属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击摄影机按钮以显示摄影机对话框(仅当最后选择的是摄影机时才会显示摄影机按钮)。 该对话框显示上次选择的摄像机的设置和参数。 如果选择了多个摄像机,则可以将一些参数从上次选择的摄像机复制到其他选定的摄像机(应用于选择-按钮):

在这里插入图片描述

  • 透视角度:相机的透视投影角度(或打开角度)。 仅当关联视图处于透视投影模式时,才能看到此参数的效果。
  • 正交大小:摄影机的正交投影大小(或视图大小)。 仅当关联视图处于正交投影模式时,才能看到此参数的效果。
  • 近/远剪裁平面:距相机开始/停止观看的相机原点的距离。 如果不应显示近/远对象,请增大/减小此值。 这些参数与渲染精度直接相关,特别是当关联视图处于透视投影模式时,则应始终注意,远剪裁平面和近剪裁平面之间的间隙不要太大,否则可能会出现一些称为z格斗的视觉瑕疵(当较远的曲面或像素看起来与较靠近摄影机的曲面/像素重叠时)。
  • 渲染模式:相机的渲染模式。
  • 跟踪对象:相机要跟踪的对象。 跟踪对象不会影响相机的位置,只有它的方向会自动调整,以便跟踪跟踪的对象。
  • 启用时显示雾:如果禁用,则启用雾时此相机将看不到任何雾。另请参阅“环境”对话框。
  • 保持头部始终向上:如果启用,相机将始终尝试保持头部向上,即将相机的y轴保持在垂直平面上。
  • 使用本地灯光:如果启用,则在显示此摄影机的图像内容时,将仅激活与此摄影机为父对象的本地灯光(即,构建在此摄影机之上)。 可以在光源属性中将光源设置为本地光源。
  • 允许拾取:允许您启用/禁用对象拾取(即单击以选择对象)。
  • 将父对象用作摄影机操纵代理:如果启用,则摄影机操纵工具栏按钮不会直接影响摄影机的位置,而是会影响摄影机的父对象。 如果希望多个摄影机彼此链接(例如,CoppeliaSim中的默认场景具有3个彼此正交排列的摄影机,则此选项非常有用。 如果其中一个被移动,其他两个将跟随)。
  • 沿自身的X-/Y-/Z轴:允许指定允许哪些相机平移移动。
  • 全旋转:如果选中此选项,则摄影机的角度移动不受限制。
  • 倾斜:如果选择此选项,则可以使用相应的工具栏按钮来倾斜相机。
  • 对象大小:相机的大小。 此参数仅具有视觉效果,没有功能意义。
  • 调整颜色A/B:允许调整相机的外壳颜色。

4.1.11 灯光

  灯光是允许您照亮场景的对象。 在场景中没有任何灯光的情况下,对象以未明暗处理的颜色显示(在这种情况下,对象仅使用可以在环境对话框中设置的环境光组件照明)。 下图说明了场景中灯光的效果:

在这里插入图片描述

  一个场景中最多可以有八个活动灯光。 有三种不同类型的灯光:

  • 全向灯光:全向灯光将从点光源照亮场景。
  • 聚光灯:聚光灯仅在一个特定方向上照亮场景。 可以调整聚光灯的光锥。
  • 平行光:平行光的位置并不重要。 只有方向才重要,场景中的所有对象都将以类似的方式照明。

在这里插入图片描述

  可以使用[菜单栏–>添加–>灯光]将灯光添加到场景中。

4.1.11.1 灯光特征

  灯光属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击灯光按钮以显示灯光对话框(仅当最后选择的是灯光时才会显示灯光按钮)。 该对话框显示上次选择的灯光的设置和参数。 如果选择了多个灯光,则可以将一些参数从上一个选定灯光复制到其他选定灯光(应用于选择按钮):

在这里插入图片描述

  • 启用灯光:启用或禁用灯光。 一个场景中最多可以同时存在8个启用的灯光。
  • 灯光为本地灯光:选择此项时,灯光将充当本地灯光,并且仅当通过使用本地灯光的相机或视觉传感器看到时才运行(即,需要启用相机或视觉传感器的使用本地灯光项目)。 除此之外,灯光需要建立在相机或视觉传感器(直接或间接的孩子身上的灯光)之上。
  • 聚光灯截止:在灯光是聚光灯的情况下,该值指定灯光的截止角度。 小角度会导致聚光灯变窄。
  • 聚光灯指数:如果灯光是聚光灯,则该值指定灯光的强度分布。 0表示宽聚光灯,128表示窄聚光灯。
  • 恒定衰减系数:表示灯光恒定衰减系数的参数。
  • 线性衰减系数:表示灯光的线性衰减系数的参数。
  • 平方衰减因子:指示灯光的平方衰减因子的参数。
  • 对象大小:灯光的大小。 此参数仅具有视觉效果,没有功能意义。
  • 调整灯光/外壳颜色:允许调整灯光颜色或外壳颜色。

4.1.12 形状

在这里插入图片描述

  形状是由三角面组成的刚性网格对象。 它们可以导入、导出和编辑。 它们有四种不同的子类型:

  • 简单随机形状:可以表示任何网格。 它有一种颜色和一组视觉属性。 不优化也不建议用于动力学碰撞响应计算(因为非常慢且不稳定)。
  • 复合随机形状:可表示任意网格。 它有几种颜色和几组视觉属性。 不优化也不建议用于动力学碰撞响应计算(因为非常慢且不稳定)。
  • 简单凸面形状:表示具有一种颜色和一组视觉属性的凸面网格。 针对动力学碰撞响应计算进行了优化(但建议使用纯图形)。
  • 复合凸面形状:表示一组具有多种颜色和视觉属性集的凸面网格。 针对动力学碰撞响应计算进行了优化(但建议使用纯复合图形)。
  • 纯简单形状:表示基本体形状(长方体、圆柱体或球体(根据使用的物理引擎有其他变化))。 纯简单形状(或纯复合形状)最适合动力学碰撞响应计算,因为它执行起来非常快且稳定。 有关详细信息,请参见动力学模块部分。
  • 纯复合形状:表示一组基本形状(长方体、圆柱体或球体)。 纯复合形状(或纯简单形状)最适合动力学碰撞响应计算,因为它执行起来非常快且稳定。 有关详细信息,请参见动力学模块部分。
  • 高度场形状:可以将地形表示为规则栅格,其中只改变高度。 也可以将高度场视为纯粹简单的形状,并针对动力学碰撞响应计算进行了优化。

  默认情况下,所有导入的形状都是简单形状。 但是,可以对两个或多个简单形状或复合形状进行分组([菜单栏–>编辑–>分组/合并–>分组/合并–>分组选定的形状])或取消分组([菜单栏–>编辑–>分组/合并–>取消分组选定的形状])。 也可以合并简单的形状([菜单栏–>编辑–>分组/合并–>合并选定的形状],在这种情况下,所有组成元素的可视属性都相同。 形状也可以划分([菜单栏–>编辑–>分组/合并–>分割选定的形状]),具体取决于其配置:划分算法将提取形状的每个不同元素。 如果两个元素没有任何共同点,那么它们就是截然不同的。 另请参阅模型教程。 它说明了如何正确导入和准备仿真模型的形状。

  纯形状主要是功能性形状。 大多数情况下,它们仅由物理引擎使用,物理引擎在它们上的性能比在非纯图形(例如随机或凸面网格)上的性能要好得多,速度也快得多。 因此,纯形状通常隐藏在不可见的层中(例如,层9)。 有关详细信息,请参阅层选择对话框和有关如何设计动态模拟的部分。

在这里插入图片描述

  纯简单形状也可以分组,但是,只有当其所有组成元素也都是纯的时,得到的复合形状才是纯的。 合并纯简单形状将产生非纯简单形状。

形状是可碰撞、可测量、可检测和可渲染的对象。 这意味着形状:

  • 可用于针对其他可碰撞对象的碰撞检测。
  • 可用于与其他可测量对象的最小距离计算。
  • 可以被接近传感器检测到。
  • 可以被视觉传感器检测到。

  可以在对象通用属性中改变形状的可碰撞、可测量、可检测和可渲染属性。 此外,如果形状是替代这些特性的模型的一部分,则可以替代这些特性。 有关详细信息,请参考模型对话框。

  可在CoppeliaSim中使用的形状计算(即碰撞、距离和接近传感器计算)也可通过Coppelia几何例程作为独立例程使用。

4.1.12.1 形状参考框架和边界框

  形状和每个对象一样,都有一个参考框和一个边界框。 参考框架或坐标框架始终位于形状的几何中心,并指示计算形状位置和方向的点。 坐标框架有三个轴:x轴、y轴和z轴,分别对应于红色、绿色和蓝色箭头。 形状的边界框围绕形状的参考框架居中,方向与参考框架相同(x轴、y轴和z轴与边界框的边缘具有相同的方向)。 边界框完全包围形状。 用户可以从4种不同的方式中选择来定义形状的参考框和边界框方向(纯简单形状和Heightfield形状不能重定向):

  • 与世界参考框架对齐:[菜单栏–>编辑–>重定向边界框–>与世界参考框架]。 单击此项目时(必须事先选择一个形状),将计算坐标框架,以便生成一个边框,其边缘与世界参考框架轴(即绝对坐标框架)对齐。
  • 与任意形状的主轴对齐:[菜单栏–>编辑–>重定向边界框–>与任意形状的主轴]。 单击此项目时(必须事先选择一个形状),将计算参考框,以便在随机形状周围产生最紧凑的边界框。 这是默认的计算方法。
  • 与圆柱体形状主轴对齐:[菜单栏–>编辑–>重定向边界框–>与圆柱体形状主轴]。 单击此项时(必须事先选择图形),将在圆柱体图形上计算精确的参考系,其Z轴与圆柱体的旋转轴重合。 这比上面的项目更精确(与任意形状的主轴对齐),但需要精确定义的圆柱体形状。 如果形状看起来离规则而精确的圆柱体太远,操作可能会失败。
  • 与长方体形状主轴对齐:[菜单栏–>编辑–>重定向边界框–>与长方体形状主轴]。 当单击此项目时(必须事先选择一个形状),将在长方体形状上计算精确的参考框,并与立方体的面对齐。 这比上面的项目更精确(与任意形状的主轴对齐),但需要精确定义的长方体形状。 如果形状看起来离规则而精确的长方体太远,操作可能会失败。

  也可以在几何体对话框中或通过API修改边界框相对于其形状的方向。

在这里插入图片描述

4.1.12.2 原始形状

  除了从外部文件导入形状之外,还可以通过选择[Menu bar–>Add–>Primitive Shape]在CoppeliaSim内直接创建形状。 支持以下5个基本体形状:

在这里插入图片描述

  可以在基本体形状对话框中调整基本体形状的几何参数:

在这里插入图片描述

  • X-/Y-/Z-大小:沿世界参考系的X-/Y-/Z轴的大小。
  • X-/Y-/Z-细分:沿世界参考系的x-/y-/z轴的元素数(*)。
  • 边:圆柱体、圆盘或球体的边数。
  • 面:圆柱体(*)或球体的面数。
  • 圆盘细分:圆盘细分数(圆盘或圆柱体)(*)。
  • 平滑着色:形状应该显示为平滑(Gouraud着色)还是锐化。
  • 开口端:圆柱体是否有开口端。
  • 圆锥体:表示需要圆锥体而不是圆柱体。
  • 创建动态且可响应的形状:如果选中此选项,则生成的形状将是动态且可响应的。 它将是不可碰撞的、不可测量的、不可渲染的和不可检测的,并且具有轻微的蓝色,以便快速识别它。
  • 创建纯图形:如果选中此选项,将生成在动态计算过程中执行得更好、更快的纯图形。
  • 材质密度:材质的密度。
  • 图形具有负体积:如果选中此选项,则创建的纯图形将在内部有一个孔(即负体积),该孔具有按内部比例因子缩放的图形尺寸。 这是创建可高效动态模拟的管状结构的有用功能。 目前,只有Vortex Studio引擎支持此功能。

  (*)细分和面属性不能直接显示且没有直接效果。 下面显示了两个具有不同细分参数的相似形状:

在这里插入图片描述

  细分数较高的形状以更具差异性的方式反射照明。 有关详细信息,请参见三角形编辑模式和细分最大三角形选项。

  应在形状属性中调整颜色和其他视觉属性。 也可以在形状编辑模式或几何图形对话框中调整和编辑形状网格。

4.1.12.3 导入和导出

导入形状

  CoppeliaSim使用三角形网格来描述和显示形状。 因此,CoppeliaSim将仅导入将对象描述为三角形网格的格式。 但是,如果您希望导入描述为参数曲面的对象(例如IGES等),则必须首先将文件转换为适当的三角网格格式。 有几个转换应用程序允许此操作,并且大多数3D绘图应用程序也非常好地支持此操作。 请确保您更深入地阅读这些部分,以便能够获得适用于您的3D图形的最佳三角网格描述。

  CoppeliaSim支持以下用于形状导入的文件格式([Menu Bar–>File–>Import–>Mesh…]):

  • OBJ:Wavefront Technologies文件格式。 这是目前唯一允许在CoppeliaSim中导入纹理网格的格式。
  • DXF:AutoCAD文件格式(Autodesk)。 文件中可能包含的非3D信息将被忽略。
  • STL(ASCII或二进制):3D系统文件格式。 支持ASCII和二进制文件。
  • COLLADA:有关详细信息,请参阅COLLADA插件。
  • URDF:详细信息请参考URDF插件。

  导入功能由CoppeliaSim的Assimp插件处理。 有关其API函数,请参阅此处。 如果使用所需的标志重新编译Assimp库(和Assimp插件),则可以支持更多格式。

  如果在导入操作之后,您在场景中看不到任何形状,但场景层次指示存在新添加的形状,则很可能是您的形状太大或太小而看不见。 然后,您可以继续在对象通用属性中执行缩放操作。 此外,当从CAD应用程序导出网格时,请尝试将它们作为一个整体导出(最好是将它们作为单个对象导出,稍后在CoppeliaSim中,您可以使用[Menu Bar–>Edit–>Grouping/Merging–>Divide Selected Shares]分割导入的形状);这是为了避免CAD应用程序在导出操作期间根据各个网格的参考帧重新定位/重定向各个网格(CoppeliaSim的参考帧不同!),这可能会导致外观损坏。

  确保导入的网格不包含太多三角形(对于机器人,通常总共包含10000-20000个三角形),否则CoppeliaSim可能会显著减慢(渲染、计算、加载/保存操作等)。 有些应用程序允许减少网格中的多边形数(例如,MeshLab或多边形crunsher)。 您还可以使用以下CoppeliaSim函数:

  • [菜单栏–>编辑–>将选定的形状变形为凸形]:允许将选中的形状转换为凸形。
  • [菜单栏–>编辑–>将选择变形到其凸分解…]:允许将所选形状转换为其凸分解表示。
  • [菜单栏–>编辑–>抽取所选形状…]:允许减少所选形状中的三角形数量。
  • [菜单栏–>编辑–>提取所选形状的内部…]:允许从同一形状的外部(即,可见部分)提取/分离形状的内部(即不可见部分)。 此功能基于视觉传感器,可能不会始终提供令人满意的结果。

  从将形状作为参数曲面处理的应用程序(例如IGES等)中导出形状时,当绘图由大对象和小对象组成时,分几个步骤导出对象可能很重要;这是为了避免大对象定义得太精确(三角形太多)和小对象定义太粗糙(三角形太小);只需先导出大对象(通过调整所需的精度设置),然后导出小对象(通过向上调整精度设置)。

  还要确保遵循有关如何构建干净的仿真模型的教程。

导出形状

  CoppeliaSim支持以下文件格式进行形状导出[菜单栏–>文件–>导出–>所选形状…] (注意:将仅导出选定的对象):

  • OBJ:WaveFront Technologies文件格式。
  • STL(二进制):3D系统文件格式。 导出仅支持二进制格式。 这是CoppeliaSim中最紧凑的导出选项。
  • COLLADA:有关详细信息,请参阅COLLADA插件。

  导出功能也由CoppeliaSim的Assimp插件处理。 有关其API函数,请参阅此处。

导入高度场

  CoppeliaSim支持以下文件格式用于高度域形状导入([Menu Bar–>File–>Import–>Heightfield…]):

  • 图像文件:图像文件(JPEG、PNG、TGA、BMP、TIFF或GIF文件),其中各种高度值取自红色、绿色和蓝色分量:Height = (red + green + blue)/3。
  • CSV或TXT:逗号分隔值文件格式。 该文件应该包含y行,其中每行都有用逗号分隔的x个值。

  选择要导入的文件后,将打开一个对话框:

在这里插入图片描述

  • X-SIZE/Y-SIZE:指定高度域的X和Y尺寸。 单个重域heightfield单元格始终为正方形。
  • Z缩放:指定要应用于高度值的缩放。

4.1.12.4 凸分解

  CoppeliaSim允许计算和添加指定形状的凸分解。在动态碰撞响应计算方面,凸形比随机形状执行得更快、更稳定。 然而,它们不像纯形状那样快,也不像纯形状那样稳定!

在这里插入图片描述

  可以添加选定形状的凸分解,也可以将选定形状变形为其等效的凸分解:

  • 添加凸分解 :[菜单栏–>添加–>选择的凸分解…]。
  • 变形为凸分解 :[菜单栏–>编辑–>将所选内容变形到其凸分解…]。

  将弹出以下对话框,并允许调整形状的分解方式:

在这里插入图片描述

  以下参数适用于每个单独的形状:

  • 单独处理复合图形组件:如果选中此选项,则复合图形的每个单独网格将在分解过程中单独处理,否则复合图形将被视为单个网格。
  • 最大迭代次数:凸面分解算法以近似方式运行,这意味着创建的形状可能或多或少是凸面的。 CoppeliaSim使用其自己的凸度度量,仅当形状的所有顶点都位于由所有三角面定义的一半体积内时,该形状才被视为凸形,且公差为形状平均边界框边长的1.5%。 最大 迭代次数参数允许在创建的网格上迭代多次,如果它们看起来不够凸,不足以复制到CoppeliaSim。
  • HACD凸分解:启用HACD算法。
    • 添加附加点:指定计算凹度时是否应添加附加点。
    • 添加额外面点:指定计算凹度时是否应添加面点。
    • 最小簇数:指定要生成的最小簇数。
    • 最大凹度:指定允许的最大凹度。
    • 最大连接距离:指定连接凸形簇所允许的最大距离。
    • 抽取网格三角形的目标:指定抽取网格的目标三角形数。
    • 最大顶点数/凸包数:指定每个生成的凸包的最大顶点数。
    • 小簇检测阈值(%):指定检测小簇的阈值。 阈值表示为整个网格曲面的百分比。
  • V-HACD凸分解:启用V-HACD算法。
    • 启用PCA:在应用凸面分解之前启用/禁用规格化网格。
    • 基于体素:如果启用,则使用基于体素的近似凸面分解,否则使用基于四面体的近似凸面分解。
    • 分辨率:体素化阶段生成的最大体素数。
    • 凹度:最大凹度。
    • 平面向下采样:控制搜索最佳剪裁平面的粒度。
    • 凸面下采样:在剪裁平面选择阶段控制凸面生成过程的精度。
    • Alpha:控制沿对称平面剪裁的偏移。
    • Beta:控制沿旋转轴剪裁的偏移。
    • 最大顶点数/凸面外壳:控制每个凸面外壳的最大三角形数量。
    • 最小体积/凸面外壳:控制生成的凸面外壳的自适应采样。

4.1.12.5 形状特征

  形状属性是场景对象属性对话框的一部分,该对话框位于[菜单栏->工具->场景对象属性]。 可以通过双击场景层次结构中的对象图标或单击其工具栏按钮来打开对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击图形按钮以显示图形对话框(仅当最后选择的是图形时,才会显示图形按钮)。 该对话框显示上次选定图形的设置和参数。 如果选择了多个形状,则可以将一些参数从上次选择的形状复制到其他选择的形状(应用于选择-按钮):

在这里插入图片描述

  • 调整颜色:允许编辑形状的颜色。
  • 着色角度:着色角度是区分各个面的角度。 这只会影响形状的视觉外观。 小角度使形状看起来锋利,大角度使形状看起来平滑,边缘较少。
  • 显示边:以黑色显示边。 显示的边将取决于指定的角度。 如果选中隐藏边界,则不共享多个三角形的边将被隐藏。
  • 背面剔除:组成一个形状的每个三角形都有一个内面和一个外面。 启用背面消隐后,将不会显示内部面。 对于闭合形状和透明形状,这是一个有用的参数。
  • 反转面:这将翻转所有三角形。 内面变成外面,反之亦然。 除纯形状外,凸形将变为非凸形。
  • 线框:如果选中此选项,则通过摄影机查看时,图形将始终显示为线框。
  • 调整纹理:打开选定形状的纹理对话框。 当形状与纹理相关联时,它将以带纹理的方式显示。
  • 快速纹理(选择):将立方体贴图纹理应用于所有选定形状。 这对于用作“污垢”的无缝纹理特别有用,以便使对象看起来更逼真。
  • 清除纹理(选择):从所有选定形状中删除纹理。
  • 查看/修改几何图形:打开选定形状的形状几何图形对话框。 它允许调整网格的各种参数。
  • 显示动态属性对话框:切换图形动态属性对话框。 图形动力学对话框允许调整图形的动力学属性。

  上面的某些参数仅适用于简单形状。 选择复合形状后,可以通过切换到复合形状的形状编辑模式来编辑其视觉属性。 当然,您也可以将其取消分组,以便单独编辑其组件。

4.1.12.5.1 形状动态特征

  形状动力学对话框是形状属性的一部分。 该对话框显示上一个选定图形的动力学设置和参数。 如果未选择任何对象,则该对话框处于非活动状态。 如果选择了多个形状,则可以将一些参数从上次选择的形状复制到其他选择的形状(应用于选择-按钮):

在这里插入图片描述

  • 物体是可响应的:如果启用,则该形状将与其他可响应形状产生碰撞反应,但仅当各自的可响应遮罩重叠时才会产生碰撞反应(请参见下面的项目)。 有关详细信息,请参见设计运动仿真部分。

  • 可响应掩码:指示何时生成冲突响应(但在可响应项目上方需要启用)。 掩码由本地和全局两个8位值组成。 如果两个碰撞形状共享其任何父图形(直接或间接),则使用局部遮罩,否则使用全局遮罩。 如果两个形状的AND组合遮罩(局部或全局)不同于零,则将生成冲突响应。

  • 编辑材料:允许编辑所有动力学引擎的材料属性,如摩擦、恢复等。

  • 物体是动态的:启用后,图形的位置和方向将在动力学模拟中受到影响。 有关详细信息,请参见设计运动仿真部分。

  • 在休眠模式下启动:动态模拟的可响应形状可以在休眠模式下启动,在这种情况下,除非它首先与另一个可响应形状碰撞,否则它不会对约束(例如重力)做出反应。

  • 如果获取父对象,则设置为动态:如果启用此选项,并且该形状附加到另一个对象,则该形状将自动设置为动态形状。 这对于模型基座非常有用,这些模型基座在单独运行时应该是静态的,但在与其他模型/对象组合时是动态的(例如,单独操作的机器人机械手通常将其基座设置为静态,但当连接到车辆时,该基座应变为动态)。

  • 计算选定形状的质量和惯性属性:通过单击此按钮,可以基于材料均匀密度自动计算选定凸形的质量和惯性属性。

  • 质量:形状的质量。 使用M=M*2(用于选择)和M=M/2(用于选择)按钮,选定形状的质量可以轻松增加或减少系数2。这便于通过试错法快速找到稳定的仿真参数。

  • 主惯性矩/质量:无质量(即除以形状的质量)的主惯性矩。 使用i=i*2(用于选择)和i=i/2(用于选择)按钮,选定形状的无质量惯性值可以轻松增加或减少系数2。 这便于通过试错法快速找到稳定的仿真参数。

  • 位置/方向。 相对于形状坐标系的惯性坐标系&COM:相对于形状参照系表示的惯性坐标系和质心的配置。

  • 相对于绝对坐标系设置惯性矩阵(&COM):打开惯性矩阵对话框,允许指定相对于绝对参考系的惯性属性:

  • 在这里插入图片描述

    • 惯性矩阵除以质量:惯性矩阵或张量。 值是无质量的(即除以形状的质量)。 矩阵必须相对于形状的质心来表示(即矩阵是对称的)。
    • 质心位置:质心位置。
    • 应用于选定的形状:如果选中此选项,则所有选定的形状相对于绝对参考系将具有相同的惯性属性(即所有质心和惯性矩阵将重合)。
4.1.12.5.1.1 材料属性

  材料属性(即与形状相关的动力学引擎属性)可以通过形状动态属性对话框访问。 上一个选定造型的材质属性将显示在一个对话框中:

在这里插入图片描述

  • 应用预定义设置:允许您为特定行为(例如无摩擦)选择一组预定义设置。

Bullet属性

与Bullet物理库相关的属性。 有关详细信息,请参考Bullet用户手册。

  • 摩擦力(仅限Bullet V2.78):仅与 Bullet V2.78一起使用的摩擦力值。 两个碰撞对象的组合摩擦力值为value1*value2。 这与实际摩擦系数不符。
  • 摩擦力(Bullet V2.78之后):仅在 Bullet 版本V2.78之后使用的摩擦值。 两个碰撞对象的组合摩擦力值为value1*value2。 这与实际摩擦系数不符。
  • 恢复原状:恢复原值。 较高的值往往会使碰撞看起来有弹性。 这与实际恢复系数不对应。
  • 线性阻尼:线性运动阻尼值,可增加线性阻力,并可增加稳定性。
  • 角阻尼:角运动阻尼值,它增加了角阻力,可以增加稳定性。
  • 粘性接触(仅限Bullet V2.78):选中此项时,接触点将非常坚固,但可能会导致不稳定。 建议将其保持禁用状态。 V2.78之后的项目符号版本不需要此功能。
  • 自动收缩凸面网格:勾选此项后,凸面网格将在内部收缩,以补偿碰撞裕度因子。 建议将其保持禁用状态。
  • 自定义碰撞边界因子:当自定义碰撞边界设置为true时,此因子将覆盖默认的碰撞边界因子。 碰撞边界有助于提高稳定性。 建议保留默认的碰撞边界系数。

ODE属性

与ODE相关的属性。 有关详细信息,请参考ODE用户手册。

  • 摩擦力:摩擦值。 两个碰撞对象的组合摩擦力值为value1*value2。 这与实际摩擦系数不符。
  • 最大接触数:要生成的最大接触点数。 两个碰撞对象的组合最大接触值为(value1+value2)/2。
  • 软ERP:接触法线的误差减小参数,这对于使曲面柔化很有用。 两个碰撞对象的组合软ERP值将为(value1+value2)/2。
  • 软CFM:接触法线的约束力混合参数,这对于使曲面变软很有用。 两个碰撞对象的组合软CFM值将为(value1+value2)/2。
  • 线性阻尼:线性运动阻尼值,可增加线性阻力,并可增加稳定性。
  • 角阻尼:角运动阻尼值,它增加了角阻力,可以增加稳定性。

Vortex属性

与Vortex Studio引擎相关的属性。 请参考Vortex用户手册了解详细信息。

  • 恢复:碰撞法向响应弹性从0(非弹性)到纯弹性的1。
  • 恢复阈值:速度阈值,低于该速度阈值恢复将被忽略。
  • 柔顺性:材料柔软度(1/刚度)。
  • 阻尼:正常响应阻尼,用于软接触(低刚度)。
  • 粘合力:在接触处产生胶水。
  • 线速度阻尼:人工线速度阻尼。
  • 角速度阻尼:人工角速度阻尼。
  • 自动角度阻尼启用:大张力下刚体的自我管理角度阻尼。 不建议用于控制盘或滚动对象。
  • 自动角阻尼张力比:自管理角阻尼算法的比例因子。
  • 皮肤厚度:使材料在皮肤厚度范围内更柔软(使握力更稳定)。
  • 启用自动滑移:自动管理触点粘度。
  • 快速移动:在碰撞检测期间启用附加检查,以防止深度渗透或隧道效应。
  • 将纯图形视为VxConvexMesh:将纯图形处理为凸形。
  • 将凸形视为VxTriangleMeshBVTree:将凸形作为OBB树数据库处理(通常比凸形更准确和稳定)。
  • 将随机形状视为VxTriangleMeshUVGrid:将随机形状作为2D栅格数据库处理(对于大型地形数据库更高效)。 2 VxTriangleMeshUVGrid永远不会相互碰撞。
  • 自动休眠:允许禁用静止对象以节省模拟时间的功能。 当所有速度、加速度都在相应的阈值内时,部件被视为休眠:
    • 阈值线速度:线速度阈值。
    • 阈值线性加速度:线性加速度阈值。
    • 阈值角速度:角速度阈值。
    • 阈值角加速度:角加速度阈值。
    • 阈值步数:部件在再次进入睡眠之前必须唤醒的最少步数。
  • 线性主轴:摩擦面中的轴。
    • 轴方向:指示主轴方向的矢量(该矢量将投影到摩擦面)。 该矢量相对于形状参考帧。
    • 摩擦模型:沿该轴的摩擦模型。
    • 摩擦系数:摩擦系数(用于缩放框和缩放框快速模型)。
    • 静摩擦比例尺:静摩擦/动摩擦比。
    • 滑移:摩擦粘度。
    • 滑动:摩擦所需的沿此轴的相对速度。
  • 线性次轴:定义摩擦面的第二轴。
  • 角度主轴:允许围绕主轴添加角摩擦(滚动阻力)。
  • 角度次轴:允许围绕次轴添加角摩擦(滚动阻力)。
  • 角法向轴:允许围绕法线轴添加角摩擦(旋转阻力)。

Newton属性

与牛顿动力学引擎相关的属性。 有关详细信息,请参考牛顿用户手册。

  • 静摩擦:静摩擦系数。 两个碰撞对象的组合摩擦力值为value1*value2。
  • 动摩擦力:动摩擦系数。 两个碰撞对象的组合摩擦力值为value1*value2。
  • 恢复原状:恢复原状系数。 较高的值往往会使碰撞看起来有弹性。 两个碰撞对象的组合恢复值为value1+value2。
  • 线性阻力:可以提高稳定性的线性阻力值。
  • 角度阻力:可以提高稳定性的角度阻力值。
  • 快速移动:在碰撞检测期间启用附加检查,以防止深度渗透或隧道效应。

Votex附加信息
  材质属性定义单个形状在与另一个形状碰撞时的行为方式。 碰撞涉及两个形状及其各自的材质属性。 接触材料将这两种材料特性组合成一组合并的特性,用于在仿真执行期间生成两个碰撞形状之间的接触力。 合并两种触头材料的规则如下:

  • 顺应性:采用最顺应性和相关的阻尼和恢复。
  • 附着力:取值较大者。
  • 蒙皮厚度:使用较大的值。
  • 摩擦模型:如果两个模型不同,优先顺序如下:无、boxProportional、scaledBox、scaledBoxFast、box、中性。 摩擦模型定义为:
    • 无:无摩擦。
    • 方框比例:不适用。
    • ScaledBox:摩擦边界=法向力*摩擦系数。
    • ScaledBoxFast:使用上一步中的接触匹配和接触力。 回退到scaledBox以获取新联系人。
    • 方框:不适用。
    • 中性:优先级最低,因此使用其他型号。 如果两者都是中性的,那么就没有摩擦。
    • 如果两个模型相同,则使用最小的摩擦系数。

  如果摩擦不是各向同性的,则可以在定义摩擦面(线性主轴和次轴)的两个方向上提供不同的摩擦特性。 轴方向是对象的局部框架中的向量。 它在摩擦面上的投影定义了线性主方向。 轴方向仅用于各向异性材质。 如果两种各向异性材料相互作用,则将使用其中一种材料,用户当前无法确定哪种材料的优先级。

4.1.12.5.2 形状几何对话框

  形状几何图形对话框是形状属性的一部分。 该对话框允许查看与形状关联的几何图形,并在一定程度上对其进行修改。 它显示顶点和三角形的数量,以及形状边界框的大小。 网格的顶点和三角形的数量与渲染和计算时间直接相关(例如,在碰撞检测或距离计算期间),网格的顶点/三角形越多,模拟或场景显示就越慢。 虽然对象通用属性允许缩放对象(包括形状),但它始终保持相同的比例(沿对象的x轴、y轴或z轴的缩放是相同的)。 此限制不适用于几何体对话框,您甚至可以通过指定负比例因子来沿网格的一个轴翻转网格。 但是,请记住,一些纯简单形状和纯复合形状对非均匀缩放有限制。 最重要的是,纯形状不能翻转。

  此外,使用形状几何图形对话框可以修改形状的边界框方向。 这应该只在非常特殊的情况下使用。 修改形状边框方向的首选方法是在选中形状时选择[菜单栏–>编辑–>边界框对齐–>将所选形状的坐标框与主轴对齐]或[菜单栏–>编辑–>边界框对齐–>与世界对齐所选形状的坐标框]。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9dr8mdX-1602468809257)(Selection_783.png)]

4.1.12.6 形状编辑模式

  当CoppeliaSim中需要特定形状时,最佳选择是在CAD应用程序(例如AutoCAD、3D Studio Max等)中绘制它们。 然后再导入它们。 当外部CAD应用程序不可用或仅需要简单形状时,用户可以创建基本体形状,然后在CoppeliaSim中支持的3种形状编辑模式之一自定义创建的形状:

  • 三角形编辑模式:在此模式下,组成形状的各个三角形都是可见的,并且可以操作或提取。
  • 顶点编辑模式:在此模式下,组成形状的各个顶点都是可见的,并且可以操纵或提取。
  • 边编辑模式:在此模式下,组成形状的各个边都是可见的,并且可以操纵或提取。

在这里插入图片描述

  在进入上述编辑模式之一之前,纯形状将转换为规则形状。

  复合形状不能直接编辑。 首先必须将其解组。 也可以通过复合形状的编辑模式编辑其组成元素的视觉参数。

  单击相应的工具栏按钮即可访问不同的编辑模式:

在这里插入图片描述

  确保在进入形状编辑模式之前选择了形状对象。 在形状编辑期间,不能选择对象,也不能启动模拟。 编辑完成后,单击形状编辑模式工具栏按钮即可进入编辑模式。 将更改应用于形状时,CoppeliaSim将确保修改后的形状是一致的,并移除不使用的顶点并合并彼此接近的顶点等。具体行为可以在用户设置对话框中的顶点/三角形验证设置中设置。

  您可以从一种编辑模式切换到另一种模式,这允许您实现特殊操作。 例如,如果要选择并移除圆柱体上表面的所有三角形,而不是在三角形编辑模式下单独选择它们,请在顶点编辑模式下按住Shift并选择所有上部顶点,然后切换到三角形编辑模式,然后按Delete键。

4.1.12.6.1 三角形编辑模式

  单击相应的工具栏按钮即可进入三角形编辑模式:

在这里插入图片描述

  以上工具栏按钮仅在选定形状时才处于活动状态。 如果最后选择的形状不是简单形状,而是复合形状,则将改为激活复合形状的编辑模式。 在三角形编辑模式中,单独显示组成形状的所有三角形。 三角形有两个面,正面和背面。 正面显示为蓝色,背面显示为红色。 选择三角形时(使用与选择对象相同的步骤),它们将显示为黄色,而最后选择的三角形将显示为白色。 支持快捷复制/剪切/粘贴/删除(ctrl-c、ctrl-x、ctrl-v、delete)。 可以使用Esc-键、使用取消选择工具栏按钮或通过按住Ctrl并单击场景的空白区域来清除选择。 按住Shift键选择将选择选择区域下的所有三角形,也会选择隐藏的三角形(如果您希望通过按住Shift键只选择可见的三角形,请在按住Shift键的同时按住Ctrl键)。 在三角形编辑模式中,窗口中通常显示场景层次的部分用于将正在编辑的形状的三角形显示为列表。 与层次窗口中的对象一样,可以使用鼠标选择列表中的项目。

在这里插入图片描述

  进入三角形编辑模式后,编辑菜单项([菜单栏–>编辑])将变为专用于三角形编辑模式,并显示如下对话框:

在这里插入图片描述

  • 三角形/顶点/边编辑模式:当前激活的编辑模式。 用户可以通过这些按钮从一种编辑模式切换到其他编辑模式(所选项目将被保留)。
  • 清除选择:清除三角形的选择。
  • 反转选择:反转三角形的选择状态。
  • 提取形状:将基于当前选定的三角形创建简单形状。 该形状将添加到场景中,但可能不可见(编辑模式中的形状与新创建的形状在位置和方向上重合,或者第一个可见层被禁用)。 三角形选择将保持不变。
  • 提取长方体:将基于当前选定的三角形创建一个矩形(纯)简单形状(将以与包含选定三角形的最小边界框相同的方式确定新长方体的方向)。 三角形选择将保持不变。 例如,当需要以简化方式对复杂网格形状建模以实现高效的动力学模拟时,此操作非常有用。
  • 提取圆柱体:将基于当前选定的三角形创建圆柱形(纯)简单形状(将以与包含选定三角形的最小边界框相同的方式确定新圆柱体的方向)。 三角形选择将保持不变。 例如,当需要以简化方式对复杂网格形状建模以实现高效的动力学模拟时,此操作非常有用。
  • 提取球体:将基于当前选定的三角形创建球形(纯)简单形状(将以与包含选定三角形的最小边界框相同的方式确定新椭球体的方向)。 三角形选择将保持不变。 例如,当需要以简化方式对复杂网格形状建模以实现高效的动力学模拟时,此操作非常有用。
  • 翻转:翻转选定三角形的边(从红色翻到蓝色,从蓝色翻到红色)。
  • 细分最大的三角形:这将分割大的三角形。 除非要减小三角形大小以获得大型曲面更具差异性的照明,否则不建议减小三角形大小(除非您确切知道自己在做什么)。 相反,您可以全局调整计算结构的三角形大小(在环境对话框中)。

  可以使用鼠标直接平移三角形,使用工具栏的对象/项目平移按钮将垂直平面中的选定三角形平移到视图方向:

在这里插入图片描述

4.1.12.6.2 顶点编辑模式

  通过单击相应的工具栏按钮可以访问顶点编辑模式:

在这里插入图片描述

  以上工具栏按钮仅在选定形状时才处于活动状态。 如果最后选择的形状不是简单形状,而是复合形状,则将改为激活复合形状的编辑模式。 在顶点编辑模式中,组成图形的所有顶点将分别显示为红色。 选择顶点时(使用与选择对象相同的步骤),它们将显示为黄色,最后选择的顶点显示为白色。 支持快捷复制/剪切/粘贴/删除(ctrl-c、ctrl-x、ctrl-v、delete)。 可以使用Esc-键、使用取消选择工具栏按钮或通过按住Ctrl并单击场景的空白区域来清除选择。 按住Shift键选择将选择选择区域下的所有顶点,也会选择隐藏顶点(如果希望通过按住Shift键只选择可见顶点,请在按住Shift键的同时按住Ctrl键)。 在顶点编辑模式中,窗口中通常显示场景层次的部分用于将正在编辑的图形的顶点显示为列表。 与层次窗口中的对象一样,可以使用鼠标选择列表中的项目。

在这里插入图片描述

  进入顶点编辑模式后,编辑菜单项([Menu Bar–>Edit])将变为特定于顶点编辑模式,并显示如下对话框:

在这里插入图片描述

  • 三角形/顶点/边编辑模式:当前激活的编辑模式。 用户可以通过这些按钮从一种编辑模式切换到其他编辑模式(所选项目将被保留)。
  • 显示隐藏顶点:选中后,还将显示隐藏顶点。
  • 清除选择:清除顶点选择。
  • 反转选择:反转顶点的选择状态。
  • 插入三角形:将在选定顶点之间插入三角形。 选择顶点的顺序很重要。
  • 插入三角形扇形:将在选定顶点之间插入三角形扇形。 选择顶点的顺序很重要。 最后选择的顶点将是新插入的三角形之间的公共顶点。
  • 制作虚拟对象:将基于当前选定的顶点创建虚拟对象。 当需要设置图形的精确坐标系时,这是一个很有用的功能:基于顶点创建虚拟对象,退出编辑模式并将图形附加到虚拟对象(虚拟对象成为父对象)。 然后,您可以通过虚拟对象操纵形状的位置。

  可以通过坐标和变换对话框精确定位顶点。 也可以使用鼠标直接平移它们,使用工具栏的对象/项目平移按钮将垂直平面中的选定顶点/顶点平移到视图方向:

在这里插入图片描述

4.1.12.6.3 边缘编辑模式

  单击相应的工具栏按钮即可访问边编辑模式:

在这里插入图片描述

  以上工具栏按钮仅在选定形状时才处于活动状态。 如果最后选择的形状不是简单形状,而是复合形状,则将改为激活复合形状的编辑模式。 在边编辑模式中,组成形状的所有边分别显示为红色。 选择边时(使用与选择对象相同的步骤),它们将显示为黄色,而最后选择的边将显示为白色。 可以使用DELETE键删除边,但不能复制、剪切或粘贴边。 可以使用Esc-键、使用取消选择工具栏按钮或通过按住Ctrl并单击场景的空白区域来清除选择。 按住Shift键选择将选择选择区域下的所有边,也会选择隐藏边(如果希望通过按住Shift键选择仅选择可见边,请在按住Shift键的同时按住Ctrl键)。 在边编辑模式中,窗口中通常显示场景层次的部分用于将正在编辑的形状的边显示为列表。 与层次窗口中的对象一样,可以使用鼠标选择列表中的项目。

在这里插入图片描述

  进入边缘编辑模式后,编辑菜单项([Menu Bar–>Edit])将变为特定于边缘编辑模式,并将显示以下对话框:

在这里插入图片描述

  • 三角形/顶点/边编辑模式:当前激活的编辑模式。 用户可以通过这些按钮从一种编辑模式切换到其他编辑模式(所选项目将被保留)。
  • 显示隐藏边:选中后,还将显示隐藏边。
  • 自动边跟随:如果选中此选项,并且选择了一条边,则将跟随该边,直到创建循环为止,直到边突然改变方向(最大。 目录。 更改角度),或直到边消失(最大。 边缘角度)。 当您不仅要提取局部边(三角形的一侧),而且要提取全局边(图形的边)时,这是一个有用的功能。 一条边只在一个方向上跟随。

在这里插入图片描述

  • 清除选择:清除边的选择。
  • 反转选择:反转边的选择状态。
  • 提取路径:将基于当前选定的边创建路径对象。 每条边表示路径中两个连续控制点之间的分段(禁用贝塞尔插值(每个控制点的贝塞尔点数为1)。 该路径提取功能在许多不同的情况下非常有用(例如,使焊接机器人跟随对象的边缘,或者使轨道类型的对象生成其对应的路径)。

  可以使用鼠标直接平移边,使用工具栏的对象/项目平移按钮将垂直平面中的选定边平移到视图方向:

在这里插入图片描述

4.1.12.6.4 复合形状的编辑模式

  通过单击相应的工具栏按钮可以访问复合形状的编辑模式:

在这里插入图片描述

  以上工具栏按钮仅在选定形状时才处于活动状态。 如果最后选择的形状不是复合形状,而是简单形状,则将改为激活三角形编辑模式。 在复合形状的编辑模式中,可以编辑形状的各个组件的各个可视参数。 可以在层次窗口中选择形状的组件。

在这里插入图片描述

  进入复合形状编辑模式后,将显示如下对话框:

在这里插入图片描述

  • 调整颜色:允许编辑形状组件的颜色。
  • 调整纹理:打开选定形状组件的纹理对话框。
  • 着色角度:着色角度是区分各个面的角度。 小角度使形状看起来锋利,大角度使形状看起来平滑,边缘较少。
  • 显示边:以黑色显示边。 显示的边将取决于指定的角度。 如果选中隐藏边界,则不共享多个三角形的边将被隐藏。
  • 背面剔除:组成一个形状的每个三角形都有一个内面和一个外面。 启用背面消隐后,将不会显示内部面。 对于闭合形状和透明形状,这是一个有用的参数。
  • 线框:如果选中此选项,则通过摄影机查看时,图形将始终显示为线框。

4.1.13 关节

  关节是至少具有一个固有自由度(DoF)的对象。 关节用于构建机构和移动对象,如下图所示:

在这里插入图片描述

  使用[菜单栏–>添加–>关节]将关节添加到场景中。 请参考模型创建教程中的运动类型部分。 某些关节数据可以由图形对象记录。 有关如何记录接头数据的详细信息,请参阅图形和图形数据流。

4.1.13.1 运动类型和操作

  与另一个对象相比,一个关节有两个参考帧(仅当选择该关节时可见)。 第一个是固定的常规参照系,其他物体也有。 第二个参考系不是固定的,将根据定义其配置的运动类型位置(或运动类型值)相对于第一个参考系移动。

关节类型

  支持4种类型的关节:

在这里插入图片描述

  • 旋转关节:旋转关节有一个自由度,用于描述对象之间的旋转运动(具有一个自由度)。 它们的配置由一个值定义,该值表示围绕其第一个参考帧的z轴的旋转量。 它们可以用作被动关节,也可以用作主动关节(马达)。
  • 平移关节:平移关节有一个自由度,用于描述对象之间的平移运动。 它们的配置由一个值定义,该值表示沿其第一个参考帧的z轴的平移量。 它们可以用作被动关节,也可以用作主动关节(马达)。
  • 螺钉:螺钉可视为旋转关节和平移关节(具有链接值)的组合,具有一个自由度,用于描述类似于螺钉的运动。 间距参数定义给定旋转量的平移量。 螺钉配置由一个值定义,该值表示绕其第一个参考系的z轴的旋转量。 螺钉可以用作被动连接,也可以用作主动连接(马达)。
  • 球形关节:球形关节具有三个自由度,用于描述对象之间的旋转运动(具有三个自由度)。 它们的配置由三个值定义,这三个值表示围绕其第一个参考帧的x轴、y轴和z轴的旋转量。 定义球形关节配置的三个值被指定为欧拉角。 在某些情况下,球形关节可以被认为是3个彼此平行且正交的关节,它们是层次链中的子对象。 但是,仅当所有旋转运动类型都保持与其他两个运动类型中的任何一个不同的方向时,此类比才有效;实际上,如果两个运动类型接近重合,可能会出现奇特情况,并且机构可能会丢失一个自由度。 对于内部处理以避免这种情况的球形连接,不会发生这种情况。 球形关节始终是被动运动类型,不能充当马达。

在这里插入图片描述

  关节用于允许其父对象和子对象之间的相对运动。 在关节和对象之间建立父子关系时,对象将附加到关节的第二个参考系,因此,关节配置(固有位置)的更改将直接反映到其子对象上。 可以使用[菜单栏–>添加–>关节]将新关节添加到场景中。

关节类型

  关节可以处于以下模式之一:

  • 被动模式:在此模式下,关节不受直接控制,将充当固定链接。 但是,用户可以通过适当的API函数调用(例如sim.setJointPositon或sim.setSphericalJointMatrix)更改关节的位置。
  • 反向运动学模式:在此模式下,关节充当被动运动类型,但在反向运动学计算期间使用(调整)。
  • 从属模式:在此模式下,关节位置通过线性方程直接链接(从属)到另一个关节位置。
  • 运动模式:此模式已弃用,不应再使用。 使用被动模式和适当更新关节的子脚本可以获得类似和更灵活的行为。
  • 扭矩或力模式:在此模式下,当且仅当动态启用时,才由动力学模块模拟运动类型(有关详细信息,请参阅设计运动仿真部分)。 动态启用时,可以在力/扭矩、速度或位置上自由或控制运动类型。 螺钉不能在扭矩或力模式下操作(但是,可以通过编程连接旋转和棱体连接来获得类似的行为),而球面连接只能在扭矩或力模式下自由操作。
    • 禁用运动类型马达时,运动类型是自由的,并且仅受其限制的约束。
    • 当关节马达被启用而控制回路被禁用时,关节将尝试达到所需的目标速度,给定它能够提供的最大扭矩/力。 当最大力矩/力非常大时,瞬时达到目标速度,关节在速度控制下运行,否则它在指定的力矩/力下运行,直到达到所需的目标速度(力矩/力控制)。
    • 当关节电机启用和控制回路启用时,用户有3种控制模式可用:
      • 自定义控制:关节回调函数将负责控制关节的动态行为,允许您使用任何可以想象的算法控制关节。

      • 位置控制(PID):关节将通过PID控制器进行位置控制,PID控制器将以以下方式调整关节速度(Δt分频器使控制器独立于选定的控制器时间步长):

      • 在这里插入图片描述

      • 弹簧-阻尼器模式:通过力/扭矩调节,关节将起到弹簧-阻尼器系统的作用:

在这里插入图片描述

  当关节处于被动模式、反向运动学模式或从属模式时,也可以选择以混合方式操作;混合操作允许关节以常规方式操作,但另外,就在动力学计算之前,当前关节位置将被复制到目标关节位置,然后在动力学计算期间,关节将作为位置控制中的马达进行处理(如果且仅当其处于动态启用状态时(有关详细信息,请参阅设计动力学模拟一节))。 例如,该特征允许通过简单地指定所需的脚位置(作为反向运动学任务)来控制类人机器人的腿;然后,相应的计算出的关节位置将被应用为腿动态运动的位置控制值。

关节控制器

  有许多不同的方法可以控制关节。 在接下来的部分中,我们将区分松散控制器和精确控制器:松散连接控制器将不能在每个可能的调节步骤中提供新的控制值(例如,可能/将跳过一些调节步骤,但仍然可以控制)。 另一方面,精确的关节控制器将能够在每个可能的调节步骤中提供控制值。

  首先,控制关节的方法将取决于关节模式:

  • 运动类型未处于力/扭矩模式。
  • 关节在力/力矩模式下运行。

  区别来自于这样一个事实,即在力/扭矩模式下操作的关节将由物理引擎处理。 并且默认情况下,物理引擎将执行比模拟循环多10倍的计算步骤;模拟循环以20 Hz(在模拟时间)运行,而物理引擎以200 Hz(也是在模拟时间)运行。 如果需要,可以完全配置该默认行为。

  如果关节不处于力/扭矩模式:如果关节不处于力/扭矩模式,则可以通过sim.setJointPosition API函数(或类似函数,例如,用于基于B0的远程API的simxSetJointPosition或用于传统远程API的simxSetJointPosition)直接(即时)设置其位置。 您可以从子脚本、插件、ROS节点、BlueZero节点或远程API客户端执行此操作。 如果从子脚本执行此操作,则应在非线程化子脚本的激活部分内完成,或从在主脚本的感测阶段之前执行的线程化子脚本执行(默认)。 但是,在后一种情况下,请确保线程化的子脚本与模拟循环同步,以便进行精确控制。

  在下面的线程子脚本示例中,关节的位置控制松散,并且与模拟循环没有同步:

-- Following script should run threaded:

jointHandle=sim.getObjectHandle('Revolute_joint')

sim.setJointPosition(jointHandle,90*math.pi/180) -- set the position to 90 degrees
sim.wait(2) -- wait 2 seconds (in simulation time)
sim.setJointPosition(jointHandle,180*math.pi/180) -- set the position to 180 degrees
sim.wait(1) -- wait 1 second (in simulation time)
sim.setJointPosition(jointHandle,0*math.pi/180) -- set the position to 0 degrees
etc.

  在下面的线程化子脚本示例中,在每个模拟步骤中精确控制关节的位置,即线程与模拟循环同步:

-- Following script should run threaded:

sim.setThreadSwitchTiming(200) -- Automatic thread switching to a large value (200ms)
jointHandle=sim.getObjectHandle('Revolute_joint')

sim.setJointPosition(jointHandle,90*math.pi/180) -- set the position to 90 degrees
sim.switchThread() -- the thread resumes in next simulation step (i.e. when t becomes t+dt)
sim.setJointPosition(jointHandle,180*math.pi/180) -- set the position to 180 degrees
sim.switchThread() -- the thread resumes in next simulation step
sim.setJointPosition(jointHandle,0*math.pi/180) -- set the position to 0 degrees
sim.switchThread() -- the thread resumes in next simulation step
-- etc.

-- In above code, a new joint position is applied in each simulation step

  当您尝试从外部应用程序(例如,通过远程API、ROS或BlueZero)控制非力/扭矩模式的关节时,外部控制器将异步运行到CoppeliaSim(即,类似于线程化子脚本的非同步代码)。 对于松散控制,这在大多数情况下都很好,但如果您希望在每个模拟循环中精确控制关节的位置,则必须在同步模式下运行CoppeliaSim,并且外部控制器(例如远程API客户端)必须明确触发每个模拟步骤。

  下面说明了执行此操作的基于C++ B0的远程API客户端:

bool doNextStep=false;

void simulationStepDone_CB(std::vector<msgpack::object>* msg)
{ 
   
    doNextStep=true;
}

int main(int argc,char* argv[])
{ 
   
    ...
    client.simxSynchronous(true); // enable the synchronous mode
    client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone_CB)); // callback when step finished
    client.simxStartSimulation(client.simxDefaultPublisher()); // start the simulation

    client.simxSetJointPosition(jointHandle,90.0f*3.1415f/180.0f,client.simxDefaultPublisher()); // set the joint to 90 degrees
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    client.simxSetJointPosition(jointHandle,180.0f*3.1415f/180.0f,client.simxDefaultPublisher()); // set the joint to 180 degrees
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    client.simxSetJointPosition(jointHandle,0.0f*3.1415f/180.0f,client.simxDefaultPublisher()); // set the joint to 0 degrees
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
    ...
}

  有关基于B0的远程API同步模式如何准确运行的详细信息,请参阅本页。 该方法与ROS或BlueZero类似。

  不过,对于旧式远程API客户端,下面也会执行相同的操作:

...
simxSynchronous(clientId,1); // enable the synchronous mode (client side). The server side (i.e. CoppeliaSim) also needs to be enabled.
simxStartSimulation(clientId,simx_opmode_oneshot); // start the simulation
simxSetJointPosition(clientId,jointHandle,90.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint to 90 degrees
simxSynchronousTrigger(clientId); // trigger next simulation step. Above commands will be applied
simxSetJointPosition(clientId,jointHandle,180.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint to 180 degrees
simxSynchronousTrigger(clientId); // next simulation step executes. Above commands will be applied
simxSetJointPosition(clientId,jointHandle,0.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint to 0 degrees
...

  有关传统远程API同步模式如何准确运行的详细信息,请参阅此页。 该方法与ROS或BlueZero类似。

  如果关节处于力/扭矩模式:如果关节在力/扭矩模式下运行并且处于动态启用状态,则它将由物理引擎间接处理。 如果您的关节的马达未启用,则您的关节不受控制(即它将是自由的)。 否则,您的关节可以处于以下两种动态模式:

  关节的马达处于启用状态,但控制回路处于禁用状态。 当您希望从外部应用程序(例如,力/扭矩控制、PID等)精确自定义控制关节时,请使用此模式。 当您想要在力/力矩模式下松散地控制关节,或用于速度控制(例如机器人车轮马达)时,也可以使用此模式。

  关节的马达处于启用状态,控制回路也处于启用状态。 当关节需要充当弹簧/阻尼器时,或者如果要从CoppeliaSim内精确自定义控制关节,或者希望从外部应用程序松散地控制关节的位置控制,请使用此模式。

  如果启用了关节的马达,但禁用了控制回路,则物理引擎将应用指定的最大力/扭矩,并加速关节,直到达到目标速度。 如果载荷较小和/或最大力/扭矩较高,将很快达到目标速度。 否则,这将需要一些时间,或者,如果力/扭矩不够大,将永远达不到目标速度。 可以使用sim.setJointTargetVelocity以编程方式调整目标速度(例如,对于基于B0的远程API:simxSetJointTargetVelocity,或者对于传统远程API:simxSetJointTargetVelocity),以及使用sim.setJointForce调整最大力/扭矩(例如,对于基于B0的远程API:simxSetJointForce,或者对于传统远程API:simxSetJointForce)。 在从子脚本为处于力/转矩模式的关节编写精确的关节控制器之前,应非常小心,原因如下:

  默认情况下,模拟循环以50ms的时间步长运行(在模拟时间中)。 但物理引擎将以5ms的时间步长运行,即频率增加10倍。 将在每个模拟步骤中调用子脚本,但不会在每个物理引擎计算步骤中调用子脚本。 这意味着,如果您以常规方式从子脚本控制关节,您将只能为10个物理引擎计算步骤提供一次新控制值:您将缺少9个步骤。 克服此问题的一种方法是更改默认模拟设置,并将模拟时间步长指定为5ms,而不是50ms。 这可以很好地工作,但请记住所有其他计算(例如,视觉传感器、接近传感器、距离计算、IK等)。 还将运行10倍以上的频率,并最终降低模拟速度(大多数情况下,其他计算模块不需要如此高的刷新率。 但是物理引擎需要如此高的刷新率)。 另一个更好的选择是使用联合回调函数(或动态回调函数),下面将对此进行说明。

  另一方面,如果您想要在外部(例如,从远程API客户端、ROS节点或BlueZero节点)运行精确而常规的关节控制器,那么您别无选择,只能将模拟环路设置为与物理引擎速率相同的速率,然后以同步模式运行CoppeliaSim,并且外部控制器(例如,远程API客户端)将必须明确地触发每个模拟步骤。

  下面说明了执行此操作的基于C++B0的远程API客户端:

bool doNextStep=false;

void simulationStepDone_CB(std::vector<msgpack::object>* msg)
{ 
   
    doNextStep=true;
}

int main(int argc,char* argv[])
{ 
   
    ...
    client.simxSynchronous(true); // enable the synchronous mode
    client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone_CB)); // callback when step finished
    client.simxStartSimulation(client.simxDefaultPublisher()); // start the simulation

    // set the desired force and target velocity:
    client.simxSetJointForce(jointHandle,1.0f,client.simxDefaultPublisher());
    client.simxSetJointTargetVelocity(jointHandle,180.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    // set the desired force and target velocity:
    client.simxSetJointForce(jointHandle,0.5f,client.simxDefaultPublisher());
    client.simxSetJointTargetVelocity(jointHandle,180.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step 
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    // set the desired force and target velocity:
    client.simxSetJointForce(jointHandle,2.0f,client.simxDefaultPublisher());
    client.simxSetJointTargetVelocity(jointHandle,180.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
    ...
}

  有关基于B0的远程API同步模式如何准确运行的详细信息,请参阅本页。 该方法与ROS或BlueZero类似。

  不过,对于旧式远程API客户端,下面也会执行相同的操作:

...
simxSynchronous(clientId,1); -- enable the synchronous mode (client side). The server side (i.e. CoppeliaSim) also needs to be enabled.
simxStartSimulation(clientId,simx_opmode_oneshot); // start the simulation
simxSetJointForce(clientId,jointHandle,1.0f,simx_opmode_oneshot); // set the joint force/torque
simxSetJointTargetVelocity(clientId,jointHandle,180.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint target velocity
simxSynchronousTrigger(clientId); // trigger next simulation step. Above commands will be applied
simxSetJointForce(clientId,jointHandle,0.5f,simx_opmode_oneshot); // set the joint force/torque
simxSetJointTargetVelocity(clientId,jointHandle,180.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint target velocity
simxSynchronousTrigger(clientId); // next simulation step executes. Above commands will be applied
simxSetJointForce(clientId,jointHandle,2.0f,simx_opmode_oneshot); // set the joint force/torque
simxSetJointTargetVelocity(clientId,jointHandle,180.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the joint target velocity
...

  有关传统远程API同步模式如何准确运行的详细信息,请参阅此页。 该方法与ROS或BlueZero类似。

  如果启用了关节的马达,并且也启用了控制回路,则物理引擎将根据设置处理关节:您的关节可以在位置控制(即PID控制)、弹簧/阻尼器模式或自定义控制下运行。 PID和弹簧/阻尼器参数可以从子脚本、远程API客户端、ROS或BlueZero节点更新。 参见对象参数ID 2002-2004、2018-2019年。 可以使用sim.setJointTargetPosition(或者,例如,从基于B0的远程API客户端:simxSetJointTargetPosition,或者从传统的远程API客户端:simxSetJointTargetPosition)设置所需的目标位置。 如果需要精确的自定义控制器,则应改用关节回调函数(或动力学回调函数)。

  最后,如果您需要在外部应用程序中实现的精确PID或自定义控制器,则需要确保模拟步骤与物理引擎计算步骤相同:默认情况下,CoppeliaSim的模拟循环运行频率为20 Hz(在模拟时间内),而物理引擎运行频率为200 Hz。 可以在仿真设置中调整仿真步长。 您还需要确保在同步模式下运行CoppeliaSim。

  下面说明了执行此操作的基于C++B0的远程API客户端:

bool doNextStep=false;

void simulationStepDone_CB(std::vector<msgpack::object>* msg)
{ 
   
    doNextStep=true;
}

int main(int argc,char* argv[])
{ 
   
    ...
    client.simxSynchronous(true); // enable the synchronous mode
    client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone_CB)); // callback when step finished
    client.simxStartSimulation(client.simxDefaultPublisher()); // start the simulation

    // set the desired target position:
    client.simxSetJointTargetPosition(jointHandle,90.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    // set the desired target position:
    client.simxSetJointTargetPosition(jointHandle,180.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
        
    doNextStep=false;
    // set the desired target position:
    client.simxSetJointTargetPosition(jointHandle,0.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
    ...
}

  不过,对于旧式远程API客户端,下面也会执行相同的操作:

...
simxSynchronous(clientId,1); -- enable the synchronous mode (client side). The server side (i.e. CoppeliaSim) also needs to be enabled.
simxStartSimulation(clientId,simx_opmode_oneshot); // start the simulation
simxSetJointTargetPosition(clientId,jointHandle,90.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the desired joint position
simxSynchronousTrigger(clientId); // trigger next simulation step. Above commands will be applied
simxSetJointTargetPosition(clientId,jointHandle,180.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the desired joint position
simxSynchronousTrigger(clientId); // next simulation step executes. Above commands will be applied
simxSetJointTargetPosition(clientId,jointHandle,0.0f*3.1415f/180.0f,simx_opmode_oneshot); // set the desired joint position
...

  您还可以让远程API客户端通过向关节回调函数提供值(例如通过信号)来为在关节回调函数中实现的自定义关节控制器提供控制值。 例如,从基于C++B0的远程API客户端:

bool doNextStep=false;

void simulationStepDone_CB(std::vector<msgpack::object>* msg)
{ 
   
    doNextStep=true;
}

int main(int argc,char* argv[])
{ 
   
    ...
    client.simxSynchronous(true); // enable the synchronous mode
    client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone_CB)); // callback when step finished
    client.simxStartSimulation(client.simxDefaultPublisher()); // start the simulation

    // set the desired target position:
    simxSetFloatSignal("myDesiredTorque",1.0f,client.simxDefaultPublisher());
    simxSetFloatSignal("myDesiredTarget",90.0f*3.1415f/180.0f,client.simxDefaultPublisher());
    client.simxSynchronousTrigger(); // start one simulation step
    while (!doNextStep) // wait until simulation step finished
        client.simxSpinOnce();
    ...
}

  在上面的示例中,您的联合回调函数可以在执行控制之前获取这两个信号(使用sim.getDoubleSignal)。

  不过,对于旧式远程API客户端,下面也会执行相同的操作:

...
simxSynchronous(clientId,1); -- enable the synchronous mode (client side). The server side (i.e. CoppeliaSim) also needs to be enabled.
simxStartSimulation(clientId,simx_opmode_oneshot); // start the simulation
simxSetFloatSignal(clientId,"myDesiredTorque",1.0f,simx_opmode_oneshot); // set the signal value
simxSetFloatSignal(clientId,"myDesiredTarget",90.0f*3.1415/180.0f,simx_opmode_oneshot); // set the signal value
simxSynchronousTrigger(clientId); // trigger next simulation step. Above commands will be applied
...

4.1.13.2 关节属性

  关节属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击关节按钮以显示关节对话框(仅当最后选择的是关节时,才会显示关节按钮)。 该对话框显示上次选定关节的设置和参数。 如果选择了多个关节,则可以将某些参数从上一个选定关节复制到其他选定关节(应用于选择按钮。 请注意,这仅在相同类型或模式的关节之间有效):

在这里插入图片描述

  • 位置是循环的:指示关节位置是否是循环的(在-180度和+180度之间无限制变化)。 只有旋转关节可以是循环运动类型。
  • 螺距:连接的节距值。 当位置为循环时-复选框处于未选中状态时,此特性仅在旋转/螺钉类型的运动类型下可用。
  • 最小位置:非循环旋转联接、螺钉或棱柱联接的最小允许值。
  • 位置范围:非循环旋转联接、螺杆联接或棱柱联接的变化范围。 这种接头的位置被限制在最小位置和最小位置+位置范围之间。
  • 位置:旋转运动类型、棱体运动类型或螺钉的固有运动类型位置。
  • IK计算权重:反向运动学计算期间关节的权重。 例如,在冗余操纵器的情况下,此选项使您能够在反向运动学解析期间优先选择某些关节。 与其他关节相比,权重较小的关节的位置变化相对较小。
  • 最大步长:一次运动学计算过程中允许的最大位置变化。 较小的步长通常会导致较长的计算时间,但可能会更稳定。 对于反向运动学计算,该值可以由忽略最大值覆盖。 反向运动学对话框中的步长项目。
  • 模式:关节的控制模式。 关节可以处于被动模式、反向运动学模式、从属模式或力矩/力模式。
  • 混合操作:当关节处于被动模式、反向运动学模式或从属模式时,也可以选择以混合方式操作,混合操作允许关节以常规方式操作,但另外,就在动力学计算之前,当前关节位置将被复制到目标关节位置,然后在动力学计算期间,关节将作为位置控制中的马达进行处理(如果且仅当其处于动态启用状态时)。 有关详细信息,请参阅接头类型和操作部分。
  • 调整从属关系表达式:如果关节处于从属模式,则可以指定将该关节链接到另一个关节的线性方程。 对话框此部分中的值均以米或弧度表示。
  • 长度:关节的长度。 没有功能意义。
  • 直径:关节的直径。 没有功能意义。
  • 调整颜色A/B:颜色A为关节固定部分的颜色,颜色B为关节活动部分的颜色。
  • 显示动力学属性对话框:切换关节动力学属性对话框。 关节动力学对话框允许调整关节的动力学属性。
4.1.13.2.1 关节动态属性

  运动类型动力学特性是运动类型特性的一部分。 其对话框显示上次选定关节的动力学设置和参数。 如果未选择任何对象,则该对话框处于非活动状态。 如果选择了多个关节,则可以将某些参数从上一个选定关节复制到其他选定关节(应用于选择按钮。 请注意,这仅在相同类型或模式的关节之间有效):

在这里插入图片描述

  • 启用马达:启用或禁用运动类型的马达。 如果禁用,则关节是自由的。 仅当关节处于力矩/力模式时才可用。
  • 目标速度:关节电机的目标速度。 当最大力矩/力足够大时,瞬时达到目标速度,否则逐渐接近目标速度。
  • 最大扭矩/力:关节电机运行时的最大扭矩或力。
  • 目标速度为零时锁定电机:当关节启用其电机并禁用控制回路时,它将执行速度控制。 当目标速度为零时,它可能会漂移,因为力矩/力只起到内耗的作用。 要避免这种情况,可以启用该项目,当关节的目标速度设置为零时,该项目将锁定关节的位置。
  • 引擎特定属性:允许调整引擎特定参数。 请参考与关节相关的动力学引擎属性对话框。
  • 控制回路启用:启用或禁用关节控制回路。 默认情况下,使用内置PID控制器(请参见下面的内容)。
  • 目标位置:所需的关节目标位置。
  • 速度上限:允许将调节速度限制在最大值。
  • 位置控制(PID):如果启用,则通过内置PID控制器调节关节速度来控制关节的位置。
  • 比例/积分/微分参数:PID位置控制参数。
  • 弹簧-阻尼器模式:如果启用,则通过内置弹簧-阻尼器控制器调节关节力/扭矩来控制关节就位。
  • 弹簧常数K/阻尼系数C:弹簧阻尼器参数。
4.1.13.2.1.1 与关节相关的动力学引擎属性

  可以通过关节动力学属性对话框访问与关节相关的动力学引擎属性。 对话框中将显示上一个选定运动类型的引擎特定特性。 如果选择了多个关节,则可以将属性从最后一个选定关节复制到其他选定关节(将所有属性应用于选定关节):

在这里插入图片描述

Bullet属性

  与Bullet物理库相关的属性。 有关详细信息,请参考Bullet用户手册。

  • 正常CFM:远离限制时使用的约束力混合参数。
  • 停止ERP:最大限度减少误差的参数。
  • 停止CFM:限制处的约束力混合参数。

ODE属性

  与Open Dynamics引擎相关的属性。 有关详细信息,请参考ODE用户手册。

  • 正常CFM:远离限制时使用的约束力混合参数。
  • 停止ERP:最大限度减少误差的参数。
  • 停止CFM:限制处的约束力混合参数。 与停止ERP参数一起,可以创建海绵或软限制(不应与动力关节一起正常工作)。
  • 反弹:调节极限处的反弹程度的值(即恢复参数)。
  • 模糊因子:一个任意值,它可以帮助关节正确运行,例如,在远离限制时不那么跳跃。

Vortex属性

  与Vortex Studio引擎相关的属性。 请确保还参考Vortex用户手册了解详细信息。

  • 关节轴摩擦:用于定义沿约束轴或围绕约束轴的内耗。
    • 启用:启用内耗。
    • 成比例:如果为True,则摩擦力与约束中的张力成比例。
    • 系数:对于比例摩擦力,摩擦力与张力系数成正比。
    • 最大力:对于非比例摩擦,摩擦力可由用户直接提供。
    • 损失:粘度系数。
  • 关节轴限制:管理沿或围绕约束轴的位置或角度限制。
    • 较低/较高恢复:弹力性。
    • 下部/上部刚度:极限™弹簧的角刚度的线性。
    • 下阻尼/上阻尼:极限角阻尼的线性–欧元™弹簧。
    • 下限/上限最大力:极限的力或扭矩边界-欧洲™的弹簧。
  • 运动类型从属关系:允许动态链接两个动态启用的运动类型的特性。 两个链接的关节将分担/交换其各自的载荷(也就是说,施加到一个关节的力/扭矩将传递给另一个关节,反之亦然)。
    • 从属关节:链接到此关节的关节。 该属性不会显示为反射(即从属关节不会显示依存关系),以便能够将从属关节链接到复杂依存关系设置的其他关节。 所有从属关节必须共享相同的父形状才能正常操作。
    • 倍增系数:链接从属关节的倍增系数。 因子或1将使两个链接的旋转运动类型以相同的速率朝同一方向旋转。
    • 偏移量:尚未使用。 保持为0。
  • X轴位置:沿约束X轴(位置)的松弛和摩擦参数。
    • 松弛:松弛允许控制相应的约束强度。
      • 启用:启用松弛。
      • 刚度:基于位置的方程的弹簧刚度。
      • 阻尼:位置方程的弹簧阻尼。
      • 损耗:速度方程的粘度。
    • 摩擦:沿轴方向的内耗。
      • 启用:启用此轴的内耗。
      • 成比例:使摩擦力与运动类型中的张力成比例。
      • 系数:摩擦设置为张力*系数。
      • 最大力:如果不成比例,则摩擦力由用户手动设置。
      • 损耗:摩擦力、粘度。
  • Y轴位置:沿约束Y轴(位置)的松弛和摩擦参数。
  • Z轴位置:沿约束Z轴(位置)的松弛和摩擦参数。
  • X轴方向:约束X轴(方向)周围的松弛和摩擦参数。
  • Y轴方向:约束Y轴(方向)周围的松弛和摩擦参数。
  • Z轴方向:约束Z轴(方向)周围的松弛和摩擦参数。

Newton属性

  与牛顿动力学引擎相关的属性。 有关详细信息,请确保还参考牛顿用户手册。

  • 运动类型从属关系:允许动态链接两个动态启用的运动类型的特性。 两个链接的关节将分担/交换其各自的载荷(也就是说,施加到一个关节的力/扭矩将传递给另一个关节,反之亦然)。
  • 从属关节:链接到此关节的关节。 该属性不会显示为反射(即从属关节不会显示依存关系),以便能够将从属关节链接到复杂依存关系设置的其他关节。 所有从属关节必须共享相同的父形状才能正常操作。
  • 倍增系数:链接从属关节的倍增系数。 因子或1将使两个链接的旋转运动类型以相同的速率朝同一方向旋转。
  • 偏移量:尚未使用。 保持为0。

4.1.14 虚拟对象

  虚拟对象是可用的最简单的对象:它是一个有方向的点,可以将其视为参考系。 单独使用它们没有多大用处,但是当与其他对象或计算模块一起使用时,它们可能非常重要,虚拟对象是多用途或辅助对象。 下图显示了一个虚拟对象:

在这里插入图片描述

  虚拟对象是可碰撞、可测量和可检测的物体。 这意味着虚拟对象:

  • 可用于与其他基于体积的可碰撞对象(如OC树)的碰撞检测。
  • 可用于与其他可测量对象的最小距离计算。
  • 可以被接近传感器检测到。

  默认情况下,虚拟对象的可碰撞、可测量和可检测属性处于禁用状态(请参见对象通用属性)。

  可以使用[Menu bar–>Add–>Dummy]将虚拟对象添加到场景中,或在顶点编辑模式下从形状对象创建虚拟对象。

4.1.14.1 虚拟功能

  虚拟对象是多用途对象。 它们可以具有非常特定的功能,也可以仅用作辅助对象。 以下是常见的虚拟功能:

  • 用作点或参考系:当您要跟踪场景中特定点的位置和/或方向时,就会出现这种情况。 例如,虚拟位置可以与图形顶点的位置相匹配,并允许精确定位图形:在顶点编辑模式中,从顶点创建虚拟图形,然后将图形附加到虚拟图形(使其成为虚拟父对象)。 现在,您可以通过与选定顶点位置相同的虚拟对象操纵/定位图形。
  • 用作模型的代理或支持对象:通过使用Object is model base标志标记对象来定义模型。 任何对象都可以作为模型的基础,但是虚拟对象是模型的首选对象。
  • 用作标记点:例如,当评估机器人的工作空间时,可以在不同的时间间隔将一个虚拟人定位在与机器人末端执行器相同的坐标上,最后可以提取并显示所有添加的虚拟人的凸壳。 有关详细信息,请参考凸包计算部分。
  • 用于在反向运动学计算中指定末端效应器和末端效应器目标位置/方向:反向运动学计算模块处理运动链。 每个链都用一个基对象和一个尖端对象指定。 尖端对象必须是虚拟的,并且通常用户将尖端虚拟对象定位和定向以与机器人的末端执行器一致。 同时,为了以逆运动学模式移动运动链,需要机器人末端执行器的目标位置/方向。 在这里,再次使用虚拟对象作为目标对象。
  • 用于为动态模拟的机构创建回路闭合约束:有关详细信息,请参阅设计动态模拟部分。
  • 用作路径跟随对象:虚拟对象是唯一可以指定为停留在路径上(路径上自由,可自由滑动)或跟随路径位置(固定在路径上,沿路径固定在其当前固有位置)的对象。 下图显示了指定为停留在路径上的虚拟对象:

在这里插入图片描述

4.1.14.2 虚拟属性

  虚拟属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击虚拟按钮以显示虚拟对话框(仅当最后一个选择是虚拟时才会显示虚拟按钮)。 该对话框显示上次选择的虚拟对象的设置和参数。 如果选择了多个虚拟对象,则可以将一些参数从上次选择的虚拟对象复制到其他选定的虚拟对象(应用于选择按钮):

在这里插入图片描述

  • 链接的虚拟对象:链接到此对象的虚拟对象。 链接的虚拟对象(在场景和场景层次中,通过链接它们的彩色片段很容易识别)具有特殊的属性和行为,有关更多详细信息,请参见下一项。
  • 链接类型:链接类型将指定模拟过程中链接的虚拟对象的行为。 如果指定了动力学、重叠约束,则两个虚拟对象将尝试重叠其各自的位置/方向以创建动力学循环闭合约束(有关详细信息,请参见设计动力学模拟部分)。 如果指定IK,则两个链接的虚拟对象形成用于反向运动学计算的尖端-目标对。
  • 跟随父路径方向(仅间接父对象):如果选中此选项,则以路径(仅间接父对象)为父对象的虚拟对象将遵循该路径最近的Bezier点的方向(而不是位置)。 另请参阅sim.postPath API函数(使用sim.postPath函数,虚拟对象不需要以路径为父对象)。
  • 跟随父路径(仅直接父路径):如果选中此选项,并且虚拟对象的直接父对象是路径对象,则路径将自动计算虚拟对象的位置和方向(即,将从路径的Bezier点进行插值)。 有两种选择是可能的:路径上的空闲或路径上的固定。 另请参阅sim.postPath API函数(使用sim.postPath函数,虚拟对象不需要以路径为父对象)。
  • 在路径上自由:选中此选项后,将路径对象作为直接父对象的虚拟对象指定为停留在路径上(保持与路径的Bezier点相同的位置和方向),但可以沿着路径自由移动(即,可以通过对象操纵模式沿路径移动,也可以由反向运动学模块自动沿路径引导)。 打个比方,过山车的非轨道部分上有一辆马车。
  • 固定在路径上:选中后,将路径对象作为直接父对象的虚拟对象指定为停留在路径上(保持与路径的Bezier点相同的位置和方向),位于路径内部位置。 一个类比可以是过山车的轨道部分(将马车拉上来的初始部分)上的马车。 在这种情况下,可以指定距路径位置的距离偏移。
  • 偏移:将虚拟对象指定给路径上的固定位置时距离路径位置的距离偏移。 如果要创建焊肉,焊肉的第一个焊盘(刚性元素)将位于偏移0处,第二个位于偏移x处,第三个位于偏移2x处,依此类推。复制虚拟对象时,请使用复制增量自动递增偏移。
  • 复制增量:添加到复制的虚拟对象的偏移(请参见上文)的值(例如,创建焊肉时,可能需要几十个焊盘,每个焊盘位于可以自动计算的不同偏移处)。
  • 对象大小:虚拟对象的大小。 此参数仅具有视觉效果,没有功能意义。
  • 调整虚拟颜色:允许调整虚拟对象的颜色。

4.1.15 图表

  图表是可用于记录、可视化或从仿真导出数据的对象。 他们非常强大和灵活。 用户可以从应用于特定对象的多种数据类型中选择要记录的数据类型。 数据记录为数据流(数据值的顺序列表),可以通过三种不同的方式进行可视化:

  • 时间图:单个数据流(时间与数据流)的时间图。
  • X/Y图:组合两个数据流(数据流A与数据流B)的图。
  • 3D曲线:在时间上组合三个数据流(时间vs(数据流A、数据流B、数据流C))的3D图形。

  下图说明了图形功能:

在这里插入图片描述

  使用[Menu Bar–>Add–>Graph]将图形添加到场景中。 你看到的是图形的三维表示。 如果为该图形定义了3D曲线,则该曲线直接可见,如下图所示:

在这里插入图片描述

  图表记录的数据流可以导出到*.csv文件(逗号分隔值),该文件可以由各种应用程序(如Excel)轻松导入。 在场景中,选择要从中导出数据的图形,然后选择[Menu Bar–>File–>Export–>Selected Graphs as CSV…]。 导出的数据流的单位将是米、公斤、秒和度(或它们的组合)。

4.1.15.1 图表属性

  图表属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击图形按钮以显示图形对话框(仅当最后选择的是图形时,才会显示图形按钮)。 该对话框显示上次选择的图形的设置和参数。 如果选择了多个图形,则可以将一些参数从上次选择的图形复制到其他选择的图形(应用于选择-按钮):

在这里插入图片描述

  • 显式处理:指示是否应显式处理图形。 如果选中,则调用sim.handleGraph(sim.handle_all_except_explicit)时不会处理图形,但仅在调用sim.handleGraph(sim.handleGraph(sim.handleGraph)或sim.handleGraph(Graph Handle)时才会处理。 如果用户希望在子脚本中而不是在主脚本中处理图形,这很有用(如果未选中,图形将被处理两次,一次是在主脚本中调用sim.handleGraph(sim.handle_all_except_explicit)时,一次是在子脚本中调用sim.handleGraph(GraphHandle)时)。 另请参阅关于显式和非显式调用的部分。
  • Object Size:图形对象的大小。 此参数没有任何功能效果(即记录的3D曲线不会缩放,只有XYZ平面会缩放)。
  • 缓冲区是循环的:如果选择此选项,并且每个数据流中的元素数达到缓冲区大小,则第一个元素将被擦除,以便能够记录新元素。 否则,当缓冲器已满时,记录停止。
  • 缓冲区大小:每个数据流可以记录的元素数。
  • 显示XYZ平面:在场景视图中打开和关闭图形的XYZ平面的显示。
  • 删除所有静态流/曲线:清除所有静态数据流或曲线。 静态数据流或曲线是“冻结”的数据流或曲线,在模拟过程中不会更改。
  • 调整背景颜色:允许在时间图表或x/y图表视图中调整背景颜色。
  • 调整网格颜色:允许在时间图表或x/y图表视图中调整网格和分级颜色。
  • 添加要记录的新数据流:允许选择要记录的新数据流类型和对象。 有关更多详细信息,请参阅有关数据流类型的部分。
  • 数据流录制列表:该列表显示所有要录制的数据流。 可以编辑的各个数据流的名称将在时间图表视图中显示为标签。
  • 数据转换:确定如何转换选定的数据流。 RAW使用原始数据流,DRIVATE使用数据流的时间导数(例如,如果原始数据流是对象的位置,则数据将是其速度),INTEGAL使用数据流的时间积分(例如,如果原始数据是对象的速度,则数据将是其位置),并且Cumulative使用数据流的累加值。 此外,还可以对数据进行缩放、移位和指定移动平均周期。
  • 可见:确定所选数据流在时间图中是否可见。
  • 显示标签:确定是否在时间图中标记所选数据流。
  • 链接点:确定是否将所选数据流的各个值(或元素)链接并在时间图中显示为直线。
  • 调整曲线颜色:允许调整所选数据流的颜色,如时间图所示。
  • 复制曲线为静态:选中数据流后,点击此按钮,将该数据流复制为静态流。 启动新模拟时,静态流或曲线(显示为点划线)不会被修改或清除,并用于将一次模拟运行的结果与另一次模拟运行的结果进行比较。 数据流或曲线也可以通过在图形视图(浮动视图除外)中选择数据流或曲线,然后单击[弹出菜单–>添加–>曲线的静态复制]来设置为静态。 可以使用删除所有静态流/曲线按钮清除静态流或曲线。
  • 编辑XY图形:允许编辑XY图形。 请参阅XY图形/3D曲线对话框。
  • 编辑三维曲线:允许编辑三维曲线。 请参阅XY图形/3D曲线对话框。
4.1.15.1.1 XY图形和3D曲线对话框

  XY图形和3D曲线对话框是图形属性的一部分。 该对话框显示与上次选择的图形对象的XY图形或3D曲线相关的设置和参数。

在这里插入图片描述

  • 添加新曲线:允许添加新的XY图形或3D曲线项目。 新项目将显示在对话框的列表中,并且可以编辑其名称。 单击添加新曲线按钮将打开以下对话框:

  • 在这里插入图片描述

    • X-/Y-/Z-值=:允许为3个(如果是XY图形,则为2个)曲线尺寸中的每个尺寸指定数据流。 只能选择数据流记录列表中列出的数据流。 有关更多详细信息,请参阅图表属性。
  • 曲线可见:确定选定曲线是否可见。

  • 链接点:确定选定曲线的单个(x,y)或(x,y,z)值是否将与直线链接。

  • 显示标签:确定选定曲线的标签是否可见。

  • 调整颜色:允许调整所选曲线的颜色。

  • 复制到静态:选择曲线后,单击此按钮将把该曲线复制为静态曲线。 启动新仿真时,静态流或静态曲线(显示为点划线)不会被修改或清除,它们用于将一个仿真运行的结果与另一个仿真运行的结果进行比较。 数据流或曲线也可以通过在图形视图(浮动视图除外)中选择数据流或曲线,然后单击[弹出菜单–>添加–>曲线的静态复制]来设置为静态。 可以使用图形属性对话框中的删除所有静态流/曲线按钮清除静态流或曲线。

  • 曲线始终在顶部:确定选定曲线是否始终可见,即使被其他对象隐藏。 此属性仅适用于3D曲线。

  • 相对于图形:如果选中此选项,则所选曲线将相对于图形对象的参考帧显示。 此属性仅适用于3D曲线。

  • 相对于世界:如果选中此选项,则所选曲线将相对于绝对参考坐标系显示。 此属性仅适用于3D曲线。

  • 曲线宽度:选定曲线的宽度。 此属性仅适用于3D曲线。

4.1.16 接近传感器

  CoppeliaSim提供了一种非常强大和高效的方式来模拟接近传感器。 用户可以模拟几乎任何类型的接近传感器,从超声波到红外线等等。 允许此功能的场景对象是可以检测可检测实体的接近传感器(与视觉传感器不同)。 下图说明了使用接近传感器的模拟:

在这里插入图片描述

  使用[菜单栏–>添加–>接近传感器]将接近传感器添加到场景中。

  接近传感器使用的接近传感器检测例程也可以通过Coppelia几何例程作为独立例程使用。

4.1.16.1 接近传感器类型和操作模式

  接近传感器有6种不同类型,可在很大程度上进行定制:

  • 射线型:射线型接近传感器非常适合于非常简单的接近传感器建模,或激光测距仪的建模。 它们是最快的接近感应器。
  • 随机化射线型:随机化射线型接近传感器作为随机扫描锥体体积的射线型传感器运行。 它的外观与锥形接近传感器相似。
  • 金字塔型:金字塔型接近传感器非常适合对检测体积为矩形的接近传感器进行简单建模。 他们运行的很快。
  • 圆柱型:圆柱型接近传感器非常适合对检测体积为旋转的接近传感器进行简单建模。 他们运行的很快。
  • 盘式:盘式接近传感器允许精确建模具有旋转扫描检测体积的接近传感器。 根据所选的精度和操作模式,它们的计算量可能会更大一些。
  • 锥型:锥型接近传感器允许对大多数接近传感器进行最佳和最精确的建模。 根据所选的精度和操作模式,它们的计算量可能会更大一些。

在这里插入图片描述

  接近传感器以几何上精确的方式运行:它们在其感应点(小球体)和干扰其检测体积的任何可检测实体之间执行精确的距离计算(它们不像大多数其他模拟软件那样在传感体积边缘之间执行简单的碰撞检测,而是在检测体积内执行精确的距离计算)。 每个接近传感器将计算以下最小距离:

在这里插入图片描述

  如果接近传感器检测到对象,则激活触发器,这将导致调用触发器回调函数。

  接近传感器的计算结果可以通过图形对象记录下来。 有关如何记录接近传感器数据的更多信息,请参阅图形和图形数据流类型。

4.1.16.2 接近传感器属性

  接近传感器属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击接近感应器按钮以显示接近感应器对话框(仅当最后选择的是接近感应器时,才会显示接近感应器按钮)。 该对话框显示上次选择的接近传感器的设置和参数。 如果选择了多个接近传感器,则可以将一些参数从最后选择的接近传感器复制到其他选择的接近传感器(应用于选择按钮):

在这里插入图片描述

  • 启用所有接近传感器:启用或禁用所有接近传感器的接近传感器功能。
  • 显式处理:指示是否应显式处理传感器。 如果选中,则仅在调用sim.handleProximitySensor(SIM.HANDLE_ALL)或sim.handleProximitySensor(proximitySensorHandle)时才会在调用SIM.handleProximitySensor(SIM.HANDLE_ALL)时处理传感器。 如果用户希望在子脚本中而不是在主脚本中处理传感器,这很有用(如果不选中,传感器将被处理两次,一次是在主脚本中调用sim.handleProximitySensor(sim.handle_all_except_explicit)时,一次是在子脚本中调用sim.handleProximitySensor(proximitySensorHandle)时)。 另请参阅关于显式和非显式调用的部分。
  • 传感器子类型:选择最适合您的应用的传感器类型。 可供选择的类型有:超声波、红外线、激光、感应式和电容式。 该设置对接近传感器将如何操作没有直接影响,它将简单地丢弃一些例如未被标记为超声波传感器可检测或不可被激光检测的实体。 可以在对象公共属性中单独标记实体(选中/取消选中可检测属性部分中的任何项目)。
  • 要检测的实体:允许指定应检测的实体。 请记住,只有适当标记的可检测对象才会被检测到。
  • 显示体积参数:切换接近传感器体积对话框。 该对话框允许自定义接近传感器的检测体积。
  • 显示检测参数:打开接近传感器检测参数对话框。 该对话框允许自定义各种检测参数。
  • 检测时显示体积:当接近传感器检测到某些东西时,显示或隐藏检测体积。
  • 未检测时显示体积:当接近传感器未检测到任何内容时,显示或隐藏检测体积。
  • 感应点大小:感应点的大小。 这对计算没有影响(感应点即使显示得很大,也始终被视为一个点)。
  • 颜色:允许调整接近传感器的各种元件的颜色。
4.1.16.2.1 接近传感器对话框

  接近传感器体积对话框是接近传感器属性的一部分。 该对话框显示上次选择的接近传感器的音量设置和参数。 如果未选择任何对象,则该对话框处于非活动状态。 如果选择了多个接近传感器,则可以将一些参数从最后选择的接近传感器复制到其他选择的接近传感器(应用于选择按钮):

在这里插入图片描述

  • 卷类型:卷的类型。 支持射线、随机射线、棱锥体、圆柱体、圆盘、锥体六种类型。 下图描述了表征每个检测体积的参数:
    在这里插入图片描述

  • 面数、面数Far、细分和细分Far可以或多或少地精确地描述检测体。 更高的精度也意味着更长的计算时间。

  • 内部间隙:该参数仅适用于圆盘型和圆锥型接近传感器。 它的值可以在0到1之间变化,表示要移除的体积(按比例)。 此功能可用于通过组合多个传感器来创建非常复杂的检测体:

在这里插入图片描述

4.1.16.2.2 接近传感器检测参数对话框

  接近传感器检测参数对话框是接近传感器属性的一部分。 该对话框显示上次选择的接近传感器的各种检测参数。

在这里插入图片描述

  • 正面/背面检测:用户可以决定传感器将看到和检测三角形的哪一边。 在三角形编辑模式中,正面显示为蓝色,背面显示为红色。
  • 快速检测(近似):选择此选项后,检测过程将更快,但不再精确(即检测到的点可能不是最近的点)。
  • 有限角度检测:选择此选项后,可以指定检测光线和对象的面法向向量之间的最大角度。 在对超声接近传感器建模时,这是一个有用的功能。 超声波接近感应器通常不能看到没有足够面对感应器的表面。 如果启用并且最大角度较小,则计算时间可能会大幅增加。

在这里插入图片描述

  • 如果距离小于以下,则不允许进行检测:某些传感器(例如超声波传感器)有一个最小检测距离,此时传感器将不再工作(即要检测的对象离传感器太近)。 要模拟这一行为,只需设置检测体积的偏移量,但通过这样做,传感器仍将能够检测到位于更远的其他物体。 真正的传感器会被靠近的物体挡住它的“视野”,而不会检测到任何东西。 这可以通过指示最小检测距离(掩模距离)来建模,如果下冲,该最小检测距离将简单地禁用检测。

在这里插入图片描述

  • 随机化射线检测:随机化射线检测仅适用于随机化射线类型接近传感器。 在随机化光线检测期间,光线将以随机方式扫描锥形体积。 您可以指定传感器应检查多少随机光线(光线计数),以及触发传感器需要多少光线检测(用于触发的光线检测计数)。

4.1.17 视觉传感器

  除了接近传感器,CoppeliaSim还提供了另一种传感器:视觉传感器。 视觉传感器是可查看的对象,其操作方式与相机对象非常相似,它们将渲染其视野中的对象,并在指定的阈值过高或过低时触发检测。 可以检测可渲染实体的视觉传感器应主要在颜色、光或结构在检测过程中起作用时(例如,红外传感器,或更一般地,对光敏感的传感器(相机等)),而不是接近传感器。 但是,根据应用程序在其上运行的显卡或场景对象的复杂程度,视觉传感器可能比接近传感器慢一点。 下面说明了使用视觉传感器的应用:

在这里插入图片描述

一定不要把视觉传感器和摄像机弄混了。 以下是主要区别:

  • 视觉传感器具有固定的分辨率。 相机没有特定的分辨率(即它会自动调整到视图大小)。
  • 视觉传感器的图像内容可以通过API访问,图像处理通过视觉回调函数进行处理。 摄像头的图像内容不能通过接口直接获取。
  • 视觉传感器通常需要更多的CPU时间,并且操作速度比摄像机慢。
  • 视觉传感器只能显示可渲染对象。 相机可以显示所有对象类型。

视觉传感器通过[菜单栏–>添加–>视觉传感器]添加到场景中。

4.1.17.1 视觉传感器类型和操作模式

  视觉传感器有两种不同的类型,可以针对不同的目的进行调整:

  • 正交投影型:正交投影型视觉传感器的视场为矩形。 它们非常适合近距离红外传感器或激光测距仪。
  • 透视投影式:透视投影式视觉传感器的视场为梯形。 它们非常适合于相机类型的传感器。

在这里插入图片描述

  视觉传感器是可查看的对象,可以像摄像机对象一样透视[弹出式菜单–>视图–>将视图与选定的视觉传感器关联]。 有关更多详细信息,另请参阅页面和视图部分。

在这里插入图片描述

  视觉传感器非常强大,因为它们可以以各种灵活的方式使用。 例如,它们可以用来显示来自外部应用程序或插件的静止或运动图像。 插件还可以提供定制的图像处理算法以及评估算法(例如触发条件)。 视觉回调函数表示可以进行图像处理和生成触发器的机制(可以对触发器回调函数中的触发器做出反应)。

  视觉传感器只能渲染(和检测)可渲染实体。

4.1.17.2 视觉传感器属性

  视觉传感器属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击视觉传感器按钮以显示视觉传感器对话框(仅当最后选择的是视觉传感器时,才会显示视觉传感器按钮)。 该对话框显示上次选择的视觉传感器的设置和参数。 如果选择了多个视觉传感器,则可以将一些参数从最后选择的视觉传感器复制到其他选择的视觉传感器(应用于选择按钮):

在这里插入图片描述

  • 启用所有视觉传感器:打开和关闭所有视觉传感器的视觉传感器功能。
  • 显式处理:指示是否应显式处理传感器。 如果选中,则在调用sim.handleVisionSensor(sim.handle_all_except_explicit)时将不会处理传感器,但仅当调用sim.handleVisionSensor(sim.HandleAll)或sim.handleVisionSensor(VisionSensorHandle)时才会处理传感器。 如果用户希望在子脚本中而不是在主脚本中处理传感器,这将非常有用(如果未选中此选项,将处理传感器两次,一次是在主脚本中调用sim.handleVisionSensor(sim.handle_all_except_explicit)时,一次是在子脚本中调用sim.handleVisionSensor(VisionSensorHandle)时),另一次是在子脚本中调用sim.handleVisionSensor(VisionSensorHandle)时。 另请参阅关于显式和非显式调用的部分。
  • 外部输入:选择此选项后,视觉传感器的正常操作将会改变,以便能够处理外部图像(例如视频图像)。
  • 透视模式:允许在透视投影型和正交投影型视觉传感器之间进行选择。
  • 忽略RGB信息(更快):如果选中此选项,传感器的RGB信息(即颜色)将被忽略,以便它可以更快地运行。 如果您仅依赖传感器的深度信息,请使用此选项。
  • 忽略深度信息(更快):如果选中此选项,传感器的深度信息将被忽略,以便它可以更快地运行。 如果您不打算使用传感器的深度信息,请使用此选项。
  • Packet1为空(更快):如果选择此选项,则CoppeliaSim不会自动从获取的图像中提取特定信息,以便它可以更快地操作。 如果不打算使用API函数sim.readVisionSensor或sim.handleVisionSensor返回的第一个辅助值数据包,请使用此选项。
  • 使用本地灯光:如果启用,则在显示此视觉传感器的图像内容时,将仅激活与此视觉传感器为父对象的本地灯光(即,构建在此视觉传感器之上)。 可以在光源属性中将光源设置为本地光源。
  • 启用时显示雾:如果禁用,则如果启用雾,则此视觉传感器将不会看到任何雾。 另请参阅环境对话框。
  • 渲染模式:目前有三种模式可用:
    • OpenGL(默认):渲染对象的可见颜色通道。
    • OpenGL,辅助通道:渲染对象的辅助颜色通道。 辅助通道红色、绿色和蓝色的用法如下:红色是温度通道(0.5是环境温度),绿色是用户定义的通道,蓝色是活动发光通道。
    • OpenGL,颜色编码句柄:通过将对象的句柄编码为颜色来渲染对象。 由sim.readVisionSensor或sim.handleVisionSensor API函数返回的第一个数据包表示检测到的对象句柄(值向下舍入)。
    • POV-Ray:使用POV-Ray插件渲染图像,允许阴影(也包括柔和阴影)和材质效果(慢得多)。 插件源代码位于此处。
    • 外部渲染器:使用通过插件实现的外部渲染器。 当前的外部渲染器源代码位于此处。
    • 外部渲染器,窗口化:使用通过插件实现的外部渲染器,并在外部窗口中显示图像(仅在模拟期间)。 当前的外部渲染器源代码位于此处。
    • OpenGL3:使用由Stephen James提供的OpenGL3渲染器插件。 该插件在CoppeliaSim中提供阴影投射,这是目前在本地无法实现的。 可以通过对象的扩展字符串为每个灯光调整灯光投影和阴影,例如OpenGL3{LightProjection{NearPlane{0.1}FarPlane{10}OrthoSize{8}Bias{0.001}Normal Bias{0.005}shadowTextureSize{2048}。
    • OpenGL3,窗口化:与上面相同,但窗口化。
  • 近/远剪裁平面:传感器能够检测到的最小/最大距离。
  • 透视角度:传感器处于透视模式时检测体积的最大打开角度。
  • 正交尺寸:传感器未处于透视模式时检测体积的最大尺寸(沿x或y方向)。

在这里插入图片描述

  • 分辨率X/Y:视觉传感器捕获的图像所需的X/Y分辨率。 根据您的应用程序仔细选择分辨率(高分辨率会导致运行速度变慢)。 对于较旧的显卡型号,实际分辨率可能不同于此处指示的分辨率(较旧的显卡型号仅支持2^n的分辨率,其中n是0、1、2等)。
  • 要检测的实体:允许指定应呈现的实体。
  • 调整默认图像颜色:允许指定在未渲染的区域中应使用的颜色。 默认情况下,使用环境雾颜色。
  • 对象大小X/Y/Z:视觉传感器的身体部分的大小。 这没有任何功能效果。
  • 未检测时显示音量:如果选中,则在传感器未触发时显示检测音量。
  • 检测时显示音量:如果选中,则在传感器触发时显示检测音量。
  • 对象颜色:允许调整视觉传感器的各种颜色。

4.1.18 压力传感器

  力传感器最初是两个形状之间的刚性连接,能够测量传递的力和扭矩。 力传感器的刚度是有条件的,因为如果出现特定条件(例如,如果力或扭矩阈值超标),力传感器可能会损坏。 下图说明了使用力传感器的应用程序:

在这里插入图片描述

  力传感器测量一对表示传感器沿x、y和z轴的力以及传感器围绕x、y和z轴的扭矩的3个值:

在这里插入图片描述

  最初,力传感器充当刚性连杆。 但是,在仿真过程中,当指定力/扭矩阈值过高或满足某些其他用户定义的条件时,力传感器可能会损坏。 下图说明了力传感器的损坏状态:

在这里插入图片描述

  力传感器只有在动态启用的情况下才能在模拟期间运行。 有关动态启用力传感器的详细信息,请参阅设计动态模拟一节。 运动类型也能够测量力或扭矩,但是只能沿/围绕其z轴。

  力传感器通过[菜单栏–>添加–>力传感器]添加到场景中。

4.1.18.1 压力传感器属性

  力传感器属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击力传感器按钮以显示力传感器对话框(仅当最后选择的是力传感器时,才会显示力传感器按钮)。 该对话框显示上次选定力传感器的设置和参数。 如果选择了多个力传感器,则可以将一些参数从上一个选定力传感器复制到其他选定力传感器(应用于选择按钮):

在这里插入图片描述

  • 滤波:当力传感器采集力或扭矩数据时,对其进行累加和滤波,以获得较小的抖动值。
  • 样本大小:应该用于筛选器的值数。 1将不过滤(原始输出)。
  • 平均值:如果选中,则力传感器将提供平均值(样本大小值的平均值)。
  • 中值:如果选择此选项,则力传感器将提供中值(样本大小值的中值)。
  • 触发设置:此部分允许设置一些自动触发条件。 触发器将调用触发器回调函数(例如,在该函数中可以断断力传感器)。
  • 力阈值:激活阈值违规的力向量的振幅。
  • 扭矩阈值:激活阈值违规的扭矩矢量的幅度。
  • 连续突破阈值:在触发之前允许传感器连续违反阈值的次数。
  • 对象大小:传感器的3D表示的大小。 这没有任何功能效果。
  • 调整颜色A/B:允许调整力传感器的两种颜色。

4.1.19 路径

  路径是在空间中定义路径或轨迹的对象。 它可以用于各种任务,如下图所示:

在这里插入图片描述

  路径对象可以通过[菜单栏–>添加–>路径]添加到场景中。 默认情况下有两个基本路径可用:简单线段类型路径或圆形类型路径。 它们可以定向或缩放,但通常这是不够的。 用户有几种可选方案来生成自定义路径对象:

  • 从文件导入路径。
  • 编辑路径。
  • 从形状边缘生成路径。 有关详细信息,请参见边编辑模式。

  路径本身并不能起到多大作用。 它们通常与假人和其他对象一起使用,以获得所需的效果。 要沿路径移动对象,首先需要为该路径指定一个虚拟对象,然后可以将该对象附加到将跟随该路径的固有运动的虚拟对象。 有关更多详细信息,请参阅有关虚拟对象的部分。

  路径是可渲染的对象,这意味着视觉传感器可以看到路径。 但是,需要启用路径整形功能。 可以在对象公共属性中更改路径的可呈现属性。

  一些路径数据可以由图形对象记录。 有关如何记录路径数据的详细信息,请参阅图形和图形数据流类型。

4.1.19.1 路径控制点和Bezier点

  路径具有位置和方向组件(或通道),并且还可以另外具有描述速度剖面的组件。 路径由控制点定义,这些控制点将路径描述为一系列链接的线段。 仅当选择路径时,控制点才可见:

在这里插入图片描述

  路径的第一个控制点(起点)表示为球体,其余控制点表示为立方体。 路径可以是开放的,也可以是闭合的。 当它关闭时,它会变成循环的。

在这里插入图片描述

  每个控制点都具有可以围绕其附近更详细地描述路径的属性:每个控制点可以描述是否以及如何计算Bezier曲线。 下面说明了此属性:

在这里插入图片描述

  默认情况下,Bezier点始终可见(未选择对象时也是如此),并显示为指示Bezier点(实际上是具有方向的点)的x轴、y轴和z轴的红绿蓝小箭头。 贝塞尔曲线部分由3个参数描述,如下图所示:

在这里插入图片描述

  Bezier插值因子指示Bezier曲线部分的开始和结束位置,Bezier点计数指示曲线的详细程度(或平滑程度)。 从技术上讲,Bezier点数为1将禁用Bezier曲线插值机制,但为简单起见,控制点随后称为Bezier点。

  可以在路径编辑模式中手动调整控制点的位置和方向。 但是,不能单独调整Bezier点方向。 它相当于自动计算出来的。 默认情况下,Bezier点的方向将遵循路径曲率(如果启用了自动方向选项),否则将使用控制点的方向进行插值,如下图所示:

在这里插入图片描述

4.1.19.2 路径位置和长度计算方法

  沿着路径对象,可以定义固有位置。 该位置也称为路径位置,不同于路径对象的位置。 虽然路径对象的位置是路径对象原点的位置(在选择路径时显示为白色线框立方体),但是路径位置或更确切地说,内在路径位置是沿路径的位置值,如下图所示:

在这里插入图片描述

  路径的Bezier点可以是不同的或重合的:设想一个焊接机器人,其末端执行器是焊接设备的尖端;在两个连续的Bezier点之间,末端执行器可以:

  • 在不更改方向的情况下执行平移(即沿着一条直线)(两个Bezier点不同,但方向相同)。
  • 执行平移并更改方向(两个Bezier点不同且方向不同)。
  • 在不更改位置的情况下执行旋转(即更改方向)(两个Bezier点重合,但方向不同)。

  此外,在某些情况下,我们希望焊枪遵循预定义的路径,在某个特定位置暂停(例如处理较大的焊点),然后沿着路径继续。 为了正确处理上述3种情况和特殊的暂停情况,重要的是能够唯一地标识沿路径的任何位置*(广义的位置)(即路径位置*),以及路径长度*(广义的长度)。 为此,用户可以在几种位置计算方法中进行选择:

  • 路径位置*被描述为沿路径的累积线性变化。 路径长度*由以下公式给出: ∑ Δ l v ⋅ d \sum \Delta l_v \cdot d Δlvd
  • 路径位置*被描述为沿路径的累积角度**变化。 路径长度*由以下公式给出: ∑ Δ α ⋅ c + Δ l v ⋅ d \sum \Delta \alpha \cdot c + \Delta l_v \cdot d Δαc+Δlvd
  • 路径位置*被描述为沿路径的累积(线性变化+角度**变化)。 路径长度*由以下公式给出: ∑ Δ l v + Δ α ⋅ c + Δ l v ⋅ d \sum \Delta l_v + \Delta \alpha \cdot c + \Delta l_v \cdot d Δlv+Δαc+Δlvd
  • 路径位置*被描述为沿路径的累积最大值(线性变化、角度**变化)。 路径长度*由以下公式给出:$ \sum max(\Delta l, \Delta \alpha \cdot c + \Delta l_v \cdot d)$
  • 路径位置*被描述为沿路径的累积(如果不是零,则为线性变化,否则为角度**变化)。 路径长度*由以下公式给出: ∑ i f ( Δ l ≠ 0 ) t h e n ( Δ l + Δ l v ⋅ d ) e l s e ( Δ α ⋅ c + Δ l v ⋅ d ) \sum if(\Delta l \neq 0) then (\Delta l + \Delta l_v \cdot d) else (\Delta \alpha \cdot c + \Delta l_v \cdot d) if(Δl=0)then(Δl+Δlvd)else(Δαc+Δlvd)
  • 路径位置*被描述为沿路径的累积(如果不是零,则为角度**变化,否则为线性变化)。 路径长度*由以下公式给出: ∑ i f ( Δ α ⋅ c ≠ 0 ) t h e n ( Δ α ⋅ c + Δ l v ⋅ d ) e l s e ( Δ l + Δ l v ⋅ d ) \sum if (\Delta \alpha \cdot c \neq 0) then (\Delta \alpha \cdot c + \Delta l_v \cdot d) else (\Delta l + \Delta l_v \cdot d) if(Δαc=0)then(Δαc+Δlvd)else(Δl+Δlvd)
  • 路径位置*被描述为沿路径的(线性变化、角度**变化)的累积欧几里得距离。 路径长度*由以下公式给出: ∑ Δ l 2 + ( Δ α ⋅ c ) 2 + Δ l v ⋅ d \sum \sqrt{\Delta l^2 + (\Delta \alpha \cdot c)^2} + \Delta l_v \cdot d Δl2+(Δαc)2
    +
    Δlvd

  其中, Δ l \Delta l Δl和$ \Delta \alpha$分别是两个连续贝塞尔点之间的线性变化和角度变化。 角度**变化是规则的角度变化乘以角度系数C。C称为角度到线性的转换系数,它允许将角度值与线性值组合在一起。 这意味着位置*沿路径或路径长度*总是以线性单位(例如米)给出,而与上面选择的位置计算方法无关。

  默认情况下,用红色标记的术语为零。 该术语可以被视为贝塞尔(Bezier)点(或路径控制点)的虚拟距离或第四坐标(即,每个贝塞尔点随后将由方向和位置(x,y,z,w)定义,其中w是第四坐标)。 这对于存档路径上的暂停点非常有用。 是两个连续Bezier点之间的虚拟距离变化。 D是虚拟距离变化的比例因子(例如,如果d加倍,则所有暂停点将执行两倍长的暂停持续时间)。 为简化起见,在下面的内容中我们将不再提及此术语,并假定它为零。

  以下示例阐明了位置和长度计算的概念:

在这里插入图片描述

在这里插入图片描述

  要将路径上特定点的移动暂停存档,请执行以下操作:创建3个完全相同的路径控制点(位置和方向完全重合),并为中间控制点指定不同于零的虚拟距离值。 在以下示例中,3个重合点处的虚拟距离为2(第一个重合控制点和中间重合控制点之间的虚拟距离为1,中间重合控制点和第三个重合控制点之间的虚拟距离为1)。 如果对象以每秒1米的速度沿路径移动,则它将在重合控制点存档2秒的暂停:

在这里插入图片描述

  应根据应用情况仔细选择路径位置/长度计算方法。

4.1.19.3 沿路径运动

  当前固有路径位置在路径上显示为红色球体(如果启用了路径位置显示)。 在使用sim.setPathPosition进行模拟期间,可以随时控制球体沿路径的位置。 确保您了解路径位置或路径长度是如何计算的。
  要实际使对象沿路径移动,首先需要将对象附加到虚拟对象,然后指定虚拟对象跟随路径位置(具有可选偏移)。 有关更多详细信息,请参阅有关虚拟对象的部分。
  或者,可以使用sim.postPath或sim.getPositionOnPath、sim.setObjectPosition、sim.getOrientationOnPath和sim.setObjectOrientation命令使对象跟随路径。

4.1.19.4 路径整形

  路径是一个纯功能对象,没有任何花哨的视觉属性。 然而,有时人们想要显示更精细的轨迹(例如隧道、铁轨等)。 或者从路径生成网格(即形状)。 为此,模拟器提供路径整形功能,可以在路径属性的路径整形部分启用或禁用该功能。 路径成形的工作原理是将截面轮廓放置在路径上的不同位置,如下图所示:

在这里插入图片描述

  路径整形参数可通过单击显示路径整形对话框按钮进行调整:

在这里插入图片描述

  • 启用路径整形:启用或禁用路径整形功能。
  • 跟随全路径方向:如果启用,则使截面轮廓遵循每个贝塞尔点方向。 根据路径配置,这可能会导致高度扭曲的网格。 如果禁用,截面轮廓将尝试保持更平滑的连续性。
  • 元素最大长度:指示用于再现截面的距离。 可以将其视为生成的网格的粗糙度系数。 指定远小于最小Bezier点距离的值几乎没有意义。
  • 调整颜色:允许调整网格颜色。
  • 生成图形:单击此按钮将生成与路径成形网格相同的图形对象。 如果要编辑生成的网格,或者希望生成的网格在模拟中主动交互(例如,通过碰撞检测或距离计算),这将非常有用。
  • 类型:指示要使用的截面轮廓类型。 如果没有一种内置类型适合您的应用程序,请选择“用户定义”并在“坐标”窗口中编辑坐标。

在这里插入图片描述

  • 坐标(x/y对):显示截面轮廓的坐标。 如果选择了用户定义的类型,则可以编辑坐标。
  • 最后一个坐标链接到第一个:选中后将关闭截面轮廓。 如果截面类型不是用户定义的,则不可用。
  • 比例因子:允许缩放截面轮廓(即指示的坐标)。

4.1.19.5 路径属性

  路径属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击路径按钮以显示路径对话框(仅当最后选择的是路径时,才会显示路径按钮)。 该对话框显示上次选择的路径的设置和参数。 如果选择了多条路径,则可以将一些参数从上次选择的路径复制到其他选择的路径(应用于选择-按钮):

在这里插入图片描述

  • 距离单位:路径位置或路径长度的计算方法。
  • 显示路径整形对话框:切换路径整形对话框。
  • 显示点的方向:显示每个Bezier点的x、y和z轴。
  • 显示路径线:显示连接所有Bezier点的线。
  • 在路径上显示当前位置:显示指示当前路径位置(沿路径的当前位置)的红色球体。
  • 调整线条颜色:允许调整路径的颜色(即线条颜色)。 这与通过路径整形获得的网格的颜色不同。
  • 线条大小:连接所有Bezier点的线条的宽度。
  • 控制点的大小:表示控制点的立方体的大小。 仅当选择路径或处于路径编辑模式时,控制点才可见。

4.1.19.6 导入导出路径

  路径导入/导出功能对CSV文件(逗号分隔值)进行操作,这些文件可以使用简单的文本编辑器创建或读取,但也可以轻松导入/导出到Microsoft Excel等应用程序中。

导入路径

  CoppeliaSim的导入功能([Menu Bar–>File–>Import–>Path from CSV…])逐行读取值,其中每行对应一个控制点。 每行应按以下方式格式化:

x,y,z,alpha,beta,gamma,relativeVelocity,BezierPointCount,interpolationFactor1,interpolationFactor2,
  virtualDistance,auxiliaryFlags,auxiliaryChannel1,auxiliaryChannel2,auxiliaryChannel3,auxiliaryChannel4

在:

  • (x,y,z)表示控制点的位置(以米为单位。
  • (Alpha、Beta、Gamma)表示以度为单位的Euler角指定的控制点方向。 默认值为(0,0,0)。
  • 相对速度已弃用。 设置为1.0。
  • BezierPointCount是控制点所需的贝塞尔点数。 默认值为1。
  • InterpolationFactor1和InterpolationFactor2是路径控制点和Bezier点部分中介绍的插值因子。 默认值为0.5。
  • VirtualDistance:添加到该控制点位置的路径长度的虚拟距离值,另请参见路径位置或路径长度计算方法。 默认值为0.0。
  • 辅助标志:可用于各种目的的标志,可通过sim.getDataOnPath函数查询。 默认值为0。
  • 辅助通道1-4:可用于各种目的的值,可通过sim.getDataOnPath函数查询。 默认值为0.0。

除前3个值(控制点位置坐标)外,所有其他值都可以省略,在这种情况下将应用默认值。

导出路径

  通过选择路径,然后单击[菜单栏–>文件–>导出–>所选路径为CSV…],可以导出路径的控制点。 这种情况下的导出格式与前面描述的路径导入格式相同。

  路径的Bezier点也可以通过点击路径,然后点击[Menu Bar–>File–>Export–>Selected Path‘s Bezier Curve as CSV…]导出。 在这种情况下,创建的文件(导出的文件)中的每一行都对应于一个贝塞尔点,并包含下列值:

x,y,z,alpha,beta,gamma,relativeVelocity,virtualDistance,auxiliaryFlags,auxiliaryChannel1,auxiliaryChannel2,
  auxiliaryChannel3,auxiliaryChannel4

4.1.19.7 路径编辑模式

  初步说明:路径编辑模式是编辑路径对象的一种方便且功能齐全的方式。 但是,可以移动和删除单个路径点,而无需进入路径编辑模式以进行最小限度的路径修改(选择单个路径点时,请确保未选择路径以外的任何其他对象)。

  单击相应的工具栏按钮即可访问路径编辑模式:

在这里插入图片描述

  仅当选择路径时,上述工具栏按钮才处于活动状态。 在路径编辑模式下,窗口中通常显示场景层次的部分用于将路径控制点显示为列表。 与层次窗口中的对象一样,可以使用鼠标选择列表中的项目。

在这里插入图片描述

  现在可以像选择常规对象一样选择各个控制点。 上次选定的控制点显示为白色,其他选定的控制点显示为黄色,未选定的控制点显示为蓝色。 以类似的方式,可以使用鼠标直接平移控制点,使用工具栏的对象/项目平移工具栏按钮将垂直平面中的选定控制点平移到视图方向:

在这里插入图片描述

  在路径编辑模式下,将显示路径编辑模式对话框:

在这里插入图片描述

  • 路径闭合:如果选择此选项,则路径的最后一个控制点将链接到其第一个控制点,以闭合路径并使其操作循环。 要闭合一条路径,至少需要3个控制点。
  • 路径是平坦的:如果选择此选项,则所有控制点(以及随后的所有Bezier点)将被约束到路径对象的局部参考帧的z=0平面。
  • 自动定向:如果启用,则将自动计算所有控制点和Bezier点的方向,以便使点的z轴沿着路径,并且其y轴指向其曲率的外侧(如果启用了Keep x Up,则y轴不会受到特别限制)。 如果禁用,用户将确定控制点的方向,并且贝塞尔曲线点的方向将根据路径控制点的方向进行插值。
  • 保持x向上:如果选中此选项,则自动定向功能将沿路径对齐每个Bezier点的z轴,并保持其x轴指向路径对象的z轴。
  • 清除选择:清除控制点的选择。
  • 反转选择:反转控制点的选择状态。
  • 生成虚拟对象:在选定控制点的位置生成虚拟对象。
  • Bezier插值因子1/2:有关详细信息,请参见控制点和Bezier点部分。
  • Bezier点计数:有关详细信息,请参阅控制点和Bezier点部分。
  • 虚拟距离:有关详细信息,请参阅沿路径移动部分。
  • 辅助标志:可用于各种目的的标志,可通过sim.getDataOnPath函数查询。
  • 辅助通道1-4:可用于各种目的的值,可通过sim.getDataOnPath函数查询。

  要精确定位控制点,请使用坐标和变换对话框。 如果要编辑控制点的方向,请确保禁用路径的自动方向选项(默认情况下启用该选项)。

  常规组合键(即ctrl-c、ctrl-v、delete和ctrl-x)支持复制/粘贴/删除/剪切操作。 确保主视图具有焦点,以便按键生效。 如果未选择控制点,粘贴操作会将复制的控制点粘贴到控制点列表的开头,否则将粘贴在所选控制点之后(请确保在此阶段选择的控制点不超过一个)。 也可以通过弹出菜单或通过[主菜单–>编辑]访问相同的复制/粘贴/删除/剪切功能。 其他操作包括:

  在路径开始处插入新路径点/选择后插入新路径点:如果没有选择控制点,则在路径开始处插入新控制点,否则在当前选择之后插入新控制点(在这种情况下,请确保选择的控制点不超过一个)。

  从Bezier曲线生成新路径:使用当前路径的Bezier点生成新的路径对象,即新路径的控制点将是当前路径的Bezier点。

4.1.20 OC树

  OC树是表示空间分区的对象。 它由树数据结构组成,其中每个节点正好有八个子节点。 占用的叶节点被表示为体素。 OC树可用于提供形状或点云的简化表示,或可用作占用网格/空间:

在这里插入图片描述

OC树是可碰撞、可测量和可检测的对象。 这意味着OC树:

  • 可用于与其他可碰撞物体的碰撞检测。
  • 可用于与其他可测量对象的最小距离计算。
  • 可以被接近传感器检测到。

OC树可以通过[菜单栏–>添加–>OC树]添加到场景中,并通过OC树属性进行编辑。

CoppeliaSim中提供的OC树计算(即碰撞、距离和接近传感器计算)也可通过Coppelia几何例程作为独立例程提供。

4.1.20.1 OC树属性

  OC树属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击OC树按钮以显示OC树对话框(仅当最后选择为OC树时,才会显示OC树按钮)。 该对话框显示上次选择的OC树的设置和参数:

在这里插入图片描述

  • 体素大小:OC树体素的大小。 大小越小,OC树数据结构使用的内存就越多。
  • 插入选定的可见对象:允许根据选定的可见对象插入体素。 仅考虑假人、形状、OC树和点云。 选择要插入的所有对象,然后选择最后一个目标OC树对象。
  • 减去选定的可见对象:允许基于选定的可见对象移除体素。 仅考虑假人、形状、OC树和点云。 选择要插入的所有对象,然后选择最后一个目标OC树对象。
  • 清除OC树:从OC树中移除所有体素。
  • 体素具有随机颜色:每个体素将具有随机颜色。
  • 显示OC树结构:显示OC树数据结构,主要用于调试。
  • 颜色是发射的:体素将以发射颜色显示。
  • 显示点而不是体素:对于包含大量体素的OC树,显示可能相当慢。 在这种情况下,您可以显示像素体素,而不是立方体素。
  • 调整下次插入的颜色:允许选择新颜色,该颜色将用于新的体素插入。

4.1.21 点云

  点云是充当基于OC树的点容器的对象:

在这里插入图片描述

点云是可碰撞、可测量和可检测的对象。 这意味着点云:

  • 可用于与其他基于体积的可碰撞对象(如OC树)的碰撞检测。
  • 可用于与其他可测量对象的最小距离计算。
  • 可以被接近传感器检测到。

点云可以通过[菜单栏–>添加–>点云]添加到场景中,并通过点云属性进行编辑。

CoppeliaSim中提供的点云计算(即碰撞、距离和接近传感器计算)也可通过Coppelia几何例程作为独立例程提供。

4.1.21.1 点云属性

  点云属性是场景对象属性对话框的一部分,该对话框位于[菜单栏–>工具–>场景对象属性]。 也可以通过双击场景层次中的对象图标或单击其工具栏按钮来打开该对话框:

在这里插入图片描述

  在场景对象属性对话框中,单击点云按钮以显示OC树对话框(仅当最后选择的是点云时,才会显示点云按钮)。 该对话框显示上次选定的点云的设置和参数:

在这里插入图片描述

  • 请勿使用OC树计算。 结构:默认情况下,点云使用OC树状计算结构来实现高效的点操作。 此结构可能会减慢插入点和移除点的速度。 如果启用此项目,则插入点的效率将会更高,但点云将不再可碰撞、可测量或不可检测,并且某些其他操作也可能会受到限制。 您始终可以在稍后阶段切换此项目,或通过sim.setPointCloudOptions进行切换。
  • 最大体素大小:将包含点的OC树体素的最大大小。 大小越小,此点云所基于的OC树数据结构使用的内存就越多。
  • 最大点数/体素:单个OC树体素可以包含的最大点数。 如果需要在这样的体素中存储更多的点,则它将被分割为8个子体素,直到满足约束。 为了有效地进行碰撞检测、距离计算和邻近传感器检测,建议将大约10-20个点存储在单个体素中。
  • 插入选定的可见对象:允许基于选定的可见对象插入点。 仅考虑假人、形状、OC树和点云。 选择要插入的所有对象,然后选择最后一个目标点云对象。 形状先前将转换为具有指定生成分辨率的临时OC树。 通过指定用于决定是否插入点的最小距离公差,插入公差项允许避免重复点。 如果插入公差>0.0,则点插入将较慢。
  • 减去选定的可见对象:允许根据选定的可见对象减去点。 仅考虑假人、OC树和点云。 选择要减去的所有对象,然后选择最后一个目标点云对象。 虚拟和点云将使用相减公差值来标识要删除的点。
  • 清除点云:从点云中删除所有点。
  • 点具有随机颜色:每个点将具有随机颜色。
  • 显示OC树结构:显示底层OC树数据结构,主要用于调试。
  • 颜色是发光的:点将以发光颜色显示。
  • 点云显示比率:包含大量点的点云可能会减慢渲染速度。 通过设置小于1的比率,将为每个包含点的OC树体素显示较少数量的点。 这仅对显示/渲染的图像有影响。
  • 点大小:点的大小,以像素为单位。
  • 调整下次插入的颜色:允许选择将用于新点插入的新颜色。

4.2 集合

  集合是用户定义的场景对象集合。 集合必须至少包含一个对象,并且被视为实体(对象也是实体)。 例如,当引用多个对象(例如机器人)时,集合非常有用。 CoppeliaSim不仅支持基于对象的计算,还支持基于集合的计算。 例如,碰撞检测模块允许登记以下冲突对:(集合A;对象B)。 然后,碰撞检查算法将检查集合A(组成它的任何对象)是否与对象B冲突。

  集合是可碰撞、可测量、可检测和可呈现的实体。 这意味着集合:

  • 可用于针对其他可碰撞实体的碰撞检测。
  • 可用于与其他可测量图元的最小距离计算。
  • 可以被接近传感器检测到。
  • 可以被视觉传感器检测或看到。

  即使集合是可碰撞、可测量、可检测和可渲染的,这也不意味着该集合中包含的所有对象都是可碰撞、可测量、可检测或可渲染的。

  • 在碰撞检测期间,仅针对另一个可碰撞实体测试集合(集合的子集)的可碰撞对象。
  • 在距离测量期间,仅针对另一个可测量实体测量集合(集合的子集)的可测量对象。
  • 只有集合(集合的子集)的可检测对象才能被接近传感器检测。
  • 视觉传感器只能检测到集合(集合的子集)的可渲染对象。

  但是,集合可以覆盖其对象的可碰撞、可测量、可检测和可呈现属性。 有关更多详细信息,请参阅收集对话框。

  集合必须至少由一个元素组成。 支持以下元素:

  • 所有场景对象。
  • 松散的物体。
  • 树,包括基座。
  • 树,不包括基部。
  • 链条,含尖端。
  • 链条,不包括尖端。
  • 上述元素的组合。

所有场景对象

  该元素由所有场景对象组成,如下图所示(箭头表示子对象):

在这里插入图片描述

  上面的元素没有任何定义对象,不能单独存在。 将其与其他类型的图元组合。

松散物体

  这是场景对象的松散定义组合,如下图所示(箭头表示子对象):

在这里插入图片描述

  在上面的示例中,如果从场景中移除对象2、对象3、对象4和对象7,则元素将不再有效,并且也将被移除。 对象2、对象3、对象4和对象7是元素的定义对象。

树,包括基座

  这包括对象及其所有子对象(以及子对象的子对象等)。 如下图所示(箭头表示子对象):

在这里插入图片描述

  在上面的示例中,如果从场景中移除对象1,则该元素将不再有效,并且也将被移除。 对象1是元素的定义对象。

树,不包括基部

  这包括所有子对象(以及子对象的子对象等)。 没有对象本身的对象,如下图所示(箭头表示子对象):

在这里插入图片描述

  在上面的示例中,如果从场景中移除对象1,则该元素将不再有效,并且也将被移除。 对象1是元素的定义对象。

链条,包括尖端

  它包括一个对象及其所有父对象(以及父对象的父对象等)。 如下图所示(箭头表示子对象):

在这里插入图片描述

  在上面的示例中,如果从场景中移除对象6,则该元素将不再有效,并且也将被移除。 对象6是元素的定义对象。

链条,不包括尖端

  这包括对象的所有父对象(以及父对象的父对象等),而不包括对象本身,如下图所示(箭头表示子对象):

在这里插入图片描述

  在上面的示例中,如果从场景中移除对象6,则该元素将不再有效,并且也将被移除。 对象6是元素的定义对象。

元素组合

  在集合中,元素可以是加法元素,也可以是减法元素。 下图显示了一个由三个元素定义的集合:

在这里插入图片描述

  在上面的示例中,结果集合包含两个对象。 如果将新对象附加到对象2或对象4,则不会将其包括在集合中(因为它将是元素2中定义的树的一部分,元素2是减法的)。 如果新对象成为对象5、对象3或对象1的父级,则不会将其包括在集合中(因为它将是元素3中定义的链的一部分,元素3是减法的)。 否则,新对象将自动包括在集合中。 集合是动态实体,会自动重新计算或更新。 当复制或保存对象(也是集合的定义对象)时,也会自动复制或保存相关的集合。

  明智地使用集合,并且只有在找不到其他选择的情况下才这样做。 例如,如果要测试移动机器人是否与场景中的所有其他对象发生碰撞,则可以定义机器人集合(树从机器人基础开始)和障碍集合(所有场景对象-树从机器人基础开始),然后针对收集障碍测试收集机器人是否存在碰撞。 这可以很好地工作,但实际上并不需要障碍物集合:实际上,碰撞检测模块允许针对场景项目中的所有其他可碰撞对象指定检查。

  当选择了集合中包含的所有对象时,集合将以粉色(可以在用户设置对话框中调整的默认颜色)突出显示,如下图所示。

在这里插入图片描述

  可以在集合对话框中定义集合。

4.2.1 集合对话框

  集合对话框位于[菜单栏–>工具–>集合]。 或者,也可以通过其工具栏按钮进行访问:

在这里插入图片描述

  • 添加新集合:添加新的空集合。 始终尝试为集合指定唯一的名称,以便在与其他模型合成场景时不会发生名称冲突。 可以在集合列表中重命名集合。
  • 可视化所选集合:允许通过选择场景中的所有相关对象来可视化所选集合。
  • 对选定集合的操作:对话框的此部分允许您向选定集合添加各种对象或从选定集合中减去各种对象。 添加新集合时,它最初是空的。 然后可以添加或减去单个对象(选定对象)、层次树中包含的所有对象(选定对象树)、链中包含的所有对象(选定对象链-即选定对象的所有父对象和祖先)或场景中的所有对象(所有对象)。
  • 组成元素和属性:组成所选集合的元素列表。 可以使用DELETE键删除单个元素。
  • 集合覆盖可碰撞、可测量、可渲染和可检测属性:允许覆盖集合中对象的主要属性(可碰撞、可测量、可渲染和可检测)。 例如,如果您不希望某些对象是可检测的,除非是罕见或特殊情况,则只需禁用这些对象的可检测属性(请参阅对象公共属性),然后在启用此项的情况下将这些对象分组到集合中。 现在,当且仅当这些对象被引用为您刚才定义的集合时,才能检测到它们(换句话说,只有当您尝试检测它们的集合时才能检测到它们)。

欢迎一键三连,评论或者私信发邮箱地址即可,我会定期把文档分享给大家,资源先不进行更新了,今天会发第一波,时间有限望理解。 – 20220902

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25999.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信