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) # 刪除