TouchDesigner + 10自由度 Mems IMUセンサ でCG制御
DFROBOT様より、提供頂いた10自由度 Mems IMUセンサモジュールでTouchDesignerの3Dオブジェクトを動かしてみました!
10自由度 Mems IMUセンサの詳細は以下を
TouchDesignerの詳細は以下を参照ください。
目次
モーションセンサ
このモジュールには
- ADXL345:3軸加速度センサ
- ITG3200:3軸ジャイロ
- HMC5883L:3軸地磁気センサ
- BMP085:気圧センサ
が搭載されています。3+3+3+1で自由度10のセンサです。モジュールのインターフェースはI2C。
構成
部品
- 10自由度Mems IMUセンサ
- Arduino UNO
Arduinoプログラム
以下でダウンロードできるライブラリとサンプルコードを元に作成いたしました。
https://www.dfrobot.com/wiki/index.php/10_DOF_Sensor_(SKU:SEN0140)
センサから姿勢角 yaw pitch roll取得してシリアル出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <Wire.h> #include <FreeSixIMU.h> #include <FIMU_ADXL345.h> #include <FIMU_ITG3200.h> #include <HMC5883L.h> #include <BMP085.h> float angles[3]; // yaw pitch roll float heading; BMP085 dps = BMP085(); long Temperature = 0, Pressure = 0, Altitude = 0; // Set the FreeSixIMU object FreeSixIMU sixDOF = FreeSixIMU(); HMC5883L compass; // Record any errors that may occur in the compass. int error = 0; void setup(){ Serial.begin(9600); Wire.begin(); delay(1000); dps.init(); dps.dumpCalData(); delay(5000); delay(5); sixDOF.init(); //init the Acc and Gyro delay(5); compass = HMC5883L(); // init HMC5883 error = compass.SetScale(1.3); // Set the scale of the compass. error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous if(error != 0) // If there is an error, print it out. Serial.println(compass.GetErrorText(error)); } void loop(){ sixDOF.getEuler(angles); Serial.print(angles[0]); //yaw Serial.print('\t'); Serial.print(angles[1]); //pitch Serial.print('\t'); Serial.println(angles[2]); //roll delay(10); } |
TouchDesignerプログラム
TouchDesignerを起動し、新規作成 ([File] – [New])で いざプログラミング!
画面ダブルクリックで 以下のオペレータ選択画面が開きます。各タグ内から使用するオペレータを選択・配置します。
以下が全体結線図です。一つずつ説明記載いたします。
- Arduino連携しシリアルデータ取得
DATタブからSerialオペレータを選択・配置してArduinoからのシリアルデータを取得します。オペレータを選択しプロパティを開く (ショートカット p)
Port:PCに接続したArduinoのポートを選択 - シリアルデータを分割
DATタブからConvertオペレータを選択・配置してSerialオペレータと結線します。1行でyaw pitch rollの3データが送られているので、Tabでデータを3列に分割します。
Tab(\t)でデータ分割 - シリアルデータの選択
DATタブからSelectオペレータを選択・配置してConvertオペレータと結線して最新のシリアルデータのみを取得するようにします。3つ配置してyaw pitch rollの最新データをそれぞれ取得します。
Select Rows:by Indexを選択
Start Row Index, End Row Index:1を選択して最新のデータ行を取得
Select Cols:by Indexを選択
Start Col Index, End Col Index:それぞれ0, 1, 2を選択してyaw pitch rollを取得 - 最新シリアルデータをCHOPデータに変換
CHOPタブからDAT toオペレータを選択・配置してDAT値のシリアルデータをCHOP用の値に変換します。yaw pitch roll用に3つ配置します。
DATにそれぞれのSelectオペレータをドラッグ
First Column is:Valuesを選択
- 3DCGを配置してyaw pitch rollデータを入力
COMPタブからGeometry、Camera、LightオペレータをTOPタブからRenderオペレータを選択・配置します。それぞれ配置すると自動的に配線されRenderオペレータ右下の青丸クリックでCGが表示されます。
Geometryオペレータとyaw pitch rollデータを接続してCGを動かします。
Geometryオペレータのプロパティ
Rotate:xにroll、yにyaw、zにpitchのDAT toオペレータをそれぞれドラッグ
(ドラッグ前にDAT toオペレータの右下の”+”をクリックしてViewモードにする必要あり)
Scale:x, y, zを0.5に設定
動作
TouchDesignerで簡単に物理センサと3DCGの連動が出来ました。
マジ簡単!いろいろ応用できそうだね♪