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ファイルをよみこみます。
動作サンプル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); }
レンダリング終了次第、動画追記します