前提と目的
Sota のプログラミングは、通常VstoneMagic、もしくはEclipseによるJavaでの開発になります。
しかし、Javaで開発して転送して実行してーというプロセスを踏むのがめんどくさそうだなと考え、REPL的に動作確認をできるようにjRubyからsota君を動作させます
これによってjRubyのreplであるjirbで1行づつSotaに処理を実行させることができるので、対話的に動作が可能になるので理解が進みやすくなるかなと思います。
環境構築
Sota/RaspberryPi 版
### sotaにsshでログインしてから
$ sudo apt-get install jruby
$ jruby --version
jruby 1.5.6 (ruby 1.8.7 patchlevel 249) (2012-12-11 6586) (Java HotSpot(TM) Client VM 1.8.0) [arm-java]
$ jirb --version
irb 0.9.5(05/04/13)
なんかjruby異様に古いですね。(いまは気にしない)
私の利用しているsotaはJava8にしてあります、必要であれば入れてください。(jRubyを入れる前にinstallしてしまったので必須かよくわからない)
動いた環境のjavaは以下の状態
$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)
動作確認
jirbで動作確認します。
javaのexampleをもとにjRubyで動くコードを用意します。
以下の2つのExampleをもとにLED/モータ/スピーチの動作確認をしてみます。
https://github.com/vstoneofficial/SotaSample/blob/master/src/jp/vstone/sotasample/MotionSample.java
https://github.com/vstoneofficial/SotaSample/blob/master/src/jp/vstone/sotasample/TextToSpeechSample.java
以下をコピーしてsshでsotaに接続してjirbで動作させてみましょう。
require 'java'
require "/home/vstone/lib/core-2.2.jar"
require "/home/vstone/lib/sotalib.jar"
require "/home/vstone/lib/SRClientHelper.jar"
require "/home/vstone/lib/jna-4.1.0.jar"
require "/home/vstone/lib/javase-2.2.jar"
require "/usr/local/share/OpenCV/java/opencv-310.jar"
require "/home/vstone/lib/gson-2.6.1.jar"
java_import "java.awt.Color"
java_import "jp.vstone.RobotLib.CRobotUtil"
java_import "jp.vstone.RobotLib.CRobotMem"
java_import "jp.vstone.RobotLib.CSotaMotion"
java_import "jp.vstone.RobotLib.CRobotPose"
java_import "jp.vstone.RobotLib.CPlayWave"
CRobotUtil.Log("log", "Servo On")
mem = CRobotMem.new
motion = CSotaMotion.new(mem)
mem.Connect
motion.InitRobot_Sota
CRobotUtil.Log("log", "Rev. " + mem.FirmwareRev.get.to_s)
motion.ServoOn
pose = CRobotPose.new
pose.setLED_Sota(Color.new(255,255,255), Color.new(255,255,255), 255, Color.new(255,255,255))
pose.SetPose([1,2,3,4,5,6,7,8].to_java(:Byte), [0,900,0,-900,0,0,0,0].to_java(:Short))
motion.play(pose,5000)
motion.waitEndinterpAll()
pose.setLED_Sota(Color.new(255,0,0), Color.new(0,255,0), 255, Color.new(255,0,0))
pose.SetPose([1,2,3,4].to_java(:Byte), [500,-900,-500,900].to_java(:Short))
motion.play(pose,1000)
motion.waitEndinterpAll()
java_import "jp.vstone.sotatalk.TextToSpeechSota"
CPlayWave.PlayWave(TextToSpeechSota.getTTS("やっほー"),true)
というわけでこの程度で動きました。