子脚本(child stript)

子脚本(child stript)

子脚本是一个仿真脚本。CoppeliaSim每个场景会支持不限数量的子脚本。每个子脚本代表用Lua编写的一小部分例程集合,允许处理模拟中的特定函数。子脚本被附加到(或关联到)场景对象上,它们可以很容易地从场景层次结构中的脚本图标中识别出来。

在这里插入图片描述

双击脚本图标,就可以改变脚本的特性,或者将脚本通过脚本对话框与其他物体连接起来。通过选择对象,您可以将新的子脚本附加到对象上,[menu bar -->Add -->Associated child script]。

子脚本与场景对象的关联具有重要和积极的结果:

  • 很好的移植性:子脚本将会和他们相连的物体一起进行保存/加载。通过使用子脚本,就可以创建不依赖任何系统特定接口的可移植的代码和仿真模型。一个功能完整的模型可以包含在一个单独的文件中(不需要修改就可以在不同的平台上使用),这不是依赖于插件来控制模型的情况。此外,出于同样的原因,依赖于子脚本的模型不需要长期维护(例如,一个新的操作系统版本不需要你调整代码的一部分或重新编译,正如你在使用插件时可能需要做的那样)。
  • 固有的可伸缩性:如果与子脚本关联的物体被复制,那么它的子脚本也会被复制。复制的子脚本的内容将与原始子脚本的内容相同,但是复制的子脚本将会知道被复制并正确重定向对象访问(如果原来的子脚本正在访问“robot”,那么复制的子脚本将自动在“robot”后面附加一个名称后缀,以便访问复制的“robot”,而不是原来的那个)。要了解更多细节,请参阅关于以编程方式访问通用类型对象的部分。自动名称后缀调整允许复制对象和行为,而不必重写/调整任何代码。
  • 不同的模型版本之间没有冲突:如果您修改一个给定模型的子脚本(例如,根据您的需要定制它),这将不会对其他类似的模型产生影响。当依赖于插件而不是子脚本进行模型控制时,这是一个更加关键的方面:使用插件时,总是冒着与以前的插件版本发生冲突的风险。
  • 非常容易与模拟回路同步:子脚本可以运行线程和非线程。即使是子脚本的线程版本也可以很容易地与模拟回路同步,这是一个非常有用的特性。

子脚本有两种类型:非线程子脚本和线程子脚本:(左边是非线程,右边是线程)

在这里插入图片描述

非线程子脚本

非线程子脚本应该包含一组系统回调函数。并且不应该被阻塞。这意味着它们每次被调用时,都会执行一些任务并返回控制。如果没有返回控制,整个模拟会停止。非线性子脚本函数会在每个仿真step被主脚本(主脚本的驱动和传感函数)调用至少两次。系统还将在适当的地方调用其他系统回调函数(比如在子脚本初始化和清除时)。在任何可能的情况下,都应该选择非线程化的子脚本而不是线程化的子脚本。

非线程子脚本遵循精确的调用或执行顺序:默认的,子脚本以叶对象(或无子对象)开始,以根对象(或无父对象)结束。命令sim.handleChildScripts由默认主脚本调用,处理最重要的系统回调函数:想象一个自动门模拟模型的例子,一个接近度传感器在前面,后面允许检测靠近的人。当人离得足够近,门会自动打开。下面的代码就是关于上面粒子的一个典型的非线程子脚本

function sysCall_init()
    sensorHandleFront=sim.getObjectHandle("DoorSensorFront")
    sensorHandleBack=sim.get
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值