Sony toio™ アプリケーションのクリエイティブ開発エッセイ | Python を使用してロボット競技用の Qbao を制御する方法

現実の物体をプログラミングで制御できたらどんなに楽しいだろうかと思ったことはありませんか? コマンドに従って小さな立方体を移動、回転、点滅させることができたらどんなに素晴らしいでしょうか? 小さな正方形を他の小さな正方形と相互作用させることができたらどんなに素晴らしいでしょうか? これらのアイデアはすべてSony toio™を通じて実現できます。

Sony toio™ は、ソニーが開発した創造性を刺激するロボット製品で、Bluetooth で携帯電話やパソコンと接続し、専用のアプリケーションやプログラミング言語で制御することができ、子供から大人まで幅広い層が利用できます。豊かなインタラクティブなエンターテイメント体験を実現します。

Sony toio™ は、創造的で楽しいおもちゃであるだけでなく、教育ツールでもあります。toio™ はオープンで順応性があり、プログラミング初心者から上級者、専門家まで多様な STEAM 学習とプログラミング開発体験を提供し、子供たちが楽しみながらプログラミングの基本的な概念とスキルを学ぶことができます。

toio™ は、多くの開発者の想像力を支援するパートナーとなっています。一緒に toio™ の魅力を体験しましょう!

1. Sony toio™ の紹介

Sony toio™ は、ソニーが開発したスマート トイ キューブで、toio™ の核となる Q トレジャーである卓球ボール大の白いキューブを使用して、非常に幅広いアプリケーションやゲームプレイを作成できます。toio™ コア Qbao はオープンソースのロボットであり、その製品仕様とアプリケーション プログラミング インターフェイスはオープンソースであり、JavaScript、Python、Unity、ビジュアル プログラミングなどの言語とプラットフォームを通じてさまざまなアプリケーションを作成できます。Bluetooth 経由で携帯電話やコンピュータに接続し、専用のアプリケーションやプログラミング言語を通じて制御できます。創造的で楽しいおもちゃであるだけでなく、子供たちが楽しみながらプログラミングの基本的な概念とスキルを学ぶことができる教育ツールでもあります。

ここに画像の説明を挿入します

Sony toio™ は 2 つの小さな立方体で構成されており、それぞれの立方体には最大 200g までの物体を駆動できる高性能モーターが搭載されています。また、キューブにはセンサーが内蔵されており、キューブ自体の位置、方向、傾斜角度、衝突などの情報を認識し、音や光の信号を通じてフィードバックを与えることができます。ブロックは相互に通信して協調動作を実現することもでき、芸術作品、ゲーム、人工知能、深層学習の分野の研究開発に使用できます。

Sony toio™ は、さまざまな年齢層や興味に応じて選択できるさまざまなゲームプレイ オプションを提供します。3 歳以上のお子様向けには、専用アプリを使用してブロックを制御し、さまざまな楽しいゲームやチャレンジを楽しむことができます。6 歳以上のお子様の場合、グラフィカル プログラミング言語 Scratch を使用して独自のプログラムを作成し、より創造性と機能を実現できます。成人ユーザーの場合は、Python などの高級プログラミング言語を使用してブロックを制御し、より複雑なアプリケーションやプロジェクトを開発することもできます。

ソニー toio™ は、子どもから大人までインタラクティブエンタテインメントの楽しさを楽しみながら、学際的な思考力やプログラミングスキルを育む、創造・体験・インスピレーションを融合したロボット玩具教材です。

2. Python を使用してブロックの動きを制御する

私は武漢理工大学の大学院生で、最近、Sony toio™ を体験し、Python 言語を使用してその動きを制御する機会に恵まれました。以下に、私の最初の経験を共有し、私が書いたコードとエフェクトをいくつか示します。

1. 関連するソフトウェア パッケージをダウンロードします。

