索尼 toio™ 应用创意开发征文 | 如何用Python控制Q宝进行机器人擂台赛

你是否曾经想过,如果能用编程来控制真实的物体,那该有多有趣?如果能让一个小方块按照你的指令来移动、旋转、闪烁,那该有多酷?如果能让一个小方块和其他小方块互动,那该有多神奇?这些想法,都可以通过索尼toio™来实现。

索尼toio™是一款由索尼公司开发的可以激发创意灵感的机器人产品,它可以通过蓝牙连接到手机或电脑,并通过专用的应用或编程语言来控制,可以为从儿童到成人的不同群体带来丰富的互动娱乐体验。

索尼toio™不仅是一款富有创意和娱乐性的玩具,也是一款具有教育意义的工具。toio™具有开放性和可塑性,可为编程初学者、进阶用户以及专业人士提供多样化的STEAM学习和编程开发体验,可以让孩子们在玩乐中学习编程的基本概念和技能。

toio™已经成为帮助许多开发者发挥想象力的伙伴,下面让我们一起来感受一下toio™的魅力吧!

一、索尼toio™简介

索尼toio™是一款由索尼公司开发的智能玩具方块,用乒乓球大小的白色立方体------toio™核心Q宝,即可创作非常广泛的应用和玩法。toio™核心Q宝是一个开源机器人,其产品规格和应用程序编程接口开源,可通过JavaScript、Python、Unity、可视化编程等语言和平台创造出丰富的应用和作品。它可以通过蓝牙连接到手机或电脑,并通过专用的应用或编程语言来控制。它不仅是一款富有创意和娱乐性的玩具,也是一款具有教育意义的工具,可以让孩子们在玩乐中学习编程的基本概念和技能。

索尼toio™由两个小方块组成,每个方块都配置了高性能马达,最大可以带动200g的物品。方块还内置了传感器,可以感知自身的位置、方向、倾斜角度、碰撞等信息,并通过声光信号来反馈。方块之间还可以相互通信,实现协同运动,可应用于艺术创作、游戏、人工智能与深度学习等领域的研究开发。

索尼toio™提供了多种玩法,可以根据不同的年龄段和兴趣选择。对于3岁以上的儿童,可以使用专用的应用来控制方块,进行各种有趣的游戏和挑战。对于6岁以上的儿童,可以使用图形化编程语言Scratch来编写自己的程序,实现更多的创意和功能。对于成人用户,还可以使用Python等高级编程语言来控制方块,开发更复杂的应用和项目。

索尼toio™是一款集创造、体验、灵感于一体的机器人玩教具产品,它可以让用户从儿童到成人阶段都能享受到互动娱乐的乐趣,并培养跨学科思考能力和编程技能。

二、用Python控制方块运动

我是武汉理工大学的一名研究生,最近有幸体验了索尼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)安装bleak软件包,命令如下:

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宝连接到电脑,可以使用USB线或蓝牙来实现连接。

(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对象。最后定义了一个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)测试一:测试方块的电机控制功能,让方块向前行驶一段距离,可以通过以下代码实现:

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方法,传入两个参数分别表示左右两个轮子的速度。这里我设置了10的速度,表示方块以较慢的速度向前行驶。然后等待2秒,再调用同样的方法,传入0的速度,表示方块停止。最后断开连接。

(4)测试二:测试方块的电机控制目标功能,让方块以线性运动,并加速和减速,可以通过以下代码实现:

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)测试三:测试方块的电机控制多个目标功能,可以通过以下代码实现:

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)

这个函数先连接到方块,并注册通知处理函数。然后定义了两个目标位置,分别是(250, 250)和(120, 170),都是绝对最优的旋转方式。然后让方块以线性运动方式,在5秒内以最大速度100,并有加速和减速效果,依次移动到这两个目标位置。最后断开连接。

(6)依次调用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函数用来依次调用test_motor_1, test_motor_2和test_motor_3三个函数,并打印出对应的序号和函数名。

(7)使用asyncio.run(main())来运行main函数:

asyncio.run(main())

运行Python代码,就可以观察到toio™核心Q宝做出的相应反应和表现啦。

三、索尼toio™的机器人擂台赛

你知道机器人武术擂台赛吗?你有没有想过就是这么小巧玲珑的两个Q宝,我们也可以对其进行设计,从而可以进行机器人擂台赛?

机器人武术擂台赛是把智能机器人技术和中国的传统武术文化、创客精神和理念充分结合起来的机器人赛事。参赛队伍需要设计制作完全自主的机器人,双方的机器人在擂台上使用各种传感器检测自身和对手的位置,根据设计的程序算法变化自己的进攻和防守策略,并利用各种执行器(武器)攻击对手,把对手打下擂台获胜。

机器人武术擂台赛是一种模拟中国传统擂台格斗的机器人竞技活动,要求参赛队员设计制作能够完成指定任务的自动化或半自动化机器人,并在规定时间内进行对抗。机器人武术擂台赛可以培养参赛者的创新思维和动手能力,让他们在实践中学习和掌握机器人相关的技术知识,如机械设计、电路设计、编程控制、传感器应用;可以提高参赛者的团队协作和沟通能力,让他们在合作中分工明确、相互配合、共同解决问题,提升团队的整体实力和效率;可以增强参赛者的竞争意识和挑战精神,让他们在对抗中不断优化自己的机器人,追求更高的性能和更好的效果,展现自己的智慧和勇气。机器人武术擂台赛是一种富有教育意义和娱乐价值的机器人竞技活动,它可以让参赛者在快乐中学习,在挑战中成长,在创造中表达。

