1. 程式人生 > 其它 >Swift5學習之旅之UITextView、UITextField

Swift5學習之旅之UITextView、UITextField

技術標籤:vrep

2020年1月30日:

擴充套件API的使用

我們對比基於B0的遠端API及常規API就會發現,遠端得比常規的少很多可能只有不到四分之一,那如果我們要使用遠端不提供的API就只能通過擴充套件區實現,官方教材介紹有兩種方法:https://blog.csdn.net/qq_35251502/article/details/113448473

我們主要針對第一種方法,第二種操作起來可能不太簡單,我也沒有做嘗試。

第一種方式就是去呼叫指令碼中的函式,把引數傳給指令碼,執行指令碼函式,這樣就間接實現了,這也就意味著,這種方式必須寫指令碼(等有時間了,再研究一下第二種方法)

具體操作:其實利用人家已經封裝好的simxCallScriptFunctionAPI

 client.simxCallScriptFunction('[email protected]', 'sim.scripttype_customizationscript', math.pi / 90, client.simxDefaultSubscriber(caterpillarCallback))

第一個引數:就是你指令碼中的函式名@指令碼名稱,如上圖這個是我給履帶車加的。

第二個引數,就是指令碼型別 主要指令碼型別如下所示。具體可以看官方文件

sim.scripttype_mainscript

sim.scripttype_childscript

can be combined with sim.scripttype_threaded

sim.scripttype_addonscript

sim.scripttype_addonfunction

sim.scripttype_customizationscript

sim.scripttype_sandboxscript

sim.scripttype_threaded

can only be used if combined with sim.scripttype_childscript

第三個引數:就是傳遞的值

第四個引數:topic型別

下圖就是指令碼中的樣子:

2021年1月31日:

在連續向CoppeliaSim傳送資料時,使用simxDefaultSubscriber或者simxCreateSubscriber。

simxDefaultSubscriber:他是已經預設存在的一個topic,很多系統的API操作都用這個,比如最典型的simxGetSimulationStepStarted和simxGetSimulationStepDone。

simxCreateSubscriber:他是使用者自己建立的,教程裡面也專門提到,對於一些資料量大的,推薦使用這種方式,建立專門的topic去操作。這裡要注意一個細節,如果我們使用系統預設的,那麼就意味著我們在執行過程中無法關閉這個topic,也就是說無法結束一個數據鏈的傳送,比如車速,一旦使用simxDefaultSubscriber發出去就無法修改知道模擬結束,這顯然不合適,但是如果是simxCreateSubscriber,他有一個對應的API:simxRemoveSubscriber,這樣可以用這個函式關閉我們自己建立的topic,我們修改資料後再開啟,這樣就能靈活應用了。

simxCreateSubscriber的使用方法,他不是像simxDefaultSubscriber一樣直接呼叫而是需要建立:

    dedicatedSub=client.simxCreateSubscriber(imageCallback,1,True) # 建立 注意回撥函式在這裡

    client.simxGetVisionSensorImage(visionSensorHandle[1],False,dedicatedSub) # 使用 注意這時候回撥函式是在建立的時候就加上去了
    
    client.simxRemoveSubscriber(dedicatedSub) # 刪除