背景
メイン基板にはIMUが搭載されているので速度の計算もできるようです。
今回はコンパスを使ったプログラミングを試してみます。
Scratch
速度はセンサのブロックで値を取得することができるようです。
「速度が2未満であれば正面LEDを青色で点灯し、2を超えると正面LEDを赤色で点灯させる」
手で持ち上げて素早く動かしている間、正面LEDの色が青から赤に変わりました。
spheroV2
BoltTest.pyとsphero_edu.pyのメソッドを参考に同様な動作をするスクリプトを作成しました。
CTRL+Cで終了します。
import time
import keyboard
import math
from spherov2 import scanner
from spherov2.sphero_edu import EventType, SpheroEduAPI
from spherov2.types import Color
print("Testing Starting...")
print("Connecting to Bolt...")
toy = scanner.find_BOLT()
if toy is not None:
print("Connected.")
with SpheroEduAPI(toy) as droid:
print("Testing Start...")
droid.set_main_led(Color(r=0, g=255, b=0))
time.sleep(1)
droid.set_main_led(Color(r=0, g=0, b=0))
time.sleep(1)
droid.set_stabilization(False)
time.sleep(1)
try:
while True:
velocity = droid.get_velocity()
time.sleep(0.1)
if math.sqrt((velocity['x']))^2 + (velocity['y'])^2) < 2 :
droid.set_front_led(Color(r=0, g=225, b=0))
else:
droid.set_front_led(Color(r=225, g=0, b=0))
print(f"Velocity: x={velocity['x']:.1f}, y={velocity['y']:.1f}")
except KeyboardInterrupt:
print("\nProgram interrupted by user.")
except Exception as e:
print(f"An error occurred: {e}")
print("Testing End...")
else:
print("Failed to connect to Sphero.")
実行結果はこちらのようになりました。
なぜか上下方向がx、前後方向がyになっていました。
git\spherov2.py\spherov2\test>python BoltTest_velocityMeter1.py
Testing Starting...
Connecting to Bolt...
Connected.
Testing Start...
Velocity: x=1.0, y=1.9
Velocity: x=0.1, y=-2.8
Velocity: x=-1.6, y=-4.1
Program interrupted by user.
Testing End...
まとめ
加速度センサーからの速度を入力に使ったプログラミングを実験しました。
ScratchとspheroV2の両方とも軸と対応が分かりにくいようなので、自転車や車に乗せて調べてみると面白そうです。