机器人武术擂台赛能够为我们带来极大的乐趣和多方面不同的体验。而就是这么两个小小的Q宝,也能满足我们对于机器人武术擂台赛的体验。上边已经为大家分享了如何通过Python代码来控制Q宝的移动,当我们能够灵活控制Q宝的移动和其他动作时,想让两个Q宝来一场机器人擂台赛也就不是难事了!

看!当给Q宝带上一个"面具",是不是就更活灵活现了呢!再给它装配上武器装备,是不是看起来战斗力爆满呢?

索尼toio™的机器人擂台赛

用Q宝进行机器人擂台赛的乐趣不仅仅在于控制它们的移动和动作,还在于设计它们的战术和策略。我们可以根据不同的对手和场地,调整Q宝的速度、方向、攻击方式和防御姿态,让它们在擂台上展现出不同的风采。我们也可以给Q宝设置不同的声音和灯光效果,让它们在战斗中发出各种各样的声响和光芒,增加擂台赛的气氛和趣味。

用Q宝进行机器人擂台赛的意义不仅仅在于提升自己的编程能力和机器人知识,还在于培养自己的创造力和想象力。可以根据自己的喜好和风格,给Q宝装饰上各种各样的面具、武器、装备,让它们变成我们心目中的英雄或者反派,或者是我们自己创造的角色。我们也可以根据自己的故事和情节,给Q宝编排上各种各样的剧本、对话、动作,让它们在擂台上演绎出你想象中的场景和故事。

下面经过我们装饰的Q宝是不是更迅猛无比了呢!

总之,用Q宝进行机器人擂台赛是一种富有乐趣、意义、过程的机器人竞技活动,它可以让你在玩中学,在学中玩,在玩中创,在创中玩。

四、索尼toio™之真实体验

在体验了索尼toio™之后,其编程功能让我印象深刻,因为它让我可以自由地控制toio™核心Q宝的行为,实现了对于Q宝的创意想法------机器人比赛。索尼toio™的操作非常简单,提供了各种库和API,使得编写控制和交互代码变得非常容易,从而可以方便的控制它进行灵活的移动和各种不同的动作。无论是对于有编程经验的人,还是对于初学者,都是一个很好的学习和实践工具,通过阅读代码和文档,可以快速地掌握编程接口和逻辑。

核心Q宝搭载了姿势检测和高性能马达等尖端科技!不仅可以检测三维姿势和动作,还可以对外界的刺激和事件做出各种反应。2台核心Q宝之间的碰撞,不仅可以模拟人的互动,还可模拟各种生物做出反应和不可思议的动作。这些都得益于其中的尖端科技元素。拿两个Q宝来一场竞技,真是体验感满满!

我一直对机器人很感兴趣,所以当我听说有一款可以自由操控的智能机器人Q宝时,我就迫不及待地想要试试。Q宝是一款内置了各种奇怪语音的立方体小机器人,它可以通过一个环形的控制器来移动和做出反应。我觉得这样的设计非常有趣。

我想要用Q宝来参加一个机器人擂台赛,所以先给它们装上了一些积木和手工制作的武器,让它们看起来更加强悍。然后我用控制环来操纵Q宝,让它们在一个特制的竞技场上进行对战。竞技场上有各种障碍物和陷阱,需要灵活地控制Q宝的方向和速度,同时还要注意躲避对方的攻击。Q宝之间的碰撞和互动会发出各种有趣的声音,让我觉得非常有趣。

索尼toio™的机器人擂台赛

在机器人擂台赛中,我体验到了Q宝的灵巧和精准,以及它们的可塑性和反应灵敏度。我觉得Q宝是一款非常有创意和互动性的机器人玩具,它可以让我发挥想象力,创造出自己的玩法。我也感受到了机器人擂台赛的刺激和乐趣,以及策略和反应能力的锻炼。我觉得这是一种非常好的娱乐方式,也是一种很好的学习方式。

在体验过程中,我也遇到了一些挑战,比如连接和通信的问题,有时候toio™核心Q宝不能正确地接收我的指令,或者反应很慢。通过检查我的代码和网络设置,以及重启toio™核心Q宝来解决了问题。

索尼toio™的机器人擂台赛

toio™机器人还有非常多的有趣应用,包括通过编程使三个toio™核心Q宝一齐发出音效;通过toio™核心Q宝制作教具;为toio™核心Q宝配备两个机械脚,设计编程代码使toio™核心Q宝能够自主向前行进;给toio™核心Q宝两侧配备两个轮胎,使小车具备越野能力;将两个 toio™ 核心Q宝与 4 个机械轮组合,制作一个四轮车等。

总之,toio™不仅能够创作出有趣的互动作品,还可用于探索未来智能新应用,toio™机器人还有超多的趣味玩法有待我们亲自去探索!

相关推荐
Elihuss1 小时前
ONVIF协议操作摄像头方法
开发语言·php
Swift社区5 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht5 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht5 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20245 小时前
Swift 数组
开发语言
stm 学习ing6 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc7 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe7 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin7 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python