引き続いて、M5Stackのpitch/roll/yaw情報をUDPで送って、Processing上のモデルに反映してみます。
M5Stackからはpitch/roll/yaw情報をカンマ区切りのテキストで送ります。
このテキストをProcessingで受信して、直方体のモデルのposeに反映します。正負が逆になったx/z軸は値を反転。座標系の取り方でどうにでもなるような気もしますが。
Processingのソースは見ての通り単純です。最初3Dの描画できなくて調べたらベータ版では動かないようで4.1.1にアップデートしたらきちんと動作しました。
codeは、
https://github.com/chateight/processing/blob/main/sketch_221220b.pde
/*
read m5stack udp data(IMU data ; pitch, roll, yaw) and move the imaginary object
*/
import hypermedia.net.*;
UDP udp;
final String IP = "0.0.0.0";
PFont myFont;
float[] pry = new float[3];      // pitch, roll, yaw store work
void setup() {
  
  udp = new UDP(this, 3002);
  udp.listen( true );
  size(500,500,P3D);
  frameRate(30);
  loop();
}
void draw() {
  background(0);
 
  translate(width/2, height/2);
  rotateX(radians(-pry[1]));
  rotateY(radians(pry[0]));
  rotateZ(radians(-pry[2]));
  box(150, 150, 50);
}
void receive( byte[] data, String ip, int port ) {
  String message = new String( data );
  println( "received : \""+message+"\" from "+ip+" on port "+port );
  
  String[][] matchedTexts = matchAll(message, "[0-9|-]+.[0-9]+");
  if (matchedTexts != null) {
    int index = 0;
    for (String[] matchedText : matchedTexts){
      pry[index] = float(matchedText[0]);
      index++;
    }
  }
  println(pry[0], pry[1], pry[2]);    // pitch, roll, yaw
  
}動かして見たのは、今のYouTube画面で参照ください。yawは時間経過とともにずれていくのでいくらか補正はしていますが、十分じゃ無いですね。
admin
