Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

オープンソースな実用ロボットアームTsukArm その2:セットアップと基本的動作

shuzo-kino.hateblo.jp
の続きで、今回はArduino上に環境を構築し、ロボットアームを少し動かしてみます。

実際のところ

ライブラリの導入

$ git clone https://github.com/TsukArm/TsukArm-Library.git
$ cd TsukArm-Library/arduino_lib
$ zip -r tsukarm_lib tsukarm_lib
$ mv tsukarm_lib.zip ~/Documents/Arduino/libraries

ここから、「スケッチ」=>「ライブラリのインクルード」=>「Zip形式のダウンロード」を選択し
先程できた"~/Documents/Arduino/libraries"に配置されているzipファイルをよみこみます。
f:id:shuzo_kino:20180403235111p:plain

動作サンプル1:上と横に動くだけ

最小限、動きを見る場合以下のような感じのスクリプトになります。
上、左と動いて初期位置に戻るサンプルです。
動画はアップロード次第、追記します。

#include <Angle.h>
#include <BezierFunction.h>
#include <BezierStepper.h>
#include <CartesianJob.h>
#include <CartesianPoint.h>
#include <Constant.h>
#include <Function.h>
#include <GripperController.h>
#include <HeadRotation.h>
#include <Job.h>
#include <JobBuilder.h>
#include <JobQueue.h>
#include <LinearFunction.h>
#include <LinearRotator.h>
#include <PolarPoint.h>
#include <ReferenceRotator.h>
#include <RobotArm.h>
#include <RotateMatrix.h>
#include <Rotator.h>
#include <RoundFunction.h>
#include <ServoPoint.h>
#include <Square.h>
#include <Stepper.h>

JobQueue *queue;

void setup() {
  Serial.begin(115200);
  Serial.println("INIT START");
  
  // ロボットアームを初期化
  RobotArm *arm = new RobotArm();
  // サーボの角度を微調整
  int of[] = {-3, -10, 0, -3, 0, 0, 0};
  arm->offset(of);
  // 初期姿勢をとらせる
  arm->initialMove();
  
  /*
    TsukArm Libraryでは、動作単位をJobとしている。
    JobBuilderを使ってJobを構築し、それをJobQueueに格納する。
    JobQueueをDELAY_INTERVAL(=10ms)ごとにexecuteすると、キュー内部のJobを順に実行していく。
   */
  queue = new JobQueue();
  JobBuilder builder(arm);
  
  /*
    setTargetPosition(x,y,z)で、指定された位置に線形に移動する
    (単位はmm、原点はサーボM1軸とM2軸のなす線分の中心、動作点はサーボM4軸とM3軸の交点。誤差は1~10mm程度?)
    ただし、y>0とする
   */
  builder.setTargetPosition(0.0, 90.0, 90.0);
  queue->enqueue(builder.build());   // JobをJobQueueに格納する

  builder.setTargetPosition(0.0, 140.0, 90.0);
  queue->enqueue(builder.build());

  builder.setTargetPosition(0.0, 90.0, 140.0);
  queue->enqueue(builder.build());

  builder.setTargetPosition(50.0, 90.0, 90.0);
  queue->enqueue(builder.build());

  builder.setTargetPosition(0.0, 90.0, 90.0);
  queue->enqueue(builder.build());

  delay(1000);
  Serial.println("INIT END");
}

void loop() {
  // JobQueueを実行する
  queue->execute();
  delay(FRAME_INTERVAL);
}

レンダリング終了次第、動画追記します