Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

オープンソースな実用ロボットアーム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);
}

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