(1) まず、コンピューターに Python3.11 以降がインストールされていることを確認する必要があります ( https://www.python.org/ )

(2) setuptools ソフトウェア パッケージをインストールします。コマンドは次のとおりです。

python -m pip install setuptools --upgrade

(3) 次のコマンドを使用して、toio.py ソフトウェア パッケージをインストールします。

python -m pip install toio-py --upgrade

(4) 次のコマンドを使用して、ブリーク ソフトウェア パッケージをインストールします。

python -m pip install bleak

(5) 次のコマンドを使用して、ipykernel ソフトウェア パッケージをインストールします。

python -m pip install ipykernel

(6) コマンド プロンプトで次のコマンドを実行して、toio.py が正常にインストールされているかどうかを確認します。

python -c "import toio.scanner; print('ok')"

画面に「ok」が表示されれば、toio.pyは正常にインストールされています。

インストール手順の詳細については、toio.Python コード ベースの技術ガイダンスを参照してください: https://github.com/toio/toio.py/blob/main/SETUP_GUIDE.zh.md

2. Python でプログラムを書く

(1) コードを記述する前に、toio™ コア Q Bao をコンピュータに接続する必要があります。接続には USB ケーブルまたは Bluetooth を使用できます。

(2) ブロック デバイスをスキャンして接続する必要があります。これは次のコードで実現できます。

import asyncio

from toio import *
async def cube_connect():
    device_list = await BLEScanner.scan(1)
    assert len(device_list) > 0
    cube = ToioCoreCube(device_list[0].interface)
    await cube.connect()
    return cube

async def cube_disconnect(cube):
    await cube.disconnect()
    await asyncio.sleep(2)

このコードは、非同期プログラミングとブロックとの通信のための機能を提供する asyncio モジュールと toio モジュールをインポートします。次に、cube_connect 関数が定義され、キューブ デバイスをスキャンして接続し、キューブ オブジェクトを返します。最後に、cube_disconnect 関数がキューブから切断して 2 秒間待機するように定義されています。

(3) モーター情報など、ブロックから送信される通知データを処理するための notification_handler 関数を定義します。

def notification_handler(payload: bytearray):
    motor_info = Motor.is_my_data(payload)
    print(type(motor_info), str(motor_info))

(3) テスト 1: ブロックを一定距離前進させるために、ブロックのモーター制御機能をテストします。これは、次のコードによって実現できます。

async def test_motor_1():
    """
    example ToioCoreCube.api.motor.motor_control()
    """
    cube = await cube_connect()
    await cube.api.motor.motor_control(10, 10)
    await asyncio.sleep(2)
    await cube.api.motor.motor_control(0, 0)
    await cube_disconnect(cube)

このコードは、ブロックのモーター制御機能をテストするための test_motor_1 関数を定義します。この関数は最初にキューブに接続され、次に cube.api.motor.motor_control メソッドを呼び出し、左右の車輪の速度をそれぞれ表す 2 つのパラメーターを渡します。ここでは速度を 10 に設定します。これは、ブロックがより遅い速度で前進することを意味します。次に、2 秒待ってから同じメソッドを呼び出し、速度 0 を渡して、ブロックが停止することを示します。最後に切断します。

(4) テスト 2: ブロックのモーター制御ターゲット関数をテストし、ブロックが直線的に移動し、加速および減速できるようにします。これは、次のコードによって実現できます。

async def test_motor_2():
    """
    example ToioCoreCube.api.motor.motor_control_target()
    """
    cube = await cube_connect()
    await cube.api.motor.register_notification_handler(notification_handler)
    await cube.api.motor.motor_control_target(
        timeout=5,
        movement_type=MovementType.Linear,
        speed=Speed(
            max=100, speed_change_type=SpeedChangeType.AccelerationAndDeceleration
        ),
        target=TargetPosition(
            cube_location=CubeLocation(point=Point(x=200, y=200), angle=0),
            rotation_option=RotationOption.AbsoluteOptimal,
        ),
    )

    await asyncio.sleep(4)
    await cube.api.motor.motor_control(0, 0)
    await cube_disconnect(cube)

この関数は、まずブロックに接続し、通知ハンドラーを登録します。次に、ブロックを 5 秒以内に最大速度 100 で加減速効果を伴って (200, 200) の位置まで直線運動させ、角度 0 度まで回転させます。最後に停止して切断します。

(5) テスト 3: テスト ブロックのモーターは複数のターゲット機能を制御します。これは、次のコードを通じて実現できます。

async def test_motor_3():
    """
    example ToioCoreCube.api.motor.motor_control_multiple_targets()
    """
    cube = await cube_connect()
    await cube.api.motor.register_notification_handler(notification_handler)
    targets = [
        TargetPosition(
            cube_location=CubeLocation(point=Point(x=250, y=250), angle=0),
            rotation_option=RotationOption.AbsoluteOptimal,
        ),
        TargetPosition(
            cube_location=CubeLocation(point=Point(x=120, y=170), angle=0),
            rotation_option=RotationOption.AbsoluteOptimal,
        ),
    ]
    await cube.api.motor.motor_control_multiple_targets(
        timeout=5,
        movement_type=MovementType.Linear,
        speed=Speed(
            max=100, speed_change_type=SpeedChangeType.AccelerationAndDeceleration
        ),
        mode=WriteMode.Overwrite,
        target_list=targets,
    )

    await asyncio.sleep(5)
    await cube_disconnect(cube)

この関数は、まずブロックに接続し、通知ハンドラーを登録します。次に、2 つの目標位置、つまり (250, 250) と (120, 170) が定義されます。どちらも絶対に最適な回転方法です。次に、ブロックを 5 秒以内の最大速度 100 で加速および減速効果を伴って直線的に移動させ、2 つの目標位置に順番に移動させます。最後に切断します。

(6) 3 つの関数 test_motor_1、test_motor_2、test_motor_3 を順番に呼び出します。

async def main():
    print("1: motor_control()")
    await test_motor_1()
    print("2: motor_control_target()")
    await test_motor_2()
    print("3: motor_control_multiple_targets()")
    await test_motor_3()

定義された main 関数は、3 つの関数 test_motor_1、test_motor_2、test_motor_3 を順番に呼び出し、対応するシリアル番号と関数名を出力するために使用されます。

(7) asyncio.run(main()) を使用して main 関数を実行します。

asyncio.run(main())

Python コードを実行すると、toio™ コア Qbao の対応する応答とパフォーマンスを観察できます。

3. ソニーtoio™ロボットコンテスト

ロボット格闘技場をご存知ですか?この小さくて精巧な 2 つの Q 宝物をデザインして、ロボット競技会を開催できると考えたことはありますか?

ロボット武術チャレンジは、インテリジェントロボット技術と中国の伝統的な武術文化、作り手精神、哲学を完全に組み合わせたロボットイベントです。参加チームは完全自律型ロボットを設計・製作する必要があり、双方のロボットは各種センサーを使用してリング内での自分と対戦相手の位置を検出し、設計されたプログラムのアルゴリズムに従って攻撃と防御の戦略を変更し、さまざまなアクチュエーターを使用します(武器)を使用して相手を攻撃し、相手をリングからノックアウトして勝ちます。

ロボット武術アリーナは、伝統的な中国のアリーナでの戦いをシミュレートするロボット競技会であり、参加チーム メンバーは、指定されたタスクを完了し、指定された時間内に競争できる自動または半自動ロボットを設計および構築する必要があります。ロボット武道大会は、参加者の革新的な思考力と実践力を養い、機械設計、回路設計、プログラミング制御、センサー応用などロボット関連の専門知識を実践的に学び習得し、向上を図ることができます。参加者のチームワークとコミュニケーションスキルにより、明確な役割分担ができ、互いに協力し、協力して問題を解決できるため、チームの総合力と効率が向上し、出場者の競争意識と精神を高めることができます。挑戦の中でロボットを継続的に最適化し、より良い結果を追求することを可能にし、高いパフォーマンスとより良い効果を発揮して、知恵と勇気を示してください。ロボット格闘技大会は、参加者が楽しく学び、挑戦して成長し、創作で表現する、教育的かつエンターテイメント性のあるロボット競技会です。

ロボット格闘技競技は、私たちにとても楽しく、さまざまな体験をもたらしてくれます。そして、これら 2 つの小さな Q の宝物でも、私たちのロボット格闘技競技の経験を満足させることができます。Python コードで Q バオの動きを制御する方法を紹介しましたが、Q バオの動きやその他のアクションを柔軟に制御できれば、2 台の Q バオをロボット競技で競わせることも難しくありません。

見て!Q Baoに「マスク」を付けると、より鮮やかになるでしょうか!あとは武器や装備を装備すると戦闘力が満ち溢れているように見えませんか?

ソニー toio™ ロボットコンテスト

Q Bao を使用してロボット アリーナで競争する楽しみは、Q Bao の動きや行動を制御するだけでなく、戦術や戦略を設計できることです。対戦相手や会場に応じてQバオのスピード、方向、攻撃方法、守備姿勢を調整し、リング上で異なるスタイルを見せることができます。また、Q 宝物にさまざまな音や光の効果を設定することもできるため、戦闘中にさまざまな音や光を発し、アリーナの雰囲気と面白さを高めることができます。

Qbaoを利用してロボット競技会に参加する意義は、プログラミング能力やロボット知識の向上だけでなく、創造性や想像力を養うことにもあります。自分の好みやスタイルに応じて、Q Bao をさまざまなマスク、武器、装備で飾り、頭の中のヒーローや悪役、あるいは自分で作成したキャラクターに変えることができます。また、私たちは独自のストーリーやプロットに基づいて Q Bao のさまざまな台本、会話、アクションをアレンジすることもできるため、リング上でお客様が想像するシーンやストーリーを解釈することができます。

私たちが飾ったキューバオはさらにパワーアップ!

ここに画像の説明を挿入します

つまり、Qbaoを使ってロボット競技に参加することは、遊びながら学ぶ、遊びながら学ぶ、遊びながら作る、楽しみながら作る、楽しさ、意味、過程に満ちたロボット競技活動です。

4. Sony toio™ の実体験

Sony toio™ を体験した後、toio™ の核となる Q トレジャーの動作を自由に制御できるプログラミング機能に感銘を受け、Q トレジャーの独創的なアイデアであるロボット競技を実現しました。Sony toio™ の操作は非常にシンプルで、さまざまなライブラリと API が提供されているため、制御コードやインタラクションコードを非常に簡単に記述でき、柔軟な動きやさまざまなアクションを便利に制御できます。プログラミング経験者にも初心者にも優れた学習および練習ツールであり、コードとドキュメントを読むことで、プログラミング インターフェイスとロジックをすぐにマスターできます。

ここに画像の説明を挿入します

コアQトレジャーには、姿勢検出や高性能モーターなどの最先端技術が搭載! 3次元の姿勢や動きを検出するだけでなく、外部の刺激やイベントに対してさまざまな反応を行うことができます。2 つのコア Q 宝物の衝突は、人間の相互作用をシミュレートするだけでなく、さまざまな生き物の反応や驚くべき動きもシミュレートできます。これらはすべて、最先端の技術要素の恩恵を受けています。2つのQトレジャーを競い合うのは本当に充実した体験です!

もともとロボットに興味があったので、自由自在に操れる知能ロボット「Q Bao」の話を聞いて、ぜひ試してみたいと思いました。Q Bao はさまざまな奇妙な音声が組み込まれた小さな立方体のロボットで、リング状のコントローラーを介して移動したり反応したりできます。このデザインはとても面白いと思います。

Qバオを使ってロボットアリーナに参加したいので、最初にいくつかの積み木と手作りの武器を装備して、より強力に見えるようにしました。次に、コントロールリングを使用してQトレジャーを制御し、特別なアリーナで戦わせました。場内には様々な障害物や罠があり、相手の攻撃を避けることにも注意しながらQバオの方向や速度を柔軟にコントロールする必要がある。Q宝物同士の衝突や相互作用により、様々な面白い音が鳴るので、とても面白いと思います。

ソニー toio™ ロボットコンテスト

ロボット競技では、Q Bao の器用さと正確さ、可塑性と反応性を体験しました。Qbao は、想像力を駆使して独自のゲームプレイを作成できる、非常にクリエイティブでインタラクティブなロボットのおもちゃだと思います。ロボット競技の興奮や楽しさ、戦略性や反応力の鍛錬も感じました。それは楽しむためのとても良い方法であり、学ぶための良い方法でもあると思います。

体験中には、接続や通信の問題が発生し、toio™ core Q トレジャーが指示を正しく受信できなかったり、応答が非常に遅かったりすることがありました。この問題は、コードとネットワーク設定を確認し、toio™ core Qbao を再起動することで解決しました。

ソニー toio™ ロボットコンテスト

また、toio™ ロボットには、プログラミングを通じて 3 つの toio™ コア Q トレジャーを一緒に効果音を発生させること、toio™ コア Q トレジャーを介して教材を作成すること、toio™ コア Q トレジャー用の 2 つの機械の足を構成すること、プログラミング コードを設計することなど、多くの興味深いアプリケーションがあります。 toio™ コア Q トレジャーを自律的に前進させたり、toio™ コア Q トレジャーの両側にタイヤを 2 つ装備してオフロード走行が可能にしたり、2 つの toio™ コア Q トレジャーと 4 つの機械式車輪を組み合わせて 4 台の車を作ったりすることができます。ホイール 車など

つまり、toio™ は、興味深いインタラクティブな作品を作成できるだけでなく、将来的に新しいインテリジェントなアプリケーションを探索するためにも使用できます。toio™ ロボットには、実際に探索できる興味深い遊び方がたくさんあります。

おすすめ

転載: blog.csdn.net/qq_42146402/article/details/132765037