Spheroとその
SDKの機能を引き続き調査し
ます 。
アジェンダでは、タブレットの加速度計を使用してロボットを制御し、障害物との衝突を検出しています。
理論のビット
前回の記事では、既に
Spheroが誰であるかと、
Visual Studio 2013を使用してWindows 8.1でプログラムによる管理を開始する方法を検討しました。
次に、より複雑なものを扱います。 タブレットをさまざまな方向に傾けてロボットを「操縦」し、障害物との衝突を検出する方法を学習します。 これを行うには、タブレットの加速度計とロボットの外界との衝突センサーを使用します。
加速度計
Windows 8.1オペレーティングシステムとWinRTオブジェクトモデルは、もちろんデバイスに搭載されていない限り、次のセンサーの使用をサポートしています。
- 加速度計;
- コンパス
- ジャイロメーター;
- 光センサー;
- 傾斜計;
- ジオロケーション。
加速度計は、3方向の動きを測定するモジュールです。 このモジュールには多くの最新のデバイスが搭載されています。 加速度計データにアクセスするには、
Accelerometerオブジェクトにアクセスする必要があります
。Accelerometerオブジェクトは、次のプロパティで
AccelerometerReadingオブジェクトへのアクセスを提供します。
- AccelerationX:X軸に沿って加速度を表示します。
- AccelerationY:Y軸に沿って加速度を表示します。
- AccelerationZ:Z軸に沿って加速度を表示します。
- タイムスタンプ:データのキャプチャにかかる時間を定義します。
加速度計の読み取り値が変化したときにイベントにサブスクライブし、読み取り値に応じてロボットを加速、減速、または方向転換します。

加速度計の読み取りイベントに登録できます。
加速度計イベントサブスクリプションprotected override void OnNavigatedTo(NavigationEventArgs e) { … Accelerometer _accelerometer = Accelerometer.GetDefault(); _accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged); … } async private void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e) { … }
引越し
タブレットから加速度計データを取得したとします。 次に、それらを使用してSpheroを宇宙で移動する必要があります。
Windows 8.1用のSphero SDKには、Spheroの動きを処理し、2つのパラメーターを受け入れる
Rollメソッドがあります。
- ヘディング-動きの角度。
次のように計算されます。

0から359の範囲の値を取ります。 - 速度-動きの速度。
0-移動しません。
255-最高速度。
デフォルトでは、Spheroはインジケーターx = 0、y = 0、見出し= 0、速度= 0で作業を開始します。
衝突検知器
Spheroは、
衝突検出などの楽しい機能をサポートしています。 座標の違いに対して、非常に
原始的に機能します。
Windows 8.1用Sphero SDKには、既成の
CollisionDetectedEventイベントが既にあり、これを使用して、実際のオブジェクトとの衝突をサブスクライブおよびキャッチできます。
イベントの説明 private void OnRobotConnected(object sender, Robot robot) { … robot.CollisionControl.StartDetectionForWallCollisions(); robot.CollisionControl.CollisionDetectedEvent += OnCollisionDetectedEvent; … }
最初に衝突センサーをオンにすることを忘れない場合、イベントがトリガーされます:
robot.CollisionControl.StartDetectionForWallCollisions();
センサーが不要になったら、オフにします。
robot.CollisionControl.StopDetection();
Sphero SDKのいくつかの便利な機能
ロボットを使用するには、Windows 8.1用の次のSphero SDKメソッドも必要です。
SetBackLED(強度)-ロボットのバックライトをオンにして、どこに行くかを理解できるようにします。 値:
1.0f-フルパワーでオンになります。
0.0f-無効にします。
SetHeading(見出し)-ロボットを回転させます。 0から359の値を取ります。
SetRGBLED(赤、緑、青)-ボールの色を設定します。
ロール(見出し、速度)-移動の方向と移動の速度を設定します。
見出し-動きの角度。 0から359の範囲の値を取ります。
速度-動きの速度。 0-移動しません。 255-最高速度。
スリープ()-ロボットをスリープ状態にします。
開発
挑戦する
加速度計を使用してロボットを動かします。 障害に遭遇した場合は、ロボットを赤く塗ります。
ツール
プロセス
1. Visual Studio 2013を開き、プロジェクトFile / New / Project /
Blank Appを作成します。

2.アセンブリ
RobotKit.dllをWindows 8.1の
Sphero SDKから接続します

3.アプリケーションにBluetooth RFCOMMサポートを追加します。
Package.appxmanifestをコード編集モードで開き、以下のコードを
機能セクションに追加します。
アプリケーションのBluetooth RFCOMMサポート <wb:DeviceCapability Name="bluetooth.rfcomm"> <wb:Device Id="any"> <wb:Function Type="serviceId:00001101-0000-1000-8000-00805F9B34FB" /> </wb:Device> </wb:DeviceCapability>
4.アプリケーションのメイン画面で、次を入力します。
- ロボットステータススイッチ(接続済み\未接続);
- ステータスを表示するテキストフィールド。
- ゲームを開始および停止する[開始]および[停止]ボタン。
MainPage.xamlファイルを開き、そこにすべて追加します。
アプリケーションのメイン画面 <Page x:Class="SpheroRace.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:SpheroRace" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" > <Grid Margin="100" > <Grid.RowDefinitions > <RowDefinition Height="60"/> <RowDefinition Height="60"/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock x:Name="SpheroName" Grid.Row="0" Grid.Column="0" Text="No Sphero Connected" FontSize="24"/> <ToggleSwitch x:Name="ConnectionToggle" Grid.Row="1" Grid.Column="0" Toggled="ConnectionToggle_Toggled" /> <Button Name="StartBtn" Click="StartBtn_Click" Grid.Row="2" Grid.Column="0" Content="Start" VerticalAlignment="Bottom" HorizontalAlignment="Left" Padding="100" ></Button> <Button Name="StopBtn" Click="StopBtn_Click" Grid.Row="2" Grid.Column="1" Content="Stop" VerticalAlignment="Bottom" HorizontalAlignment="Right" Padding="100" IsEnabled="False" ></Button> </Grid> </Page>
5.
MainPage.xaml.csに移動して、ゲームのロジックを説明します。 Spheroと通信するには、SDKが提供するオブジェクトモデルを使用します。
ゲームロジック public sealed partial class MainPage : Page { private Sphero m_robot = null; private long m_lastTimeMs; private double m_currentX = 0; private double m_currentY = 0; private bool m_isStarted = false; private const string c_noSpheroConnected = "No Sphero Connected"; private const string c_connectingToSphero = "Connecting to {0}"; private const string c_spheroConnected = "Connected to {0}"; public MainPage() { this.InitializeComponent(); }
6. Bluetooth経由でSpheroに接続する

7.アプリケーションを起動します。

8. [スタート]ボタンをクリックし、実際にゲームを確認します。

結果
簡単なおもちゃができました。 マルチプレイヤーロボットレースをアレンジしたり、ペットと遊ぶために使用できます。
作品の結果はビデオで見ることができます。
ソースはこちらから入手できます:
github.com/MissUFO/SpheroRace便利なリンク
Windows 8でロボットをプログラミングします。Spheromagic ballSphero公式ウェブサイトSphero開発者センターWindows 8.1用Sphero SDKWindows 8.1用のSphero SDKの例Windows 8.1での加速度計の例Sphero YouTube開発者チャンネルVisual Studio 2013をダウンロードするVisual Studio Onlineの詳細をご覧ください。Visual Studio Onlineにサインアップする