#topicpath
*3 プログラムの実行 [#gd3f3eb9]
#contents
~本章では、Eclpseの使用方法について説明します。
~
**3-1 サンプルソースのインポート [#z3a08c14]
~本項目では、ダウンロードしたサンプルソースをEclipseにインポートし、編集やビルドが行える状態に設定します。
~
~1)Eclipseを起動し、メニューバーの「ファイル(F)」の「インポート(I)…」を選択し、インポートのダイアログを開きます。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image019.png,70%)
~
~
~2)「一般」の「既存プロジェクトをワークスペースへ」を選択し、「次へ」を選択します。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image020.png,70%)
~
~
~3)「アーカイブ・ファイルの選択」を選択し、「参照」ボタンを選択します。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image021.png,70%)
~
~
~
~4)ダウンロードした「SotaSample-master.zip」を選択し開きます。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image022.png,70%)
~
~
~
~5)プロジェクトに「SotaSample」が追加され、チェックがついていることを確認してから「完了」を選択します。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image023.png,70%)
~
~
~
~以上でサンプルソースのインポートが完了となります。
~
~
**3-2 プログラムの転送 [#x6a72722]
~EclipseのAntを用いてプログラムを本製品へ転送します。
~
~1) パッケージ・エクスプローラーより、「send.xml」を右クリックし、「実行」の「Ant ビルド」を選択します。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image024.png,70%)
~
~
~しばらくすると、コンソール上にビルド内容が表示され、「Ant Input Request」ウインドウが表示されるので、転送先に合わせたものを選択し「OK」を選択します。
~・Rpi… Raspberry Pi搭載のロボット
~・Edison… Edison搭載のロボット
~
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image025.png,70%)
~
~
~2) 転送先のIPアドレスを入力し、「OK」をクリックします。本製品のIPアドレスを調べる方法につきましては、[[設定モード>設定モード]]をご参照ください。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image026.png,70%)
~
~
~以上で「SotaSample」の転送が完了となります。
~
~
**3-3 プログラムの実行 [#t1a62acb]
~転送したプログラムを本製品のコンソール上で実行する方法を説明します。
~
~まず、本製品へログインします。ログインの方法は、「[[ネットワークへの接続]]」をご参照ください。
~
~ログイン後、以下のコマンドを入力し、ディレクトリを移動します。
~
cd SotaSample/bin
~
~次に以下のコマンドを入力し、スクリプトファイルに実行権限を付加します。
~
sudo chmod +x *.sh
~※Edison版では「sudo」は必要ありません
~
~以下のコマンドを入力することで、プログラムが実行されます。
~
./java_run.sh jp/vstone/sotasample/MotionSample
~
~ ※最後は「MotionSample.class」ではなく「MotionSample」であることにご注意ください
~
**3-4 サンプルプログラムの説明 [#c51a6a49]
~A)
「MotionSample.java」
~サーボモータの動作・LEDの点灯、音声ファイルの再生を行うプログラムです。
~
package jp.vstone.sotasample;
import java.awt.Color;
import jp.vstone.RobotLib.*;
/**
* VSMDを使用し、モーション再生・音声再生するサンプル
* @author Vstone
*
*/
public class MotionSample {
static final String TAG = "MotionSample";
public static void main(String[] args){
CRobotUtil.Log(TAG, "Start " +TAG);
CRobotPose pose;
//VSMDと通信ソケット・メモリアクセス用クラス
CRobotMem mem = new CRobotMem();
//Sota用モーション制御クラス
CSotaMotion motion = new CSotaMotion(mem);
if(mem.Connect()){
//Sota仕様にVSMDを初期化
motion.InitRobot_Sota();
CRobotUtil.Log(TAG, "Rev. " + mem.FirmwareRev.get());
//サーボモータを現在位置でトルクOnにする
CRobotUtil.Log(TAG, "Servo On");
motion.ServoOn();
//すべての軸を動作
pose = new CRobotPose();
pose.SetPose(new Byte[]{1 ,2 ,3 ,4 ,5 ,6 ,7 ,8} //id
, new Short[]{0 ,-900,0 ,900 ,0 ,0 ,0 ,0} //target
pos
);
//LEDを点灯(左目:赤、右目:赤、口:Max、電源ボタン:赤)
pose.setLED_Sota(Color.RED, Color.RED, 255, Color.RED);
//遷移時間1000msecで動作開始。
CRobotUtil.Log(TAG, "play:" + motion.play(pose,1000));
//補間完了まで待つ
motion.waitEndinterpAll();
//一部の軸を指定して動作
//CSotaMotionの定数を利用してID指定する場合
pose = new CRobotPose();
pose.SetPose(new Byte[]
{CSotaMotion.SV_HEAD_R, CSotaMotion.SV_L_SHOULDER,CSotaMotion.SV_L_ELBOW,CSotaMotion.SV_R_ELBOW} //id
, new Short[]{200, 700 ,-200,200} //target
pos
{CSotaMotion.SV_HEAD_R, CSotaMotion.SV_L_SHOULDER,
CSotaMotion.SV_L_ELBOW,CSotaMotion.SV_R_ELBOW} //id
, new Short[]{200, 700 ,-200,200} //target pos
);
pose.setLED_Sota(Color.GREEN,Color.GREEN,255, Color.GREEN);
motion.play(pose,1000);
motion.waitEndinterpAll();
//音声ファイル再生
//raw Waveファイルのみ対応
CPlayWave.PlayWave("sound/cursor10.wav");
CRobotUtil.wait(2000);
pose = new CRobotPose();
pose.SetPose(new Byte[]{1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 //id
, new Short[]{0 ,-900 ,0 ,900 ,0 ,0 ,0 ,0} //target pos
);
pose.setLED_Sota(Color.BLUE,Color.BLUE,255, Color.BLUE);
motion.play(pose,1000);
motion.waitEndinterpAll();
//サーボモータのトルクオフ
CRobotUtil.Log(TAG, "Servo Off");
motion.ServoOff();
}
}
}
~
~
~
-jp.vstone.RobotLib.CRobotPose
~サーボモータの制御の設定や、LEDの制御の設定を行うクラスです。
~
~・SetPose(Byte[] paramArrayOfByte, Short[] paramArrayOfShort)…各サーボモータを各指定角度へ動かす設定を行います。
~
~・setLED_Sota(java.awt.Color eye_L, java.awt.Color eye_R, int mouth, java.awt.Color powerbtn)…SotaでLEDを制御する設定を行う関数です。CommUでは使用ません。
~
~・setLED_CommU(java.awt.Color body, int L_cheek, int R_cheek,java.awt.Color powerbtn)…CommUでLEDを制御する設定を行う関数です。Sotaでは使用できません。
~
~各関数は、次に説明する「CSotaMotion.play」や「CCommUMotion.play」を呼び出すことで初めて動作します。
~
~
-jp.vstone.RobotLib. CSotaMotion
~Sota用の動作制御のクラスです。CommUでは使用できません。
~
~・ServoOn()…すべてのサーボモータのトルクをONにします。
~・ServoOff()…すべてのサーボモータのトルクをOFFにします。
~
~・getDefaultIDs()…デフォルトのID配列を取得します。
~
~・getReadpose()…サーボモータの現在角度を取得します。戻り値は、現在角度の配列で、getDefaultIDsで得られるID配列に格納されたIDの順に返します。
~
~・play(CRobotPose pose, int msec)…CRobotPose.setPoseやCRobotPose.setLED_Sota等で設定された通りにLEDやサーボモータを動作させます。
~
~
-jp.vstone.RobotLib. CCommUMotion
~CommU用の動作制御のクラスです。Sotaでは使用できません。
~
~・ServoOn()…すべてのサーボモータのトルクをONにします。
~・ServoOff()…すべてのサーボモータのトルクをOFFにします。
~
~・getDefaultIDs()…デフォルトのID配列を取得します。
~
~・getReadpose()…サーボモータの現在角度を取得します。戻り値は、現在角度の配列で、getDefaultIDsで得られるID配列に格納されたIDの順に返します。
~
~・play(CRobotPose pose, int msec)…CRobotPose.setPoseやCRobotPose.setLED_CommU等で設定された通りにLEDやサーボモータを動作させます。
~
**3-5 自作によるプログラムの作成方法 [#z826252c]
~本項目では新しくクラスを追加し、「首をかしげる動作」を行うサンプルソースを作成する方法について説明します。
~
~1)パッケージ・エクスプローラーの「jp.vstone.sotasample」を右クリックし、「新規」の「クラス」を選択します。
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image027.png,70%)
~
~
~
~
~2)以下のような画面が表示されるので、「名前」に「MotorTest」と入力し、「完了」を選択します。
~
~
#ref(http://www.vstone.co.jp/sotamanual/sotamanual_pict/java//image028.png,70%)
~
~
~3)「MotorTest.java」の編集画面になるので、下記の内容に編集します。
~
~「MotorTest.java」
~
package jp.vstone.sotasample;
import jp.vstone.RobotLib.CRobotMem;
import jp.vstone.RobotLib.CRobotPose;
import jp.vstone.RobotLib.CRobotUtil;
import jp.vstone.RobotLib.CSotaMotion;
public class MotorTest {
public static void main(String[] args){
CRobotPose pose = new CRobotPose();
//VSMDと通信ソケット・メモリアクセス用クラス
CRobotMem mem = new CRobotMem();
//Sota用モーション制御クラス
CSotaMotion motion = new CSotaMotion(mem);
if(mem.Connect()){
//VSMDを初期化
motion.InitRobot_Sota();
//サーボモータを現在位置でトルクOnにする
motion.ServoOn();
//首ピッチ軸を動作
pose.SetPose(new Byte[]{8} //ID8
, new Short[]{0} //0度
);
motion.play(pose,1000);
motion.waitEndinterpAll();
CRobotUtil.wait(2000);
pose.SetPose(new Byte[]{8} //ID8
, new Short[]{-200} //-20度
);
motion.play(pose,500);
motion.waitEndinterpAll();
CRobotUtil.wait(500);
pose.SetPose(new Byte[]{8} //ID8
, new Short[]{0} //0度
);
motion.play(pose,1000);
motion.waitEndinterpAll();
CRobotUtil.wait(2000);
//サーボモータのトルクオフ
motion.ServoOff();
}
}
}
~
~4)コンソールにエラーが表示され、ビルドができない場合があります。その場合はエラーを修正してください。以下にエラーの例を紹介します。
~
~エラー内容①
~「トークン "Invalid
Character" に構文エラーがあります。このトークンを削除してください」
~・コメント文や文字列以外に、全角文字が含まれている可能性があります。削除してください。
~
~
~エラー内容②
~「メソッド InitRobot_SOTA() は型 CSotaMotion で未定義です」
~・メソッド名が間違っている可能性があります。正しい名前に編集してください。
~(本例では、「InitRobot_SOTA()」ではなく「InitRobot_Sota()」に修正します)
~
~
~5)編集が終われば、メニューバーの「ファイル(F)」の「保管(S)」を選択して上書き保存します。
~
~
~以上でプログラムの作成が完了となります。
~
[[目次>MenuBar]] [[次のページへ>>>../サンプルソースとライブラリについて]]