1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SotaアプリをJavaで開発して登録する方法

Posted at

Javaを用いたSota君アプリの開発と登録の一連の流れをまとめました。
本記事で作成したアプリのソースは [GitHub] (https://github.com/Masataka0127/SotaRepeat) にあります。

開発環境

  • OS:Windows 10 (64 bit)
  • 言語:Java
  • IDE:Eclipse

本記事では Intel(R) Edison版 Sota (デベロッパー版)を対象としてアプリ開発を行いました。

Sotaアプリの開発方法

公式ドキュメントでは、Sotaアプリの開発方法として以下の2つが挙げられています。

VstoneMagicはSota用のプログラミングソフトで、予め用意された命令ブロックを繋げてアプリを開発します。
VstoneMagicの利点として、アプリの登録方法が公式ドキュメントに書かれており、Sota本体を操作するだけで「アプリの実行」から作成したアプリを実行することができます。しかし、命令ブロックを繋げる仕様上アプリ開発に制約が掛かります。
そこで、本記事ではJavaでアプリの開発を行います。
Javaで開発したアプリの登録方法は公式ドキュメントに書かれていないので、以下にその方法を説明していきます。

開発環境の準備

まずは公式ドキュメントの Javaでプログラミングをしてみる に従って、サンプルプログラムの実行までやってください。
以下では、開発環境としてEclipse、サンプルプログラムのプロジェクトとしてSotaSampleが手元にあるものとして説明していきます。

新規プロジェクトの作成

ここからJavaでアプリ開発をしていきます。
本記事では、こちらが喋ったことをSota君が音声認識してオウム返しするアプリを開発します。
SotaSample内のSpeechRecSample.javaとやってることは同じです。

まずは「ファイル」→「新規」→「Javaプロジェクト」から新規プロジェクトを作成します。プロジェクト名はSotaRepeatとしておきます。ちなみにGitHubで管理する場合は GitHubとEclipseの連携とかまとめ - Qiita が参考になると思います。

新規プロジェクトを作成したら、srcフォルダ上で右クリック→「新規」→「パッケージ」からパッケージを作成します。パッケージ名はcom.example.sotarepeatとしました(パッケージの命名方法は良く分かってません)。

Javaプログラムの実装

パッケージ名上で右クリック→「新規」→「クラス」からmainのJavaファイルSotaRepeat.javaを作成し、実装していきます。アプリの流れとしては以下の通りです。

  1. 音声認識を使用して喋った内容を文字列で取得する
  2. TextToSpeechを使用して取得した文字列をSota君に喋らせる
  3. 1.と2.を任意の回数繰り返す

実装したSotaRepeat.javaを以下に載せます。

SotaRepeat.java
/* SotaRepeat.java
 * 音声認識結果をTTSでオウム返しするアプリ
 */

package com.example.sotarepeat;

import jp.vstone.RobotLib.CPlayWave;
import jp.vstone.RobotLib.CRobotMem;
import jp.vstone.RobotLib.CSotaMotion;
import jp.vstone.sotatalk.MotionAsSotaWish;
import jp.vstone.sotatalk.SpeechRecog;
import jp.vstone.sotatalk.SpeechRecog.RecogResult;
import jp.vstone.sotatalk.TextToSpeechSota;

public class SotaRepeat {
	static final String TAG = "SotaRepeat";
	static final int LOOP_NUM = 10;

	public static void main(String[] args) {
		//VSMDと通信ソケット・メモリアクセス用クラス
		CRobotMem mem = new CRobotMem();
		//Sota用モーション制御クラス
		CSotaMotion motion = new CSotaMotion(mem);
		SpeechRecog recog = new SpeechRecog(motion);
		MotionAsSotaWish wish = new MotionAsSotaWish(motion);

		if (mem.Connect()) {
			//Sota仕様にVSMDを初期化
			motion.InitRobot_Sota();
			motion.ServoOn();

			for (int i=0; i<LOOP_NUM; i++) {
				// 音声認識(10秒までの音声に対応)
				RecogResult result = recog.getRecognition(10000);
				if (result.recognized) {
					// 認識結果をTextToSpeech
					wish.Say(result.getBasicResult(), MotionAsSotaWish.MOTION_TYPE_TALK);
					//CPlayWave.PlayWave(TextToSpeechSota.getTTSFile(result.getBasicResult()),true);

					if(result.getBasicResult().contains("おわり")){
						CPlayWave.PlayWave(TextToSpeechSota.getTTSFile("終了するよ"),true);
						break;
					}
				}
				if (i == LOOP_NUM - 1) {
					CPlayWave.PlayWave(TextToSpeechSota.getTTSFile("疲れたので終了するよ"), true);
				}
			}
			motion.ServoOff();
		}
	}
}

jp.vstone.RobotLib.CPlayWaveなどをimportする所でそんなものは無いとEclipseに怒られた場合は、SotaRepeat上で右クリック→「ビルド・パス」→「外部アーカイブの追加」からSotaSample内のlibフォルダにあるsotalib.jarを指定してください。

jarファイルの作成

開発したアプリをSotaに登録するために、jarファイルを作成します。
まず、SotaRepeat上で右クリック→「エクスポート」→「JARファイル」を選択します。
「JARエクスポート」画面でSotaRepeatにチェックが入っていることを確認し、エクスポート先のjarファイルを指定して「次へ」。
「JARパッケージ・オプション」はデフォルト設定のまま「次へ」。
「JARマニフェスト仕様」は以下の画面のように「ワークスペース内のマニフェストを保存」にチェックを入れ、マニフェストファイル名を指定します。また、メイン・クラスとしてSotaRepeatを指定します。そして「完了」。

jar_manifest_sample01.jpg

次に、作成したMANIFEST.MFを編集します。今のままだとclasspathの記述がされていないため、アプリ実行時にエラーが出ます。
上記の画像のようにマニフェストファイルを作成した場合、MANIFEST.MFは次のようになっていると思います。

MANIFEST.MF
Manifest-Version: 1.0
Sealed: true
Main-Class: com.example.sotarepeat.SotaRepeat

ここに次のような記述を加えます。

Class-Path: . /home/vstone/lib/core-2.2.jar /home/vstone/lib/javase-2.2.jar /home/vstone/lib/jna-4.1.0.jar /home/vstone/lib/opencv-310.jar /home/vstone/lib/sotalib.jar /home/vstone/lib/SRClientHelper.jar /home/vstone/lib/gson-2.6.1.jar

見境なくclasspathに追加しているので不要なものがあるかもしれませんが、/home/vstone/lib/gson-2.6.1.jarを追加しているのがミソです。SotaSamplelibフォルダ内に含まれていないので最初は書いてなかったのですが、Sotaコンソール上で実行したらgsonが必要だとエラーを吐かれたので追加しました。

このマニフェストファイルを使って、改めてjarファイルを作成します。先ほどと同様にjarファイルを作成していきますが、「JARマニフェスト仕様」で以下のように「ワークスペース内の既存のマニフェストを使用」にチェックを入れます。そして「完了」。
jar_manifest_sample02.jpg

jarファイルの転送

作成したjarファイルをSotaに転送します。なお、ここからの流れは Sotaに自作のjarを登録する方法 - Qiita が非常に参考になりました。書いてあることは基本的に同じです。

筆者の環境では無線LANを介してSotaに接続しているので、WinSCPを使って転送します。
Sota内の/home/vstone/vstonemagic/app/jar下にSotaRepeatディレクトリを作成し、その中に作成したjarファイルを置きます。

アプリの設定ファイルの記述

Sotaの「アプリの実行」から実行するプログラムは、/home/vstone/vstonemagic/app/jar/app.propertiesという設定ファイルに記述されています。この設定ファイルを以下のように書き換えます。

app.properties
length=1              #アプリ数
Debug=false
TimeZone=Asia/Tokyo

app1.title=SotaRepeat
app1.workingdir=SotaRepeat/
app1.jar=SotaRepeat.jar
app1.type=app
app1.trigger=
app1.triggeroption=

lengthの値はアプリ数と一致するようにします。また、新しくアプリを開発した場合、app2.title=hogehogeという風に追記していきます。
これで登録が完了したので、Sotaを再起動します。
再起動後、背中のボタンを押して「設定モード」→「アプリの実行」から開発したアプリを実行できます。

参考にした記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?