#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]]  [[次のページへ>>>../サンプルソースとライブラリについて]]