中野島ロボット

小さなロボットの自作記事を書いています。

週刊中ロボ101 プログラムちょっと修正 相対値指定追加

はじめに
先週SG90サーボモータに換装し復旧した ArduiroidOne 二号機ですが、モーションを作るのにソフトウェアを少し改良しました。

 

 

絶対値指定と相対値指定
各サーボモータの指定方法は絶対値指定(0~180°)でしたが、ポジション配列は相対値(中心のオフセットと回転の方向を揃えた-90~90°のもの)で格納しているので、Aコマンドでポジションを確認した後に、手動で相対値に変換する必要がありました。これが結構面倒なので、相対値で指定できるように修正します。

Aコマンドとaコマンド
Aコマンドは大文字の'A'でも小文字の’a'でも同じ動きでしたが、大文字の'A'今まで通りの絶対値として、小文字の’a'では相対値として指示できるようにしました。

絶対値指定
 A,90,90,90,90,90,90,90,90 

相対値指定
 a,0,0,0,0,0,0,0,0 

 

ソースコード

    // SERVO All command
    if ( command == 'A' )  // 'A' is Servo All Command "A,Angle0, Angle1...Angle7"
    {
      Serial.print(command);

      // read Angle from Serial
      for (int i = 0; i < MAX_SERVO_NUM; i++)
      {
        angle[i] = Serial.parseInt();
        Serial.print(',');
        Serial.print(angle[i]);
      }
      Serial.println();

      // servo Move
      set8Angle( angle[0], angle[1], angle[2], angle[3], angle[4], angle[5], angle[6], angle[7] );
      
      // Wait Servo Move
      delay(SERVO_DELAY);

    }   // SERVO All End

    // SERVO all command relative angle
    if ( command == 'a' )  // 'a' is Servo All Command for relative "a,Angle0, Angle1...Angle7"
    {
      Serial.print(command);

      // read Angle from Serial
      for (int i = 0; i < MAX_SERVO_NUM; i++)
      {
        angle[i] = Serial.parseInt();
        Serial.print(',');
        angle[i] = servoCenter[i] + (angle[i]* servoDir[i]);
        Serial.print(angle[i]);
      }
      Serial.println();

      // servo Move
            set8Angle( angle[0], angle[1], angle[2], angle[3], angle[4], angle[5], angle[6], angle[7] );
      
      // Wait Servo Move
      delay(SERVO_DELAY);

    }   // SERVO all End  


ちょこっと解説
もとのAコマンドを二つに分けて片方を相対値指定に変更しています。

意味的に違うのは

 angle[i] = servoCenter[i] + (angle[i]* servoDir[i]);

の一行だけで、読み込んだ角度をオフセットと回転方向を加味して、絶対値に変換しています。

(でもよく考えたらAコマンドは相対値指定でも良かった気もします。)

 

おわりに
これでAコマンドで確認したポジションをそのまま basicPosition {} 配列に転記することができるので、モーション作成が楽になると思います。
(と書きながら歩かせるのは意外と苦労していて、やはりLアングルモデルよりも3Dプリンタモデルは機体が重く後ろに倒れやすいので、足のモデル形状は少し(5mmくらい関節の位置を前に出す)変えたくなってしまいます。)
f:id:nakarobo:20200529055949j:plain 

 

おしまい

 

購入品情報

おおーやっと純正SG90がAmazonで購入可能になっています。早速ぽちりました。 

5個セットで2200円

デジタル・マイクロサーボ SG90 (5個)

デジタル・マイクロサーボ SG90 (5個)

  • メディア: おもちゃ&ホビー
 

 次のロボットはMS18で作っているのですが、やっぱりSG90でないと遅いんですね。こっちもSG90に変えようと思います。

 一個でも買えますね。

デジタル・マイクロサーボ SG90 (1個)

デジタル・マイクロサーボ SG90 (1個)

  • メディア: おもちゃ&ホビー