[V-REP] オブジェクト間の値のやり取り
あるスクリプトから他のスクリプトへデータを送信する方法です。
プログラム
次のような状態で Cuboid から Cuboid#1 に “test” と言う文字列を送信し、Cuboid#1で表示します。
Cuboid
1 2 3 4 |
if (sim_call_type==sim_childscriptcall_actuation) then send_str="test" simSendData(sim_handle_tree,0,'hoge',send_str); end |
Cuboid#1
1 2 3 4 5 6 7 8 |
if (sim_call_type==sim_childscriptcall_initialization) then handle_console=simAuxiliaryConsoleOpen("console_name",10,1,{0,400}) end if (sim_call_type==sim_childscriptcall_actuation) then str=simReceiveData(0,'hoge') simAuxiliaryConsolePrint(handle_console,str..'\n') end |
関数
simSendData(targetID, dataHeader, dataName, data, dataLength, antennalHandle, acrionRadius, emissonAngle1, emissionAngle2, persistence)
引数
- targetID:送信先のID. IDには以下のものがある。
sim_handle_tree : 子のチャイルドスクリプト全て
sim_handle_all : シーン中のチャイルドスクリプト全て
個別のスクリプトハンドル - dataHeader:衝突が起こらないようにするための送信者識別番号。とりあえず使うなら0で良い
- dataName:データを受け取る時の識別名
- data:送信したい値
ここまでが必要最低限の要素
- dataLeength:送信する値の長さ
- antennaHandle:
- emmisionAngle:
- persistence:
返り値
- -1で失敗 (将来的に他の返り値が追加される予定)
simReceiveData(dataHeader, dataName, antennalHandle, index)
Luaの場合とCの場合とで引数が異なるので注意(ここでの説明はLua)
引数
- dataHeader:送信者識別番号
- dataName:データ識別名
ここまでが必要最低限の要素
- antennaHandle:
- index:
返り値
4つの要素が返却される
- data:送信された値
- senderID:
- dataHeader:
- dataName:
注意点
データは文字列として送信される
simSendDataで送信した値は整数値であろうと文字列に変換されます。もし受け取った先で値として使う場合には受け取った後に変換する必要があります。
Luaの場合にはtonumberを使います。
1 2 3 4 5 |
if (sim_call_type==sim_childscriptcall_actuation) then str=simReceiveData(0,'hoge') num=tonumber(str) simAuxiliaryConsolePrint(handle_console,num..'\n') end |
simReceiveDataでdata以外のsenderIDを使う場合の書き方
イコールの左辺に変数をカンマ区切りで列挙します。
1 |
str,senderID,dataHeader,dataName=simReceiveData(0,'hoge') |
C言語の場合にはこういった書き方ができないので引数としてsenderID等のポインタを与えているわけです。
コメントを残す