前提・実現したいこと
現在、Unityにて3軸ロボットの機械学習を行っています。そのUnity上の各軸の回転角度を、実空間にある3軸ロボットの回転角度として渡すことでリアルタイムでの動作の獲得を目指しています。
そこで、UnityでのデータををC++による制御プログラムに与えたいです。
Unity上の軸にはHIngeJointを与えており、TargetPositionを変化させて回転させています。
また、実機の制御はVisualStudio、C++でプログラムを書いており、作成済の状態です。
発生している問題・エラーメッセージ
ここで、Unity(C#)の回転角度情報をC++内のプログラミングに送りたいのですが、うまくいきません。
DllExport.bat をダウンロードし、C#(DLL)側で関数をエクスポートする方法など試しましたが、Unity側でエラーが発生してしまいます。
error CS0246: The type or namespace name 'DllExport' could not be found (are you missing a using directive or an assembly reference?) error CS0246: The type or namespace name 'DllExportAttribute' could not be found (are you missing a using directive or an assembly reference?)
該当のソースコード
関連する箇所の一部抜粋です。C++に送りたい情報は、以下のA1,2,3です。VisualStudioではエラーなくビルドできるのですが、上記のようにUnityでエラーが出ます。
C#
1using System.Runtime.InteropServices; 2 3public class ArmAgentVRNoEnemy : Agent 4{ 5 (中略) 6//A2,3 も同様 7private HingeJoint hinge1; 8private float A1 = 0; 9 10 11 [DllExport] 12 public static void ChangePos() 13 { 14 //それぞれの軸をA1,A2,A3として、A2,3も下記のように定義しています。 15 JointSpring hingeSpring = hinge1.spring; 16 hingeSpring.targetPosition = A1; 17 hinge1.spring = hingeSpring; 18 19 20 } 21 22}
C++の制御プログラムの一部です。
この関数内に、UnityのA1,2,3の情報を与えたいです。
UseMaxChannel: 使用チャンネル数(= DOF)
Angle : 関節角度ベクトル [rad] (= q[DOF])
Velocity : 関節角速度ベクトル [rad] (= dq[DOF])
SamplingTime : 取得間隔時間 [s] (= 0.001)
C++
1 2 3 4void GetAngle(int UseMaxChannel, double* Angle, double* Velocity, double SamplingTime) 5{ 6 int i; 7 static const int BoardMaxChannel = 8; // 【要設定】CNTボードの最大チャンネル数を設定する 8 static long InPulse[BoardMaxChannel]; 9 static double InAngle[BoardMaxChannel]; 10 static double PreAngle[BoardMaxChannel] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; 11 12 13 // conv. of Pulse to Angle 14 //InAngle[i] = //本来は、エンコーダパルス数や角度の関係から設定します 15 Angle[i] = //この部分を直接Unityからの各角度データにしたいです。 16 Velocity[i] = //(InAngle[i] - PreAngle[i]) / SamplingTime; 17 PreAngle[i] = //InAngle[i]; 18 } 19}
試したこと
C++での制御プログラムは本来Unityではなく実機での制御で用いていたもので、それ自体にはエラーはありません。
DllExport.bat をダウンロードする以外の方法を現在模索しているところですが、他にUnityとVisualStudio、C++を同期させる方法があればご教授いただけると幸いです。
まだ学習を始めてまもなく、今回の質問においても不足している情報や知識があると思いますがどうぞよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
VisualStudio2019
Unity 2020.3.24f1
回答1件
あなたの回答
tips
プレビュー