索尼 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 asynciofrom toio import *
async def cube_connect():device_list = await BLEScanner.scan(1)assert len(device_list) > 0cube = 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™机器人还有超多的趣味玩法有待我们亲自去探索!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程语言的类型划分

汇编语言 低级语言,通过汇编器翻译成机器语言 MOV、PUSH、ADD等 特点: 对机器友好、执行效率高、移植性差。 人类操作不太方便,需要专业人员。 高级语言 C、C、Java、Python、Golang等 最终还是会转化成为机器语言。 执行过程划分 编译型 ●…

OpenText EnCase Endpoint Security 识别潜在的网络安全威胁并快速消灭威胁

如今,敏感数据丢失和 IT 系统中断是各类组织面临的最大危机。网络攻击频率不断攀升、修复成本日益增加以及响应时间延长都加剧了数据丢失的隐患。 OpenText EnCase Endpoint Security 的高效体现在能够加速检测恶意活动,并在其导致不可挽回的损失或丢失敏…

嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析

在上一篇文章IAR中ICF链接文件详解和实例分析中,我通过I.MX RT1170的SDK中的内存映射关系,分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说,IAR和Keil用得比较多,所以这一篇文章就来分析一下Keil的分散文件.scf(scat…

【设计模式】组合模式实现部门树实践

1.前言 几乎在每一个系统的开发过程中,都会遇到一些树状结构的开发需求,例如:组织机构树,部门树,菜单树等。只要是需要开发这种树状结构的需求,我们都可以使用组合模式来完成。 本篇将结合组合模式与Mysq…

有哪些做流程图的软件?分享一些制作方法和注意事项

流程图是一种常用的图表,可以用于表示各种工作流程、系统架构、决策流程等。在现代工作生活中,制作流程图已经成为了必备的技能之一。本文将介绍一些常用的做流程图的工具,并分享一些制作方法和注意事项。 做流程图的工具 1.迅捷画图&#x…

AI时代的较量,MixTrust能否略胜一筹?

人工智能的能力正在迅速接近人类,而在许多细分领域,已经超越了人类。虽然短期内这个突破是否会导致人工通用智能(AGI)还不清楚,但我们现在有的模型被训练成在数字交互中完美地模仿高能人类。尽管AGI仍不确定&#xff0…

配置 Windows 系统环境变量

直接按键盘上面的 WINS 打开 Windows 搜索 搜索“编辑系统环境变量” 也可以右键此电脑->属性->高级系统设置打开相同的界面 点击环境变量 一般添加就是添加在框出的 Path 里面,双击可以看到现有的环境变量并进行编辑 例如我在博客中写把 Java 的 jdk 解压好…

用 Python 微调 ChatGPT (GPT-3.5 Turbo)

用 Python 微调 ChatGPT (GPT-3.5 Turbo) 备受期待的 GPT-3.5 Turbo 微调功能现已推出,并且为今年秋季即将发布的 GPT-4 微调功能奠定了基础。 这不仅仅是一次简单的更新——它是一个游戏规则改变者,为开发人员提供了完美定制人工智能模型的关键解决方案…

【备忘】清理Office缓存

【背景】电脑安装了M365 Apps for enterprise的客户端,遇到不常见的奇怪问题。尝试看清理缓存是否可以解决。 【清理步骤】 1. 关闭所有Office365 应用; 2. 搜索 %AppData% ,并打开该文件夹; 3. 进到 AppData > Local > M…

基本介绍——数据挖掘

1.数据挖掘的定义 数据挖掘是采用数学的、统计的、人工智能和神经网络等领域的科学方法,如记忆推理、聚类分析、关联分析、决策树、神经网络、基因算法等技术,从大量数据中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势,并…

深度学习Tensorflow: CUDA_ERROR_OUT_OF_MEMORY解决办法

目前在用深度学习训练,训练中设置batch size后可以正常跑通,但是在训练一轮save_model时,总出现这个错误,即使我调batch size到1也依旧会报错。 发现是在 调用logger时出现问题。 查询后了解到是因为TensorFlow中的eager_executi…

Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)

会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间:2024年4月26日-28日 召开地点:中国宜昌 大会官网:www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开,为…

VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

【分享成果,随喜正能量】若人散乱心,乃至以一花,供养于画像,渐见无数佛。所以发一幅释迦牟尼佛像,与同修善友一起每日在微博上供养,只要有供养之心,便可积累功德。以此回向,愿求者如…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中,调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目,其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说,能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…

java文件命令行报错: 找不到或无法加载主类XXX报错及解决

前言 之前遇到过几次,后面稀里糊涂的解决了。今天详细记录一下,可能不全或有些错误,还请各位指正。 你要启动一个类的话首先要有类。 在这里,类有两种, 一个是带包名(package)的还有一个是没包…

算法刷题记录-双指针/滑动窗口(LeetCode)

809. Expressive Words 思路 根据题目描述,我们可以知道,如果要将某个单词定义为可扩张(stretchy),需要满足如下两个条件: 所以,我们在实现的时候,可以通过两个指针p1和p2&#x…

Jmeter进阶使用指南-分布式测试

当你需要模拟大量并发用户并测试应用程序的性能时,JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户,从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤: 准备主机和从机: 首…

计算机竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

Vue3---uni-app--高德地图引用BUG

先给报错信息:module libs/map//libs/map_min.js is not defined, require args is /libs/map_min.js 查看我引用方法: 本人查阅资料发现 是 require 使用的是 commonJS方式引用说这个适配Vue2可我项目是Vue3应该使用ES6语法糖 然后我有跑了项目发现BU…

蓝桥杯官网练习题(凑算式)

类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…