フューチャー技術ブログ

元日に92%引きで叩き売りされていた変形ホームロボットを買ったのでScalaから叩いてみた

電子工作/IoT連載 の5本目です

リベンジ

2019年に某ロボットが85%引きで叩き売りされましたが、その時はウェーブに乗り遅れてしまい、入手できず悔しい思いをした経験があったのですが、今年の正月、それを超える値引率である92%引きで叩き売りされていた変形ホームロボットを購入することができました。今回はウェーブに乗ることができたのでとりあえずそれだけで非常に満足でした。

今回入手した変形ホームロボットについて

以前叩き売りされていた某ロボットは25軸でしたが、今回の変形ホームロボットは3軸+2輪となります。
ロボットの名前はCerevo社の「Tipron」と言い、6年前のCESでもお披露目されていたロボです。
ルンバはお掃除ロボットですが、このTipronはプロジェクターロボットになります。わざわざ、部屋の真ん中にプロジェクターを手で運ばなくても、プロジェクター自身が自分で部屋の真ん中まで自動で移動して映画などを映してくれるというものです。

変形前 変形後
fold extend

準備

Scalaを今使うならやっぱりフレッシュな3を使いたいですよね。
ただし、現状のsbt(Scalaのビルドツール)はJava18だとエラーが出るので、Java17で実行したいと思います。

macOS/Linuxなどでの手順例
>curl -s "https://get.sdkman.io" | bash
>source "$HOME/.sdkman/bin/sdkman-init.sh"
>sdk install java 17-open
>sdk install sbt 1.6.2

次の各ファイル、フォルダを作成します。

project/build.properties
sbt.version=1.6.2
project.sbt
scalaVersion := "3.1.1"
tipron.scala
package jp.co.future.example.tipron

import java.net._
import java.nio._
import java.nio.channels._

object Tipron extends App:
val TIPRON_IP = "Tipron本体のIPアドレス"
val SENDER_ADDR = new InetSocketAddress(9999)
val RECIEVER_ADDR = new InetSocketAddress(TIPRON_IP, 9999)
val channel = DatagramChannel.open()
channel.socket().bind(SENDER_ADDR)

def sendMsg(msg: String) =
val buff = ByteBuffer.allocate(msg.length)
buff.clear()
buff.put(msg.getBytes)
buff.flip()
val result = channel.send(buff, RECIEVER_ADDR)
result

sendMsg("""{"clearQueue":false,"commandId":1,"commandName":"turnLeft","commandValue":"-90"}""")
Thread.sleep(5000)
sendMsg("""{"clearQueue":false,"commandId":1,"commandName":"turnLeft","commandValue":"90"}""")

叩いてみる

>sbt run

実行すると、右旋回を少し行なった後、同じ角度分、左旋回を行なって元の向きに戻ります。
run

今後の展望

Tipronの標準バッテリーだとプロジェクターの連続稼働時間が心許ないので、手元のお小遣いに余裕ができてきたら、追加のバッテリーを買って空いているバッテリー格納スペースに入れたいと思っています。

参考サイト

本記事は次のサイトを参考しました。