3 プログラムの実行 †
本章では、Eclpseの使用方法について説明します。
3-1 サンプルソースのインポート †
本項目では、ダウンロードしたサンプルソースをEclipseにインポートし、編集やビルドが行える状態に設定します。
1)Eclipseを起動し、メニューバーの「ファイル(F)」の「インポート(I)…」を選択し、インポートのダイアログを開きます。
2)「一般」の「既存プロジェクトをワークスペースへ」を選択し、「次へ」を選択します。
3)「アーカイブ・ファイルの選択」を選択し、「参照」ボタンを選択します。
4)ダウンロードした「SotaSample-master.zip」を選択し開きます。
5)プロジェクトに「SotaSample」が追加され、チェックがついていることを確認してから「完了」を選択します。
以上でサンプルソースのインポートが完了となります。
3-2 プログラムの転送 †
EclipseのAntを用いてプログラムを本製品へ転送します。
1) パッケージ・エクスプローラーより、「send.xml」を右クリックし、「実行」の「Ant ビルド」を選択します。
しばらくすると、コンソール上にビルド内容が表示され、「Ant Input Request」ウインドウが表示されるので、転送先に合わせたものを選択し「OK」を選択します。
・Rpi… Raspberry Pi搭載のロボット
・Edison… Edison搭載のロボット
2) 転送先のIPアドレスを入力し、「OK」をクリックします。本製品のIPアドレスを調べる方法につきましては、設定モードをご参照ください。
以上で「SotaSample」の転送が完了となります。
3-3 プログラムの実行 †
転送したプログラムを本製品のコンソール上で実行する方法を説明します。
まず、本製品へログインします。ログインの方法は、「ネットワークへの接続」をご参照ください。
ログイン後、以下のコマンドを入力し、ディレクトリを移動します。
cd SotaSample/bin
次に以下のコマンドを入力し、スクリプトファイルに実行権限を付加します。
sudo chmod +x *.sh
※Edison版では「sudo」は必要ありません
以下のコマンドを入力することで、プログラムが実行されます。
./java_run.sh jp/vstone/sotasample/MotionSample
※最後は「MotionSample.class」ではなく「MotionSample」であることにご注意ください
3-4 サンプルプログラムの説明 †
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 ); 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 自作によるプログラムの作成方法 †
本項目では新しくクラスを追加し、「首をかしげる動作」を行うサンプルソースを作成する方法について説明します。
1)パッケージ・エクスプローラーの「jp.vstone.sotasample」を右クリックし、「新規」の「クラス」を選択します。
2)以下のような画面が表示されるので、「名前」に「MotorTest」と入力し、「完了」を選択します。
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)」を選択して上書き保存します。
以上でプログラムの作成が完了となります。