文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-22 17:13

关注

近几年,机器人擂台赛受到了广大青少年的关注与参与,是中国机器人大赛中参与人数较多的项目。机器人擂台赛是把智能机器人技术和中国的传统武术文化、创客精神和理念充分结合起来的机器人赛事。参赛双方的机器人在擂台上使用各种传感器检测自身和对手的位置,根据设计的程序算法变化自己的进攻和防守策略,并利用各种执行器(武器)攻击对手,把对手打下擂台获胜。
索尼toio™是一款具有高集成度的机器人,虽然 它个头小巧,但它内置六轴传感器、识别感应器、磁力传感器、高性能马达等,能实现灵活移动及定位绝对位置。经过对索尼toio™的探索,我发现它具有极大的扩展性,我觉得使用索尼toio™完全可以实现我对于机器人擂台赛的想法。我们可以根据不同的对手和场地,调整toio™机器人的速度、方向、攻击方式和防御姿态,让它们在擂台上展现出不同的风采,我们也可以给toio™机器人设置不同的声音和灯光效果,让它们在战斗中发出各种各样的声响和光芒,增加擂台赛的气氛和趣味。下面就为大家分享一下我的实现过程。

toio™机器人擂台赛概述:
让两个经过编程和设计的toio™机器人在一个正方形或圆形的擂台上,使用手柄对toio™机器人进行控制,使其寻找对手,互相攻击,将对手打下擂台即可取胜。

toio™机器人擂台赛准备:
在材料方面,我们需要两个toio™Q宝机器人,手柄和一个自制的擂台;在软件方面,因为我们要使用Python语言进行控制,因此需要相关的软件包,包括setuptools,toio,bleak,ipykernel,asyncio等。

toio™机器人擂台赛实现:
下面就是高光时刻,看我们是如何一步步使用toio™机器人来实现一场精彩的机器人擂台赛吧!

用toio™Q宝进行机器人擂台赛的关键在于如何用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 asynciofrom 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 cubeasync 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™机器人还有超多的趣味玩法有待我们亲自去探索!

来源地址:https://blog.csdn.net/qq_42146402/article/details/132765037

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