v-rep---script-function

作用,实现,参数讲解。

script-function标签

作用

问题:如何在插件的接口中调用lua脚本中定义的函数?

用于声明一个函数,这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数,并且返回函数执行结果。

script-funciton声明的函数在哪被调用

只要设置好需要的输入参数,可以在插件的任意合理位置调用。

function内部在c++中实现

就是实现脚本函数的调用,并且获取返回值。

创建栈帧的作用:

传递函数的参数和返回值。

将脚本函数需要的参数传入栈帧,脚本函数执行时从栈帧获取输入的参数;

脚本函数执行完成后将返回值写入栈帧,调用者可以从栈帧中获取返回值。

怎么样传递脚本函数需要的参数

通过script-function声明的函数的in参数;

scriptId要怎么获取

所有的插件接口的in参数都会有一个SScriptCallBack类型的”_“成员,这个成员中就有可以直接从这个

怎么样获取脚本函数返回的值

eg:

<script-function name="testCallback">
...
</script-function>

因为调用testCallback函数之前,我们是需要先创建in和out变量的,所以testCallback函数返回之后,如果执行的脚本函数有返回值,只需要从out中获取即可。

sim::callScriptFunctionEx

这个是v-rep提供的调用脚本函数的接口。

参数解析

  • scriptHandle:

需要调用的脚本函数所在的lua脚本的脚本句柄。

也就是说第二个参数(脚本函数名),必须要在scriptId标识的lua脚本文件中。

  • functionName:

被调用的脚本函数名。

  • stackId:

这个参数是一个栈帧的id,这个栈用来存放传递脚本函数需要的参数和脚本函数执行返回的值。

这个参数以及栈我们不用自己传递,script-funciton生成的函数会自己生成完成传递。

官网函数说明

函数链接

其实xml中使用script-function标签,最重要的就是要实现一个c++函数,内部通过调用sim::callScriptFunctionEx这个接口调用lua语言脚本(这里只讲lua这种脚本)函数,并执行脚本函数,返回脚本函数执行的返回值。

案例

插件:

simTest

simTest.lua脚本文件:

因为加载这个simTest插件时,执行的是simTest.lua脚本,我们需要调用的脚本函数也要在这个文件里.

lua:

local simTest = loadPlugin 'simTest';
function testScriptFunc(str)
    print("You call script function successfully ,str="..str)
    m_str="This is return from script function"
    return m_str
end
(require 'simTest-typecheck')(simTest)
return simTest

xml:

    <command name="testCallback">
        <params>
          <param name="call_str" type="string" />
        </params>
        <return>
          <param name="ret" type="string" />
        </return>
    </command>
    <script-function name="callScriptFunc">
      <params>
        <param name="script_str" type="string" />
      </params>
      <return>
        <param name="ret" type="string" />
      </return>
    </script-function>

pugin.cpp

void testCallback(testCallback_in *in,testCallback_out *out){
    callScriptFunc_in in_args;
    callScriptFunc_out out_args;
    in_args.script_str=in->call_str;
    if(callScriptFunc(in->_.scriptID,"testScriptFunc",&in_args,&out_args)) out->ret=out_args.ret;
  }

v-rep调用结果:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值